如何创建不会被复制且不能为null的函数参数

时间:2019-03-30 18:23:54

标签: go

在golang中,是否可以创建一个具有以下约束的结构的函数:

  • 不得复制该结构(它相对较大)
  • 呼叫者一定不能通过nil

编辑: 我尝试使用指针,但是可以将其设置为null。我找不到任何有关如何使用引用的好的文章,而且似乎无法通过引用传递。

1 个答案:

答案 0 :(得分:2)

您可以创建一个小的结构包装器,该包装器包含指向大结构体的私有指针,并定义Get方法以允许获取此大结构体。在Get内部,您检查指针是否为nil,然后恐慌了。

类似的东西:

type StructHolder struct {
    target *BigStruct
}

func (s StructHolder) Get() *BigStruct {
    if s.target == nil {
        panic("target is nil")
    }

    return s.target
}

您为什么要这样做?我认为最好传递一个指针并检查其值。