为了账号安全,请及时绑定邮箱和手机立即绑定

参数和返回值中的指针和值

参数和返回值中的指针和值

Go
慕码人2483693 2019-06-29 15:00:41
参数和返回值中的指针和值在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) []bytes、old和new各有三个单词(切片头是(ptr, len, cap))和n int是一个单词,所以10个单词,在8个字节/字是80个字节

查看完整回答
反对 回复 2019-06-29
  • 3 回答
  • 0 关注
  • 634 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信