Rumah >pembangunan bahagian belakang >Golang >Fscanf dan mengetepikan medan seperti dalam C
Adakah mungkin untuk meninggalkan medan %*s
seperti dalam C?
var pid int fmt.Fscanf(r, "%*s %d", &pid)
Sebenarnya, anda tidak boleh melakukan ini dalam Go (sekurang-kurangnya pada Go 1.21.0).
Kod sumber menunjukkan:
%*s
):实际上,字符串的动词始终是 单个字符 (% s
、%v
、%q
、%X
或 %X
dalam bahasa C): sebenarnya, kata kerja rentetan itu sentiasa Tunggal aksara
% s
, %v
, %q
, %X
atau %X
)Fscanf
方法 迭代参数(a
中的 Fscanf 数组(r io.Reader,格式字符串,a ...any)
)。因此,您必须在 a
tatasusunan Fscanf(r io.Reader, rentetan format, a...mana-mana) dalam <code>a
). Oleh itu, anda mesti mentakrifkan parameter dalam a
walaupun anda tidak mengambil berat tentang nilainya
var pid int fmt.Fscanf(r, "%s %d", new(string), &pid)
Alternatif lainio.ReadAll
): strings.Split
CB835C294C06824721603abd255bd78a
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 }🎜Mungkin ada cara lain, tetapi ini sudah memadai. Semoga membantu. 🎜
Atas ialah kandungan terperinci Fscanf dan mengetepikan medan seperti dalam C. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!