文章目录
- 结构体
-
- 定义
- 结构体指针
- 接口
-
- 定义接口
- struct实现接口
- 空接口
结构体
定义
go
语言中没有类的概念,但是结构体能实现部分类的思想。一个结构体由
type
关键字,结构体名,
struct
关键字,结构体内的字段组成。如:
type st struct {
v int
}
func main() {
var a st//先声明,再赋值
a.v=1
var b=st{2}//声明是直接fuzhi
c:=st{3}//比方法二更简洁
fmt.Println(a,b,c)
}
/*
输出:
{1} {2} {3}
*/
将一个结构体作为结构体的变量
type st struct {
v int
}
type stru struct {
aaa st//将st结构体作为stru的参数
}
func main() {
var a stru
a.aaa.v=123//给结构体中的结构体中的变量赋值
}
结构体指针
当有一个结构体指针时。在这个结构体没有指向同类型的结构体变量时,不可以给他赋值。这点和
c++
中的结构体变量一致。若这个结构体指针想拥有一片自己的存储空间,应该使用
new
关键字分配存储空间,注意不是make关键字。例如:
type st struct {
v int
}
func main() {
var a *st
a.v=1//报错。因为此时a并没有自己的存储空间。
a=new(st)//必须用new给他分配一片空间。注意不是make
a.v=1
}
接口
定义接口
接口使用
interface
关键字去定义。接口中可以有待实现的函数名及返回值作为其参数。例如:
type inter interface {
add() int
}
上面这个接口定义了一个名为
add
,返回值类型为
int
的接口。接口可以有0个或者多个代实现的函数。
struct实现接口
要实现一个接口,就必须实现他其中的所有代实现的函数。例子:
type inter interface {//定义接口
add()//代实现函数。没有返回值
}
type st struct {//准备实现该接口的结构体
a int
b int
}
func (this st)add(){//其中(this st)意味调用这个函数的结构体类型为st,将调用这个函数的结构体指针赋值给变量this
fmt.Println(this.a+this.b)
}
func main() {
var b inter=st{1,3}//声明结构类型的变量b
b.add()//调用接口函数add
}
需要注意的是。接口能够被多个结构体同时实现,一个结构体也能够同时去实现多个接口。并且,接口和接口之间也能够相互嵌套定义。
空接口
空接口的写法为:
构体也能够同时去实现多个接口。并且,接口和接口之间也能够相互嵌套定义。