【golang】探究io.WriteString

【golang】探究io.WriteString

在io包里有一个函数叫writeString,这个函数接收两个参数,第一个参数是实现io.Writer接口的具体对象,第二个参数是需要写入的字符串。

嗯,为什么会有这个函数的存在。

我们先看看函数io.Writer接口

type Writer interface {
    Write(p []byte) (n int, err error)
}

它有一个write方法,接收一个[]byte类型的参数,即为要写入的内容。但是很多时候我们都是操作的字符串,在使用write方法的时候,需要显示的使用类型转换,比如我想向屏幕里输出一句hello golang

_, err := os.Stdout.Write([]byte("hello golang"))
if err != nil { fmt.Fprintln(os.Stderr, err) }

在golang中,进行显示的类型转换再传入Write,就意味着要开辟一块零时内存。如果调用write的次数多了,开辟内存的次数也多了,对于应用性能来说是很不理想的。因此,才会有一个WriteString方法。

先看一下io.WriteString

func WriteString(w Writer, s string) (n int, err error) {
    if sw, ok := w.(stringWriter); ok {
        return sw.WriteString(s)
    }
    return w.Write([]byte(s))
}

为了操作更加安全,在WriteString函数中进行了类型断言,如果传入的Writer对象有WriteString方法的话,那么就调用它的WriteString方法,反之,调用Write方法,并显示的进行类型转换。

猜你喜欢

转载自blog.csdn.net/HaoDaWang/article/details/80778008