gopl-zh.github.com/vendor/gopl.io/ch7/bytecounter/main.go

36 lines
696 B
Go
Raw Normal View History

// Copyright © 2016 Alan A. A. Donovan & Brian W. Kernighan.
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
// See page 173.
// Bytecounter demonstrates an implementation of io.Writer that counts bytes.
package main
import (
"fmt"
)
//!+bytecounter
type ByteCounter int
func (c *ByteCounter) Write(p []byte) (int, error) {
*c += ByteCounter(len(p)) // convert int to ByteCounter
return len(p), nil
}
//!-bytecounter
func main() {
//!+main
var c ByteCounter
c.Write([]byte("hello"))
fmt.Println(c) // "5", = len("hello")
c = 0 // reset the counter
var name = "Dolly"
fmt.Fprintf(&c, "hello, %s", name)
fmt.Println(c) // "12", = len("hello, Dolly")
//!-main
}