一个 interface 类型定义了一个方法集做接口。
区分goalng的方法和函数
func go() { fmt.Println('go to home') }
这是函数
type car struct{ name string num int } func (g car) move(){ fmt.Println("driver car ,xiaorui.cc ") }
car是一个结构,后面的move()函数是car结构体的一个方法。 如果move的方法类型是g *car,那么g是指针。 初始化了car后,可以直接用car的对象调用move方法。
另外在golang里某个函数想调用其他函数有这么几个用法。 方法,基于方法的interface接口,直接传参传对象。
//使用type定义一个interface type Xiaorui interface { Play() Start(msg string) } // 定义a为空接口 var a interface{} var i int = 5 s := "Hello world" // a可以存储任意类型的数值 a = i a = s
一个函数把interface{}作为参数,那么他可以接受任意类型的值作为参数,如果一个函数返回interface{},那么也就可以返回任意类型的值。
这是一个golang interface的实例代码。
package main import "fmt" type S struct { i int } func (p *S) Get() int { return p.i } func (p *S) Put(v int) { p.i = v } type I interface { Get() int Put(int) } func f1(p I) { fmt.Println(p.Get()) p.Put(888) } func f2(p interface{}) { switch t := p.(type) { case int: fmt.Println("this is int number") case I: fmt.Println("I:", t.Get()) default: fmt.Println("unknow type") } } //指针修改原数据 func dd(a *S) { a.Put(999) fmt.Println(a.Get(), "in dd func") } //临时数据 func aa(a S) { a.Put(2222) fmt.Println(a.Get(), "in aa func") } func main() { var s S s.Put(333) fmt.Println(s.Get()) f1(&s) fmt.Println(s.Get()) f2(&s) dd(&s) fmt.Println(s.Get()) aa(s) fmt.Println(s.Get()) }
运行后的结果是:
333 333 888 I: 888 999 in dd func 999 2222 in aa func 999