如何使用fmt.ScanfGo中的函数从标准输入获取整数输入?
如果使用无法完成此操作fmt.Scanf,那么读取单个整数的最佳方法是什么?
Answers:
http://golang.org/pkg/fmt/#Scanf
Go中包含的所有库都有充分的文档记录。
话虽如此,我相信
func main() {
    var i int
    _, err := fmt.Scanf("%d", &i)
}
绝招
&i而不是仅仅i作为fmt.Printf("%v", i)?
                    i只是中的整数值i,&i是的指针i。
                    一个更简洁的替代方法是只使用fmt.Scan:
package main
import "fmt"
func main() {
    var i int
    fmt.Scan(&i)
    fmt.Println("read number", i, "from stdin")
}
这使用对参数类型的反射来发现应如何解析输入。
这是我的“快速IO”方法,用于读取正整数。可以通过移位和预先布局内存来进行改进。
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比Golang fmt.Scanf简单(比Clang scanf简单)
如果fmt.Scan错误,即如果不是nil,则记录并返回
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)
祝你好运