相关疑难解决方法(0)

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

在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
}
Run Code Online (Sandbox Code Playgroud)

我理解这些之间的差异.第一个返回结构的副本,第二个返回指向函数内创建的结构值的指针,第三个期望传入现有结构并覆盖该值.

我已经看到所有这些模式都在各种环境中使用,我想知道关于这些模式的最佳实践是什么.你什么时候用哪个?例如,第一个可能适用于小结构(因为开销很小),第二个适用于较大结构.第三个是你想要非常高效的内存,因为你可以在调用之间轻松地重用一个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} }
}
Run Code Online (Sandbox Code Playgroud)

再说一次:这里的最佳做法是什么.我知道切片总是指针,所以返回指向切片的指针是没用的.但是,如果我返回一片struct值,一块指向结构的指针,我应该将指向切片的指针作为参数传入(Go …

pointers go

295
推荐指数
4
解决办法
6万
查看次数

go tour何时不在变量中使用指向struct literal的指针

按照围棋游览第28 第53页

它们显示一个变量,它是指向struct literal的指针.为什么这不是默认行为?我不熟悉C,所以我很难绕过它.我唯一能看到使用指针时更有利的时候是struct literal是唯一的,并且不会用于其余的程序,所以你希望它尽快被垃圾收集.我甚至不确定像Go这样的现代语言是否能以这种方式运作.

我的问题是这个.我应该何时将指向结构文字的指针分配给变量,何时应该分配结构文字本身?

谢谢.

pointers go

10
推荐指数
1
解决办法
1224
查看次数

是否存在标准惯用Go for"构造函数"?

鉴于以下内容:

type AStruct struct {
    m_Map map[int]bool
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,在初始化AStruct之前不能使用实例AStruct.m_Map:

m_Map=make(map[int]bool,100)
Run Code Online (Sandbox Code Playgroud)

Init()在这种情况下,我已经为我的结构编写了一个函数:

func (s *AStruct) Init() {
    s.m_Map=make(map[int]bool,100)
}
Run Code Online (Sandbox Code Playgroud)

我并不特别关心这个设计,因为它需要(s *AStruct) Init()是公共的,并且要求客户端在使用实例之前明确地调用它AStuct- 在临时中有一个不可用的实例AStuct,等待生成一个panic.

在初始化完所有内容后,我可以设置init()私有并initialized boolstructset中声明一个标志并检查每个方法:trueinit()

func (s *AStruct) DoStuff {

    if !s.initialized {
         s.init()
    }

    s.m_Map[1]=false
    s.m_Map[2]=true
}
Run Code Online (Sandbox Code Playgroud)

但这很尴尬,并添加了多余的代码.

在Go中有没有标准的处理方式?保证m_Map的一个将被初始化而不依赖于客户端来调用Init()

constructor idioms initialization go

1
推荐指数
1
解决办法
301
查看次数

标签 统计

go ×3

pointers ×2

constructor ×1

idioms ×1

initialization ×1