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

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

在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)?


慕码人2483693
浏览 668回答 3
3回答

慕丝7291255

签名是Replace(s, old, new []byte, n int) []bytes、old和new各有三个单词(切片头是(ptr, len, cap))和n int是一个单词,所以10个单词,在8个字节/字是80个字节
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go