结构体:
type person sturct{
name string
age int
}
可以把go中的结构体想象成python中的函数,定义结构的时候,结构体里面的变量,就是python里的实例属性
go里面没有__init__,但是可以自己实现一个newPerson的方法,就当作init了
方法:
func (p *person) reName () {
p.name = "改名了"
}
至于go里的方法,一般都用指针接收者,(值接收者相当于拷贝了一份值的副本,不会改变外部的值)
可以把结构体的方法当作 python 的类方法
不仅仅可以给结构体绑定方法,也可以给别的数据类型绑定方法,具体看自己需要什么样的属性了
函数:
与python中的函数一样
接口:
type sayer interface{
say()
}
接口是一种类型,通过type定义,可以理解只要实现了say()方法的结构体都属于sayer类型
因为go是一种强类型的语言,传递参数的时候必须指定参数类型,
type dber interface{
select() bool
}
现在有mysql、redis、mongodb三种数据库。业务逻辑是从数据库查一下某个id是否存在,返回bool值,那么此时就用到了接口
我们可以不用管它具体是啥数据库,只要实现了查询方法,我直接调用dber类型的select方法方法就行。
func check(d dber){
exits := d.select()
if exits{
fmt.Println("存在")
}else{
fmt.Println("不存在")
}
}
空接口:
interface{}
什么都能存