3 回答

TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊
看來您的問題是parts[0]
包含字符串"0 \r1 \r2 \r3 \r4 \r5 \r6"
而不是數(shù)字。
strconv.Atoi 函數(shù)只尋找一個要解析的數(shù)字 - 我假設(shè)您在這種情況下試圖獲得第一個“0”。如果是這樣,問題是這段代碼:strings.Split(string(out), "\n")
只尋找“\n”而不是“\r”,這顯然是從osx_fukyobrane_amd64
.
一種解決方案是像這樣拆分行:
regexp.MustCompile(`[\r\n]+`).Split(parts[0], -1)
這會將多行合并為一行,并將 \r、\n 和 \r\n(或其他奇怪的組合)視為有效的換行符。

TA貢獻(xiàn)1830條經(jīng)驗 獲得超9個贊
使用strings.Fields代替Split,它會自動處理\n和\r。
這也比使用 regexp 快得多,后者在 Go 中相當(dāng)慢,盡管它正在得到改進(jìn)。
func splitAndTrim(line string) []string {
out := strings.Fields(line)
for i, s := range out {
out[i] = strings.TrimSpace(s)
}
return out
}

TA貢獻(xiàn)1796條經(jīng)驗 獲得超10個贊
看起來那條線上可能有一些額外的轉(zhuǎn)義數(shù)據(jù)。嘗試按空間分割并使用它。
out, _ := exec.Command(pwd+"/osx_fukyobrane_amd64", "fyb_src/"+filename, "fyb_src/salty.fyb", "t").CombinedOutput()
parts := strings.Split(string(out), "\n")
parts = strings.Split(parts, " ")
fmt.Println(parts[0])
rounds, err := strconv.Atoi(strings.TrimSpace(parts[0]))
if err != nil {
panic(err.Error())
}
- 3 回答
- 0 關(guān)注
- 221 瀏覽
添加回答
舉報