首页 > 解决方案 > 在结构中使用指针有缺点吗?

问题描述

我正在玩mysql并将结果返回到一个结构数组中。

type User struct {
    FirstName string
    LastName  string
}

Go 不允许将 nil 值作为字符串,但如果我将字符串设为指针

type User struct {
    FirstName *string
    LastName  *string
}

然后它是允许的,我可以将数据库中的 NULL 值解析为 nil 字符串。

使用指针允许 nil 是否有特定的缺点?为什么我应该使用更繁琐的 NullString 方法?

type NullString struct {
    String string
    Valid bool
}

标签: pointersgostruct

解决方案


缺点很简单,但它们主要也是优点:

  1. 现在有一个可以为 nil 的指针。您可能需要以不同的方式处理这种情况(因为指针可能为零),这意味着您必须编写更多代码。这也是它的优点:您可能需要以不同的方式处理这种情况(即,对于您希望解决的问题),在这种情况下,您需要一种方法将“不存在”与“内容为 ___”分开标记。将指针设置为 nil 的能力为您提供了这种区别。

  2. 因为涉及到指针,所以可以共享底层数据。这也是它自身的优势。

  3. 实际上使用数据需要一个额外的间接级别。(这是纯粹的劣势——这里没有优势。)


推荐阅读