我正在阅读“Go Bootcamp”,第3章第20页有一个例子我无法理解。在这个例子中,在printString(s)行中,s是fakeString类型的变量,但是在开关中,输入“Stringer”的情况。我试图了解这是如何可能的。任何帮助,将不胜感激。
代码是:
package main
import "fmt"
type Stringer interface {
String() string
}
type fakeString struct {
content string
}
// function used to implement the Stringer interface
func (s *fakeString) String() string {
return s.content
}
func printString(value interface{}) {
switch str := value.(type) {
case string:
fmt.Println(str)
case Stringer:
fmt.Println(str.String())
}
}
func main() {
s := &fakeString{"Ceci n'est pas un string"}
printString(s)
printString("Hello, Gophers")
}
答案 0 :(得分:0)
因为fakeString是一个与字符串不同的类型,但它实现了Stringer接口。具有给定函数的每个类型都实现该类型。 fakeString包含String()函数,因此它也实现了Stringer接口。这是Go的一些基本原因。
检查Reader接口的内置库,通常以此为例进行说明。