Stringer接口
相当于toString的功能
- 源码
// print.go
type Stringer interface {
String() string
}
- 例子
package mock
import "fmt"
type Receiver struct {
Contents string
}
func (r *Receiver) String() string {
return fmt.Sprintf("Receiver:{Contesnts=%s}:",r.Contents)
}
func main() {
//var r mock.Receiver
r := Receiver{"This is a test for toString"}
println(r.String())
}
Reader
相当于读文件或读io操作
- 源码
// io.go
type Reader interface {
Read(p []byte) (n int, err error)
}
- 示例
import (
"bufio"
"fmt"
"io"
"os"
"strings"
)
func printFile(filename string) {
file, err := os.Open(filename)
if err != nil {
panic(err)
}
printFileContents(file)
}
func printFileContents(reader io.Reader) {
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
func main() {
printFile("./file/my.txt")
s := `aaa"d"
kkk
p
123456`
//将字符串转为reader
printFileContents(strings.NewReader(s))
}
- my.txt文件内容
this is a test
my name is liping
中文
Writer
相当于往文件等io操作里写内容
- 源码
// io.go
type Writer interface {
Writer(p []byte) (n int, err error)
}
- 示例
import (
"bufio"
"fmt"
"io"
"os"
)
func writerFile(filename string, content string) {
f, err := os.OpenFile(filename,os.O_APPEND,0764)
defer f.Close()
if err != nil{
fmt.Println("文件不存在,正在创建文件")
f,_ = os.Create(filename)
//panic(err)
}
writerFileContent(f,content)
}
func writerFileContent(writer *os.File, content string) {
defer writer.Close()
fmt.Println("文件打开成功")
//打印字节
writer.Write([]byte(content))
//字印字符串
writer.WriteString(content)
}
func main() {
writerFile("./file/my.txt","要写入的内容1\r\n要写入的内容2\r\n\t要写入的内容3\r\n")
}