练习 7.1: 使用来自 ByteCounter 的思路,实现一个针对单词和行数的计数器。
网上看的一个答案
func main() {
s := "Hello, World!\nHello, 世界!"
var wc WordCounter
fmt.Fprintf(&wc, s)
fmt.Println(wc)
var lc LineCounter
fmt.Fprintf(&lc, s)
fmt.Println(lc)
}
type WordCounter int
func (c *WordCounter) Write(p []byte) (int, error) {
scanner := bufio.NewScanner(bytes.NewReader(p))
scanner.Split(bufio.ScanWords)
for scanner.Scan() {
*c++
}
return len(p), nil
}
type LineCounter int
func (c *LineCounter) Write(p []byte) (int, error) {
scanner := bufio.NewScanner(bytes.NewReader(p))
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
*c++ // 如果注释了这儿 那么 len(p) 返回结果是 0
}
return len(p), nil
}
*c++
len(p) 返回结果是 0 呢?-
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.