参数和返回值中的指针和值在Go中,返回一个struct价值或其部分。对于我见过的个人:type MyStruct struct {
Val int}func myfunc() MyStruct {
return MyStruct{Val: 1}}func myfunc() *MyStruct {
return &MyStruct{}}func myfunc(s *MyStruct) {
s.Val = 1}我理解它们之间的区别。第一个返回结构的副本,第二个是指向在函数中创建的struct值的指针,第三个期望传入一个现有的结构并重写该值。我已经看到所有这些模式都在不同的环境中使用,我想知道关于这些模式的最佳实践是什么。你什么时候会用它?例如,第一个可以用于小型结构(因为开销最小),第二个可以用于较大的结构。第三,如果您想要非常高效的内存,因为您可以很容易地重用单个结构实例之间的调用。对于何时使用哪种方法,有什么最佳做法吗?同样,关于切片的相同问题:func myfunc() []MyStruct {
return []MyStruct{ MyStruct{Val: 1} }}func myfunc() []*MyStruct {
return []MyStruct{ &MyStruct{Val: 1} }}func myfunc(s *[]MyStruct) {
*s = []MyStruct{ MyStruct{Val: 1} }}func myfunc(s *[]*MyStruct) {
*s = []MyStruct{ &MyStruct{Val: 1} }}再说一遍:这里的最佳实践是什么?我知道切片总是指针,所以将指针返回到片是没有用的。但是,我是否应该返回一个struct值的片段,一个指向structs的指针片段,我是否应该将指向一个片段的指针作为参数传递(Go应用程序引擎API)?
3 回答
慕丝7291255
TA贡献1859条经验 获得超6个赞
Replace(s, old, new []byte, n int) []byte
(ptr, len, cap)
n int
- 3 回答
- 0 关注
- 667 浏览
添加回答
举报
0/150
提交
取消