当前位置: 首页 > 面试题库 >

如何在Go结构中初始化成员

尹乐邦
2023-03-14
问题内容

我是Golang的新手,所以分配它会让我发疯:

import "sync"

type SyncMap struct {
        lock *sync.RWMutex
        hm map[string]string
}
func (m *SyncMap) Put (k, v string) {
        m.lock.Lock()
        defer m.lock.Unlock()

        m.hm[k] = v, true
}

之后,我打电话给:

sm := new(SyncMap)
sm.Put("Test, "Test")

这时我得到了nil指针恐慌。

我通过使用另一个函数并在之后调用它来解决该问题new()

func (m *SyncMap) Init() {
        m.hm = make(map[string]string)
        m.lock = new(sync.RWMutex)
}

但是我想知道,是否有可能摆脱这种样板初始化?


问题答案:

您只需要一个构造函数。常用的模式是

func NewSyncMap() *SyncMap {
    return &SyncMap{hm: make(map[string]string)}
}

如果结构中有更多字段,启动goroutine作为后端或注册终结器,则可以在此构造函数中完成所有操作。

func NewSyncMap() *SyncMap {
    sm := SyncMap{
        hm: make(map[string]string),
        foo: "Bar",
    }

    runtime.SetFinalizer(sm, (*SyncMap).stop)

    go sm.backend()

    return &sm
}


 类似资料:
  • 问题内容: 嗨,我是Golang的新手,请帮助我。我已经在结构内部定义了一个结构。但是,当我尝试初始化主结构时出现错误。 我得到的错误是:不能在字段值中使用(类型接口{})作为类型结构:需要类型声明。 请提出一种初始化DetailsFilter的方法。我尝试执行在Golang中初始化嵌套结构中描述的方法,但即使这样也不起作用。 问题答案: 不幸的是,如果结构字段的类型是匿名结构,则 _在构造时_只

  • 此代码编译: 该代码不: 报告的错误(在 MSVC、gcc 和 clang 中)表明他们认为 构造函数未定义或不是 ,例如。从叮叮当当: 为什么? (可能与这个问题有关,但在使用时应该是完整的;只有仍然不完整。

  • 我正在尝试初始化CLLocationCoordinate2D,但收到错误: 错误:执行中断,原因:信号SIGABRT。进程已经留在它被中断的地方,使用“thread return-x”返回到表达式求值之前的状态。 不知道我做错了什么。下面是我尝试的:

  • 问题内容: 通常,我将初始化一个类似的结构: 但是,我最近看到了用括号初始化的代码: 返回相同的名称。 括号中的内容起什么作用?何时首选? 这是一些Go代码可以尝试一下: 游乐场:https : //play.golang.org/p/_gsaruS_DVi 问题答案: 没什么特别的,那两行是相同的。 但是,例如,当您要在语句中使用它时,将需要使用括号,否则会出现编译时错误: 结果是: 预期的布尔

  • 主要内容:使用“键值对”初始化结构体,使用多个值的列表初始化结构体,初始化匿名结构体结构体在实例化时可以直接对成员变量进行初始化,初始化有两种形式分别是以字段“键值对”形式和多个值的列表形式,键值对形式的初始化适合选择性填充字段较多的结构体,多个值的列表形式适合填充字段较少的结构体。 使用“键值对”初始化结构体 结构体可以使用“键值对”(Key value pair)初始化字段,每个“键”(Key)对应结构体中的一个字段,键的“值”(Value)对应字段需要初始化的值。 键值对的

  • 问题内容: 嗨,我是新手,想尽办法。如何从json对象初始化结构。我不知道该怎么办。 {“用户”:{“名称”:“ cruskuaka”,“电子邮件”:“ cristlika@gmail.com”,“电话号码”:“ 018833455”},“地址”:{“房屋”:“ 100”,“街道“:” B“,”镇“:{” town_id“:” 1“,” town_name“:”高威市中心“},” city“:{”