gpt4 book ai didi

go - 最佳实践,如何初始化自定义类型?

转载 作者:IT王子 更新时间:2023-10-29 02:00:18 26 4
gpt4 key购买 nike

我仍然不习惯做事的方式。在这里,我有包装 BidiMap 的 ClientConnectorPool 类型。我应该如何初始化这种类型?以便我可以添加到我的 bidiMap 后记中?我做这件事的所有尝试都是骇人听闻的,我需要灵感,我可以为它实现某种 om make(ClientConnectorPool) 函数吗?

在我看来它应该是这样的,但我所有的解决方案都是 15 行代码来避免 nil 指针错误 :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
}

最佳答案

您不能为 make() 定义自定义函数。 Make 仅适用于 slice 、 map 和 channel (以及具有这些表示的自定义类型)。

地道的 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,剩下的就是一个简单的结构体。

关于go - 最佳实践,如何初始化自定义类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17221347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com