2014-10-09 52 views
2

字符串和.String()問題我無法理解以下行爲中去:在Golang

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 

不知怎的,這感覺有點incosistent。這是預期的行爲? 有人可以幫我嗎?

回答

4

String()定義上的指針,但你傳遞一個值Printf

要麼將​​其更改爲:

func (Something) String() string { 
    return "Bye" 
} 

或使用

fmt.Printf("%s\n", &a) 
+0

哇,那其實解釋它。謝謝! – sharpner 2014-10-09 12:43:48

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