1 回答

TA貢獻1858條經(jīng)驗 獲得超8個贊
當您調用 時fmt.Println
,它需要一個實現(xiàn)該Stringer
接口的對象。它記錄如下:
如果操作數(shù)實現(xiàn)方法 String() string,將調用該方法將對象轉換為字符串,然后根據(jù)動詞(如果有)的要求進行格式化
該fmt
包還聲明了Stringer
接口:
type Stringer interface {
? ? String() string
}
這樣的對象必須有一個String()不接受任何參數(shù)并返回一個string. fmt.Println然后調用該String方法。這讓我們可以為自定義類型定義它們將如何打印出來。例如:
package main
import "fmt"
type Person struct {
? ? name string
? ? age? int
}
func (p Person) String() string {
? ? return fmt.Sprintf("%s<%d>", p.name, p.age)
}
func main() {
? ? p := Person{name: "Joe", age: 39}
? ? fmt.Println(p)
}
會打印出來:
Joe<39>
Person
因為我們自定義了將對象轉換為字符串的方式。更多細節(jié):
Go 之旅中的接口
Go 之旅中的 Stringer
如果您對包中實際發(fā)生這種情況的機制感興趣fmt
,請查看.handleMethods
src/fmt/print.go
- 1 回答
- 0 關注
- 165 瀏覽
添加回答
舉報