基本的要素
import ( “io” “log” “os” )
// 动物接口 type Animal interface { Sleep() //动物都能做的 睡觉 GetColor() string //取得动物的颜色 GetType() string // 取得动物的种类 }
func ShowAnimal(v Animal) { v.Sleep() //多态方法, 不管是猫还是狗, 直接睡觉
log.Println("动物种类=", v.GetType())log.Println("动物颜色=", v.GetColor())
}
// 猫 type Cat struct { color string // 猫的颜色
}
func (t *Cat) Sleep() { log.Println(“猫开始睡觉”) }
func (t *Cat) GetColor() string { return t.color }
func (t *Cat) GetType() string { return “家猫” }
// 狗 type Dog struct { color string // 狗的颜色
}
func (t *Dog) Sleep() { log.Println(“狗开始睡觉”) }
func (t *Dog) GetColor() string { return t.color }
func (t *Dog) GetType() string { return “野狗” }
func main() { log.SetOutput(io.MultiWriter(os.Stdout)) log.SetFlags(log.Lshortfile)
cat := Cat{color: "白"}dog := Dog{color: "黄"}ShowAnimal(&cat)log.Println("----------")ShowAnimal(&dog)
}
<a name="snAIz"></a>### 输出```gomain.go:30: 猫开始睡觉main.go:19: 动物种类= 家猫main.go:20: 动物颜色= 白main.go:67: ----------main.go:48: 狗开始睡觉main.go:19: 动物种类= 野狗main.go:20: 动物颜色= 黄
interface 通用万能数据数据类型
- 空接口
int``string``float32float64``struct都实现了interface{}- 可以使用 interface{} 类型 引用 任意的数据类型
代码
```go package main
import ( “io” “log” “os” )
type Book struct { title string }
// interface 万能数据类型 func myFunc(arg interface{}) { log.Println(arg)
// interfacef{} 改如何区分 此时引用的底层数据类型到底是什么?// 给interfacef{}提供 "类型断言" 的机制v, ok := arg.(string)if ok {log.Println("arg 参数为字符串类型")log.Printf("字符串内容是=%v, 数据类型: %T\n", v, v)}log.Printf("实际数据类型: %T", arg)
}
func main() { log.SetOutput(io.MultiWriter(os.Stdout)) log.SetFlags(log.Lshortfile)
book := Book{"golang"}myFunc(book)log.Println("--------------")myFunc("字符串")log.Println("--------------")myFunc(100)log.Println("--------------")myFunc(3.14)
}
<a name="Cldsh"></a>### 输出```gomain.go:15: {golang}main.go:25: 实际数据类型: main.Bookmain.go:35: --------------main.go:15: 字符串main.go:21: arg 参数为字符串类型main.go:22: 字符串内容是=字符串, 数据类型: stringmain.go:25: 实际数据类型: stringmain.go:37: --------------main.go:15: 100main.go:25: 实际数据类型: intmain.go:39: --------------main.go:15: 3.14main.go:25: 实际数据类型: float64
