Golang中字符串和.String()的问题

时间:2014-10-09 12:31:37

标签: string interface go

我无法理解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

不知何故,这种感觉有点不合适。这是预期的行为吗? 有人可以帮助我吗?

2 个答案:

答案 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