天天看点

06结构体、接口结构体接口

文章目录

  • 结构体
    • 定义
    • 结构体指针
  • 接口
    • 定义接口
    • 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
}
           

需要注意的是。接口能够被多个结构体同时实现,一个结构体也能够同时去实现多个接口。并且,接口和接口之间也能够相互嵌套定义。

空接口

空接口的写法为:

构体也能够同时去实现多个接口。并且,接口和接口之间也能够相互嵌套定义。