我正在尝试使用有url字段的配置文件,我想封送和解送这种类型。文档指出我可以做一个自定义封送函数。
在这个golang游戏中,您可以看到自定义解组函数工作正常,但自定义编组函数却不行:
type YAMLURL struct {
*url.URL
}
func (j *YAMLURL) UnmarshalYAML(unmarshal func(interface{}) error) error {
fmt.Println("custom unmarshal function")
var s string
err := unmarshal(&s)
if err != nil {
return err
}
url, err := url.Parse(s)
j.URL = url
return err
}
func (j *YAMLURL) MarshalYAML() (interface{}, error) {
fmt.Println("custome marshal")
return j.String(), nil
}
https://go.dev/play/p/24JbJEhi1Q8
我不知道为什么谢谢
1条答案
按热度按时间d8tt03nd1#
问题是您为指针接收器编写了
MarshalYAML
方法,因此可以在指针类型上调用此方法,同时您在Configuration
结构体上将A
的URI
属性定义为非指针(基于您粘贴的操场链接)。因此,您必须将
URI
属性类型更改为*YAMLURL
(而不是YAMLURL
):或者将
MarshalYAML
定义为非指针接收器(又称值接收器),如下所示: