Go1.19:fmt Package新增方法fmt.Append
前言: 写Go的同学都知道fmt是用到最多的一个包,在1.19版本的更新中fmt新增三个方法fmt.Append、fmt.Appendf、fmt.Appendln。这三个方法对应的用法和fmt.Print、fmt.Printf、fmt.Println是一致的。本文主要从作用、用法,和应用场景展开论述。
Main
1.fmt.Append系列方法的作用
fmt.Append的作用是将一个值追加到一个字节切片中,并返回新的字节切片。它的用法类似于fmt.Sprintf,只不过它不返回一个字符串,而是返回一个[]byte。
fmt.Append、fmt.Appendf和fmt.Appendln的区别是:
fmt.Append的第二个参数是一个值,而fmt.Appendf的第二个参数是一个格式化字符串。fmt.Append不需要指定格式化动词,而fmt.Appendf需要指定格式化动词。fmt.Append可以接受任意类型的值,而fmt.Appendf只能接受和格式化动词匹配的类型的值。fmt.Appendln和fmt.Append接收参数一样,不一样的是fmt.Appendln会在追加值后添加换行符\n
2.fmt.Append系列方法的作用
var b []byte
//fmt.Append
b = fmt.Append(b, 42) // b == []byte{42}
//fmt.Appendf
b = fmt.Appendf(b, "%d", 42) // b == []byte("42")
////fmt.Appendln
b = fmt.Appendln(b, "Hello", "world") // b == []byte("Hello world\n")
b = fmt.Appendln(b, 42) // b == []byte("Hello world\n42\n")
例如:
func main() {
var b = []byte("42")
b = fmt.Appendf(b, "42")
fmt.println(b)//[52 50 52 50]
// 方法一
fmt.Println(string(b))//4242
// 方法二
fmt.Println(fmt.Sprintf("%s", b))
// 方法三
fmt.Printf("%s\n", b)
}
注: 直接打印字节切片会打印切片中相应的ASCII码
要修改代码使得输出的是4242,有以下几种方法:
- 使用
string函数将b转换为字符串,然后打印 - 使用
fmt.Sprintf函数将b格式化为字符串,然后打印 - 使用
fmt.Printf函数直接将b格式化并打印
3.fmt.Append的应用场景
- 当需要将多个值格式化为一个字节切片时,可以使用fmt.Append,而不需要创建多个字符串或使用缓冲区
- 当需要将格式化的字节切片写入文件或网络时,可以使用fmt.Append,而不需要先转换为字符串
- 当需要在循环中逐步构建一个字节切片时,可以使用fmt.Append,而不需要每次都创建一个新的字节切片
结束语: 如果对您有帮助!点个赞 :+1: 加个关注吧 :heart: ,有问题评论区留言交流哦!