如何在String方法中打印原始go结构
我有一个定义如下的结构如何在String方法中打印原始go结构,string,go,struct,types,String,Go,Struct,Types,我有一个定义如下的结构 type壁纸类型int // ... 类型信息结构{ 壁纸类型壁纸类型`json:“类型”` HelpMsg字符串`json:“帮助”` 路径字符串`json:“路径”` ImageColor.RGBA`json:“ImageColor”` } 使用 winfo:=&wallperInfo{…} log.Println(winfo) log.Printf(“%+v\n”,winfo) 给出了类似这样的东西 &{Slideshow Wallpaper是幻灯片D:\Ima
type壁纸类型int
// ...
类型信息结构{
壁纸类型壁纸类型`json:“类型”`
HelpMsg字符串`json:“帮助”`
路径字符串`json:“路径”`
ImageColor.RGBA`json:“ImageColor”`
}
使用
winfo:=&wallperInfo{…}
log.Println(winfo)
log.Printf(“%+v\n”,winfo)
给出了类似这样的东西
&{Slideshow Wallpaper是幻灯片D:\Images\Wallpapers\秋-秋-叶-模糊-特写-589840.jpg{219 77 66 167}
&{WallperType:Slideshow HelpMsg:Wallper是一个幻灯片路径:D:\Images\wallpers\秋-秋-叶-模糊-特写-589840.jpg图像颜色:{R:219 G:77 B:66 a:167}
我希望将其打印为JSON,因此我为该结构实现了String
方法,如下所示
func(w壁纸信息)字符串()字符串{
字节,err:=json.Marshal(w)
如果错误!=零{
返回“/?”???
//这将递归调用该方法
//返回fmt.Sprintf(“%+v\n”,w)
}
返回字符串(字节)
}
如果String()
方法中有错误
我想打印原始的&{wallperType:Slideshow HelpMsg:wallper是一个幻灯片路径:d:\Images\wallpers\秋-秋-叶-模糊-特写-589840.jpg图像颜色:{R:219 G:77 B:66 a:167}
我尝试返回fmt.Sprintf(“%+v\n”,w)
,但它对同一个函数进行递归调用
我可以返回原始结构格式吗?因为如果json失败,我不知道如何以不同的方式打印它。创建一个以wallperInfo
作为其属性的文件,并在将其传递给之前创建一个值。创建新类型将使其从所有方法中剥离,包括String()
方法:
func (w WallpaperInfo) String() string {
bytes, err := json.Marshal(w)
if err != nil {
type wi WallpaperInfo
return fmt.Sprintf("%+v\n", wi(w))
}
return string(bytes)
}
虽然您的类型永远不能返回JSON封送错误,但在一般情况下,这就是您实现所需的方式
下面是一个故意导致JSON封送失败的示例,它将返回到原始的结构字符串表示形式:
type fail int
func (fail) MarshalJSON() ([]byte, error) {
return nil, errors.New("on-purpose error")
}
type MyStruct struct {
F fail
}
func (m MyStruct) String() string {
bytes, err := json.Marshal(m)
if err != nil {
log.Printf("JSON error: %v", err)
type ms MyStruct
return fmt.Sprintf("%+v\n", ms(m))
}
return string(bytes)
}
测试它:
s := MyStruct{}
log.Println(s)
log.Printf("%+v\n", s)
哪个将输出(在上尝试):
见相关问题:
2009/11/10 23:00:00 JSON error: json: error calling MarshalJSON for type main.fail: on-purpose error
2009/11/10 23:00:00 {F:0}
2009/11/10 23:00:00 JSON error: json: error calling MarshalJSON for type main.fail: on-purpose error
2009/11/10 23:00:00 {F:0}