天天看點

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
}
           

需要注意的是。接口能夠被多個結構體同時實作,一個結構體也能夠同時去實作多個接口。并且,接口和接口之間也能夠互相嵌套定義。

空接口

空接口的寫法為:

構體也能夠同時去實作多個接口。并且,接口和接口之間也能夠互相嵌套定義。