在 Golang 话语建造中iba炸金花,咱们庸俗会使用结构体类型,如若咱们使用的结构体类型的变量包含指针类型的字段,咱们在纪录日记的技术,指针类型的字段的值是指针地址,将会给咱们 debug 代码变成未便。
骨子上,Golang 为咱们提供了一个接口类型 Stringer ,它是一个相沿以字符串风物描摹我方的类型,它只提供了一个法子,应该是 Golang 中最浅显和最常用的接口之一,它由 fmt 包界说。
type Stringer interface { String() string }
fmt 包的打印函数会检讨你的类型是否完了该接口,以便知说念何如打印你的变量。是以,咱们在纪录日记的技术,如若需要纪录的变量是具有指针类型字段的结构体,咱们不妨也为该结构体类型界说 String 法子,用来完了不错纪录指针字段的骨子值的所在。
博彩平台游戏种类光辉本文咱们先容何如通过完了 Stringer 接口,让咱们的代码更优雅。
02打印指针类型的值读者一又友们在 Golang 才调建造中,一定也会使用到包含指针类型字段的结构体,你是否在纪录日记的技术,发现纪录的值是指针地址,给你 debug 代码变成未便呢?
香港六合彩炸金花func main() { name := "frank" user := User{ Id: 1, Name: &name, } fmt.Println(user) } type User struct { Id int Name *string }
输出效果:
{1 0xc000096210}
阅读上头这段代码,咱们构造了一个包含指针类型字段的结构体,然后打印该结构体类型的变量,输出效果中指针类型的字段 Name 的值是指针地址,而不是咱们念念要的字段值 frank。
试念念一下,如若咱们纪录的日记中,变量的值是指针地址,将会对咱们 debug 代码变成不变,是以咱们需要使用 Golang 提供的接口 Stringer 贬责该问题。
皇冠博彩官方func (u User) String() string { return fmt.Sprintf("{Id: %v, Name: %v}", u.Id,欧博注册网址 *u.Name) }
输出效果:
{Id: 1, Name: frank}
阅读上头这段代码,咱们给类型 User 界说了 String 法子,通过完了 Golang 的 Stringer 接口,来完了打印指针类型变量的骨子值的所在。
03避“坑”读者一又友们阅读完以上内容,应该还是学会了何如使用接口 Stringer 完了打印指针类型变量的值。不外,我如故念念列举一个相配情况,匡助 Golang 生手读者一又友避“坑”。如若你还是是 Golang 老手,本节内容不错跳过。
皇冠博彩新皇冠2022款suv陆放价格皇冠售后服务电话func (u *User) String() string { return fmt.Sprintf("{Id: %v, Name: %v}", u.Id, *u.Name) }
阅读上头这段代码,咱们将类型法子的接收者改为指针类型,我确信大多半读者一又友们会使用指针类型的接收者。此时,读者一又友会发现输出效果莫得使用咱们界说的 String 法子,而是输出的指针类型字段的指针地址。
念念要贬责这个问题也很浅显,咱们只需要在界说结构体类型变量的技术,使用指针类型,这么 fmt 包的打印函数就不错自动实行咱们界说的 String 法子了。
皇冠客服飞机:@seo3687func main() { name := "frank" user := &User{ Id: 1, Name: &name, } fmt.Println(user) }04追想
本文咱们先容了何如打印包含指针类型变量的结构体类型变量的值,在咱们需要纪录日记的技术,无谓再因为纪录的是指针地址,从而给咱们 debug 代码变成未便。
参考云尔:
https://go.dev/doc/effective_go#pointers_vs_values
https://go.dev/tour/methods/17
iba炸金花