一个 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
golang 学习笔记 -- struct interface的使用
原文:https://www.cnblogs.com/saryli/p/11674329.html