Go1.19:fmt Package新增方法fmt.Append

693 阅读2分钟

Go1.19:fmt Package新增方法fmt.Append

前言: 写Go的同学都知道fmt是用到最多的一个包,在1.19版本的更新中fmt新增三个方法fmt.Appendfmt.Appendffmt.Appendln。这三个方法对应的用法和fmt.Printfmt.Printffmt.Println是一致的。本文主要从作用、用法,和应用场景展开论述。

Main

1.fmt.Append系列方法的作用

fmt.Append的作用是将一个值追加到一个字节切片中,并返回新的字节切片。它的用法类似于fmt.Sprintf,只不过它不返回一个字符串,而是返回一个[]byte。

fmt.Appendfmt.Appendffmt.Appendln的区别是:

  • fmt.Append的第二个参数是一个值,而fmt.Appendf的第二个参数是一个格式化字符串。
  • fmt.Append不需要指定格式化动词,而fmt.Appendf需要指定格式化动词。
  • fmt.Append可以接受任意类型的值,而fmt.Appendf只能接受和格式化动词匹配的类型的值。
  • fmt.Appendlnfmt.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: ,有问题评论区留言交流哦!