天天看点

【5】结构体方法函数接口的理解

结构体:

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{}

什么都能存