在编组下面的Foo实例时,如何在实现json marshaler接口时获取标记信息?请注意,我们也可以使用Bar结构,它也使用MyNullString。所以我们不能假设MyNullString只被Foo struct使用。
package main
import (
"fmt"
"database/sql"
"encoding/json"
)
type MyNullString struct {
sql.NullString
}
type Foo struct {
MyInt int64
MyString MyNullString `json:"my_string,omitempty"`
}
func (s *MyNullString) MarshalJSON() ([]byte, error){
//Inspect tag of struct instance and see if this field has to be omitted when empty
//HOW?????
//Note: We can use MyNullString in other structs as well.
}
func main(){
foo := Foo{MyInt: 1}
data, _ := json.Marshal(&foo)
fmt.Println(string(data))
}
答案 0 :(得分:0)
类型不可能检查包含它的其他类型/值(您无法看到您所在的框,但您可以看到您的框)。有一个自定义omitempty支持的开放功能请求,这样类型可以通知编码器它是一个空的"价值,但此时没有任何用处。见http://golang.org/issue/4357