是否可以像 C 中省略欄位 %*s
?
var pid int fmt.Fscanf(r, "%*s %d", &pid)
實際上,在 Go 中你無法做到這一點(至少在 Go 1.21.0 上)。
原始碼表明:
%*s
):實際上,字串的動詞總是單一字元 (% s
、%v
、%q
、%X
或%X
)Fscanf
方法迭代參數(a
中的Fscanf 陣列(r io.Reader ,格式字串,a ...any)
)。因此,您必須在 a
中定義一個參數,即使您不關心它的值如果您不想定義變量,可以使用:
var pid int fmt.Fscanf(r, "%s %d", new(string), &pid)
對於您的具體情況,要解析閱讀器中的某些內容,您可以先將閱讀器讀入字串(例如 io.ReadAll
):
接著使用 strings.Split
方法或正規表示式,例如:
strings.Split
pidString := strings.Split(string(s), " ")[1] pid, err := strconv.Atoi(pidString) if err != nil { panic(err) // handle the error }
re := regexp.MustCompile(`[^\s]+ (?P<pid>\d+)`) // similar to "%s %d" matches := re.FindStringSubmatch(s) pidString := matches[re.SubexpIndex("pid")] pid, err := strconv.Atoi(pidString) if err != nil { panic(err) // handle the error }
可能還有其他方法,但這些應該足以說明。希望有幫助。
以上是Fscanf 並像 C 中那樣省略字段的詳細內容。更多資訊請關注PHP中文網其他相關文章!