Làm cách nào để sử dụng fmt.Scanfhàm trong Go để lấy đầu vào số nguyên từ đầu vào chuẩn?
Nếu điều này không thể được thực hiện bằng cách sử dụng fmt.Scanf, cách tốt nhất để đọc một số nguyên là gì?
Câu trả lời:
http://golang.org/pkg/fmt/#Scanf
Tất cả các thư viện có trong Go đều được ghi chép đầy đủ.
Điều đó đang được nói, tôi tin rằng
func main() {
    var i int
    _, err := fmt.Scanf("%d", &i)
}
có lừa không
&ivà không chỉ inhư trong fmt.Printf("%v", i)?
                    ichỉ là giá trị số nguyên trong i, &ilà một con trỏ tới i.
                    Một giải pháp thay thế có thể ngắn gọn hơn một chút là chỉ sử dụng fmt.Scan:
package main
import "fmt"
func main() {
    var i int
    fmt.Scan(&i)
    fmt.Println("read number", i, "from stdin")
}
Điều này sử dụng sự phản ánh về loại đối số để khám phá cách phân tích cú pháp đầu vào.
Đây là phương pháp "IO nhanh" của tôi để đọc số nguyên dương. Nó có thể được cải thiện với các bithifts và bố trí trước bộ nhớ.
package main
import (
    "io/ioutil"
    "bufio"
    "os"
    "strconv"
)
func main() {
    out := bufio.NewWriter(os.Stdout)
    ints := getInts()
    var T int64
    T, ints = ints[0], ints[1:]
    ..
    out.WriteString(strconv.Itoa(my_num) + "\n")
    out.Flush()
    }
}
func getInts() []int64 {
    //assumes POSITIVE INTEGERS. Check v for '-' if you have negative.
    var buf []byte
    buf, _ = ioutil.ReadAll(os.Stdin)
    var ints []int64
    num := int64(0)
    found := false
    for _, v := range buf {
        if '0' <= v && v <= '9' {
            num = 10*num + int64(v - '0') //could use bitshifting here.
            found = true
        } else if found {
            ints = append(ints, num)
            found = false
            num = 0
        }
    }
    if found {
        ints = append(ints, num)
        found = false
        num = 0
    }
    return ints
}
    Golang fmt.Scan đơn giản hơn Golang fmt.Scanf (đơn giản hơn Clang scanf)
Nếu lỗi fmt.Scan, tức là nếu không phải nil, hãy ghi lại và trả về
import (
    "fmt"
    "log"
)
var i int
if    _, err := fmt.Scan(&i);    err != nil {
    log.Print("  Scan for i failed, due to ", err)
    return
}
fmt.Println(i)
import (
    "fmt"
    "log"
)
var i, j, k int  
if    _, err := fmt.Scan(&i, &j, &k);    err != nil {
    log.Print("  Scan for i, j & k failed, due to ", err)
    return
}
fmt.Println(i, j, k)
May mắn nhất
Bạn có thể sử dụng fmt.Scanfvới công cụ định dạng. Thông số định dạng cho số nguyên là% d. Vì vậy, bạn có thể sử dụng đầu vào tiêu chuẩn như bên dưới.
func main() {
    var someVar int
    fmt.Scanf("%d", &someVar)
}
hoặc nếu không bạn có thể sử dụng fmt.Scanhoặc fmt.Scanlnnhư bên dưới.
func main() {
   var someVar int
   fmt.Scanln(&someVar)
}