有一些非常大的字符串和 2 个输出此字符串的函数:
main() {
str := "Very long string"
printValueStr(str)
printPointerStr(&str)
}
// printValueStr() принимает строку и выводит её на экран
func printValueStr(str string) {
fmt.Println(str)
}
// printPointerStr() принимает указатель на строку и выводит её значение
func printPointerStr(str *string) {
fmt.Println(*str)
}
可以肯定地说,通过引用传递这个字符串总是保证比通过值传递更快吗?也就是说,在程序执行过程中,我们不需要在内存中创建变量的独立副本。我们不会为此花费资源,而只是引用一个已经存在的变量。
还是在优化方面没有区别?
在 Go 中,类型
string
在内部表示为 2 个值的结构 - 指向带有字符串数据的字节数组的指针和该数组的长度:该结构的大小为 8 或 16 个字节,具体取决于位深度。
因此,当您将字符串按值传递给函数时,只会复制此结构,而不是整个字符串。换句话说,你不必乱用指向字符串的指针,而且不管字符串有多大,反正它很快。