1 回答

TA贡献1906条经验 获得超10个赞
多亏了名单上的伊恩·兰斯·泰勒(Ian Lance Taylor),他建议使用错误而不是.在 Go 代码中,调用一个函数,该函数又调用一个函数 [1]。最后一个函数用于将任何错误转换为常规错误。该程序为我的原始示例提供了可识别的输出:golang-nutspanicreturnFscandoScanerrorHandlerrecoverpanic
package main
import (
"fmt"
"strings"
)
type comma struct { tok string }
func (c *comma) Scan(state fmt.ScanState, verb rune) error {
tok, err := state.Token(false, func(r rune) bool {
return r != ','
})
if err != nil { return err }
if _, _, err := state.ReadRune(); err != nil {
if len(tok) == 0 {
panic(err)
}
}
c.tok = string(tok)
return nil
}
func main() {
r := strings.NewReader("west,north,east")
for {
var c comma
_, err := fmt.Fscan(r, &c)
fmt.Printf("%q %v\n", c.tok, err)
if err != nil { break }
}
}
https://github.com/golang/go/blob/go1.16.4/src/fmt/scan.go#L1056-L1067
- 1 回答
- 0 关注
- 100 浏览
添加回答
举报