type Person interface { Run() //只要有run方法的都算 Person结构体 } //还有定义方法 type Person2 interface { Speak() Person //至关于run() }
package main import "fmt" type Person interface { Run() } type Person2 struct { name string } func (P Person2)Run(){ fmt.Println("我会走") } type Person3 struct { name string } func (P Person3)Run(){ fmt.Println("我会飞") } func test(p Person){ p.Run() } func main() { p1 :=Person2{} p2 :=Person3{} test(p1) test(p2) } //p1与p2都有Run方法都算Person结构体,全部均可以由Run方法
interface {} //能够接受全部数据类型 package main import "fmt" func Test(a interface{}){fmt.Println(a)} func main(){ Test(1) Test("WWW") }
写法一:code
package main import "fmt" type Person struct { name string } func Test(a interface{}){ _,err :=a.(*Person) if !err{ fmt.Println("是Person") } } func main(){ a := Person{name: "p1"} Test(a) }
写法二:对象
package main import ( "fmt" ) type Person struct { name string } func Test(a interface{}) { switch a.(type) { //若是要获取a的对象就AStruct :=a.(type) case Person: fmt.Println("是Person") default: fmt.Println("不是Person") } } func main() { a := Person{name: "p1"} Test(a) }