我无法理解Go中的以下行为:
package main
import "fmt"
type Something string
func (a *Something) String() string {
return "Bye"
}
func main() {
a := Something("Hello")
fmt.Printf("%s\n", a)
fmt.Printf("%s\n", a.String())
}
将输出:
Hello
Bye
不知何故,这种感觉有点不合适。这是预期的行为吗? 有人可以帮助我吗?
答案 0 :(得分:4)
您的String()
已在指针上定义,但您将值传递给Printf
。
将其更改为:
func (Something) String() string {
return "Bye"
}
或使用
fmt.Printf("%s\n", &a)
答案 1 :(得分:1)
参数类型不同。例如,
package main
import "fmt"
type Something string
func (a *Something) String() string {
return "Bye"
}
func main() {
a := Something("Hello")
fmt.Printf("%T %s\n", a, a)
fmt.Printf("%T %s\n", a.String(), a.String())
}
输出:
main.Something Hello
string Bye