type Reader interface{ReadBook()}type Writer interface{WriteBook()}type Book struct{
page int}func(b *Book)ReadBook(){
fmt.Println("Reading Book")}func(b *Book)WriteBook(){
fmt.Println("Writing Book")}funcmain(){var book Book
var r Reader
//r:pair<type:book,value:Book{}>
r =&book
r.ReadBook()var w Writer
//w:pair<type:book,value:Book{}>
w = r.(Writer)
w.WriteBook()/*
---------------------- 上下的输出结果一样
Reading Book
Writing Book
*/
book :=&Book{}var r Reader
r = book
r.ReadBook()var w Writer
w = r.(Writer)
w.WriteBook()}
反射
import("fmt""reflect")type User struct{
Id int
Name string
Age int}func(u *User)Call(){
u.Id =100// fmt.Printf("%v\n",u)}func(u User)Call1(){
u.Id =10// fmt.Printf("%v\n",u)}funcmain(){
user:=User{1,"ding",18}
user.Call()
argType:= reflect.TypeOf(&user)
fmt.Println(user)
fmt.Println(argType)
fmt.Println(argType.NumMethod())
fmt.Println("---------")
argType1:= reflect.TypeOf(user)
user.Call1()
fmt.Println(user)
fmt.Println(argType1)
fmt.Println(argType1.NumMethod())}/*
{100 ding 18}
*main.User
2
---------
{100 ding 18}
main.User
1
*/