Go 本身可以用 String() 來做到和 Java 等語言的 toString() 一樣的功效。可我最近在使用 String() 發現一個奇特的陷阱
一般來說, struct 要追加 func 的話,都會寫成
type A struct{}
func (a *A) DoSomething(){}
所以直覺上來說, String() 應該也是如此。但事實上有沒有指針有很大差別
事前備註一下:這邊使用的是 go 1.18 ,不確定後續版本會如何
package main
import "fmt"
type User struct {
ID int
Name string
}
func main() {
fmt.Println(User{1, "Lily Taylor"})
fmt.Println(&User{2, "Poppy Roberts"})
}
func (u *User) String() string {
return fmt.Sprintf("User[ID: %03d; Name: %s]", u.ID, u.Name)
}
輸出結果為(struct 本身沒有執行 String()):
{1 Lily Taylor} User[ID: 002; Name: Poppy Roberts]
package main
import "fmt"
type User struct {
ID int
Name string
}
func main() {
fmt.Println(User{1, "Lily Taylor"})
fmt.Println(&User{2, "Poppy Roberts"})
}
func (u User) String() string {
return fmt.Sprintf("User[ID: %03d; Name: %s]", u.ID, u.Name)
}
輸出結果卻是我要的:
User[ID: 001; Name: Lily Taylor] User[ID: 002; Name: Poppy Roberts]
沒有留言:
張貼留言