练习 7.1: 使用来自 ByteCounter 的思路,实现一个针对单词和行数的计数器。
Q: 为什么注释了*c++ len(p) 返回结果是 0 呢
网上看的一个答案
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++ // 如果注释了这儿 那么 len(p) 返回结果是 0
}
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++
}
return len(p), nil
}
描述不对。注释掉
*c++
不影响len(p)
,影响的是wc
的值。不注释
*c++
的情况下输出是注释掉之后的输出是