区分 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 状态并允许您区分以下情况:
在数据库扫描和参数绑定期间,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中文网其他相关文章!