我还不习惯去做事。 这里我有包装BidiMap的ClientConnectorPool类型。我应该如何初始化这种类型?这样我可以添加到我的bidiMap后话吗?我所有尝试做同样的事情都是hackish,我需要灵感,我可以为它实现一些make(ClientConnectorPool)函数吗?
在我的脑海里,它应该看起来像这样,但我的所有解决方案都像15行代码,以避免零指针错误:D
CC = make(ClientConnectorPool)
CC.Add("foo","bar")
代码:
package main
import ()
type ClientConnectorPool struct {
Name string
ConnectorList BidirMap
}
func (c ClientConnectorPool) Add(key, val interface{}){
c.ConnectorList.Add(key,val)
}
type BidirMap struct {
left, right map[interface{}]interface{}
}
func (m BidirMap) Add(key, val interface{}) {
if _, inleft := m.left[key]; inleft {
delete(m.left, key)
}
if _, inright := m.right[val]; inright {
delete(m.right, val)
}
m.left[key] = val
m.right[val] = key
}
答案 0 :(得分:3)
您无法为make()定义自定义函数。仅适用于切片,贴图和通道(以及具有这些表示的自定义类型)。
惯用Go将是一个NewClientConnectorPool
函数(以下缩写为NewPool
),用于创建并返回它。
func NewPool(name string) ClientConnectorPool {
return ClientConnectorPool{
Name: name,
ConnectorList: BidirMap{
left: make(map[interface{}]interface{}),
right: make(map[interface{}]interface{}),
},
}
}
您还可以使用NewBidirMap
函数来包装该结构的创建。
我不知道你需要在哪里检查nil。 make()
不会返回nil,其余的是一个简单的struct literal。