首页 >后端开发 >Golang >如何区分 Go 结构体中的未设置值和空值?

如何区分 Go 结构体中的未设置值和空值?

Susan Sarandon
Susan Sarandon原创
2024-10-24 12:58:02833浏览

How to Distinguish Between Unset and Empty Values in Go Structs?

区分 Go 结构体中的 Unset 和 Empty 值

在 Go 中,定义结构体时,你可能会遇到需要区分以下值的情况:故意未设置并且值只是空的。这对于数据库持久性和确保准确的数据处理至关重要。

考虑以下示例:

<code class="go">type Organisation struct {
    Category string
    Code     string
    Name     string
}</code>

假设您想要确定 Category 字段是否从未设置或有意设置作为空字符串。使用字段指针(例如 *string)并不能解决这个问题,因为指针的零值为 nil,它无法区分未设置的值和空值。

要解决这个问题,您可以使用自定义类型,例如来自database/sql 包的sql.NullString。它跟踪 NULL 状态并允许您区分以下情况:

  • unset: NullString{String: "", Valid: false}
  • 空字符串: NullString{字符串: "", 有效: true}
  • 非空字符串: NullString{字符串: "value", 有效: true}

在数据库扫描和参数绑定期间,sql.NullString 类型会自动处理 NULL 状态。

例如扫描 NullString 字段:

<code class="go">err := db.QueryRow("SELECT category FROM organisations WHERE id = ?", id).Scan(&org.Category)</code>

将 NullString 值绑定到数据库参数:

<code class="go">_, err := db.Exec("INSERT INTO organisations (category) VALUES (?)", org.Category)</code>

这种方法可以让您区分未设置的值和空值,并确保准确的数据库持久性。

以上是如何区分 Go 结构体中的未设置值和空值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn