【发布时间】:2021-01-04 07:27:49
【问题描述】:
我想为所有实例 sql.NullString 覆盖 Stringer 接口,以便实例的输出为 instance.String 而不是 { instance.String, instance.Valid }。
通常的做法是提供一个 Stringer 接口。 使用 sql.NullString,Stringer 接口方法无法编译,因为已经存在 String 字段。
解决方法是在任何地方都使用instance.String。
type NullString sql.NullString
// this fails to compile as sql.NullString has a field named String
func (x *NullString) String() string {
if !x.Valid {
x.String = ""
}
return x.String
}
如果结构(如 sql.NullString)已经具有 String 字段,如何创建 Stinger 接口?
【问题讨论】:
-
注意:
type NullString sql.NullString“失去”Scan和Value方法,因此 your NullString 的实例将失去其用途。 -
“我想为所有实例 sql.NullString 覆盖 Stringer 接口”没有意义,因为你不能在 Go 中这样做。您无法覆盖。放弃在 Go 中没有意义的 OOP 术语。
-
@Volker 很高兴改写这个问题。
标签: go