Это кажется почти правильным, но оно задыхается от новой строки.
Какой лучший способ сделать это?
package main
import (
"fmt"
"strings"
)
func main() {
var z float64
var a []float64
// \n gives an error for Fscanf
s := "3.25 -12.6 33.7 \n 3.47"
in := strings.NewReader(s)
for {
n, err := fmt.Fscanf(in, "%f", &z)
fmt.Println("n", n)
if err != nil {
break
}
a = append(a, z)
}
fmt.Println(a)
}
Выход:
n 1
n 1
n 1
n 0
[3.25 -12.6 33.7]
Обновление:
Смотрите ответ от @Atom ниже. Я нашел другой способ, который должен сломаться, если ошибка EOF, а в противном случае просто игнорировать ее. Я знаю, что это просто взлом, но я контролирую источник.
_, err := fmt.Fscanf(in, "%f", &z)
if err == os.EOF { break }
if err != nil { continue }