我来自 C++ 世界,在 C++ 中,通常当您关心性能并且不需要更改对象时,您可以使用常量引用传递它
void func(const std::string& str)
在这种情况下,字符串未被复制并且不能在函数中修改。
我知道,在 Go 中有两种传递对象的方法:
- 按值,然后你不能修改(或者实际上你可以但它没有意义)它,但它非常耗费内存
- 通过指针,从内存的角度来说是好的,但是可以修改object。
那么,最好的方法是什么?总是通过指针传递对象,即使你不想修改它,因为它更快?或者有一些编译器优化,即使您按值发送它,有时它也会作为引用发送?
最佳答案
Go 中没有直接的等价物。
- 如果对象很大(~大于 32-64 字节)和/或需要更改,则通过指针传递。
- 如果上述规则不适用,则按值传递。
- maps/channels/slices 是引用类型,它们包含内部指针,所以你不需要通过指针传递它们,除非你计划可能传递一个 nil 或想追加(而不是修改已经包含的元素)到一个 slice 。
例子:
func doMap(m *map[string]string) {
if *m == nil {
*m = map[string]string{}
}
.....
}
关于go - C++ 中的 Const 引用和 Golang 中的等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36551835/