文章目錄
- 結構體
-
- 定義
- 結構體指針
- 接口
-
- 定義接口
- 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
}
需要注意的是。接口能夠被多個結構體同時實作,一個結構體也能夠同時去實作多個接口。并且,接口和接口之間也能夠互相嵌套定義。
空接口
空接口的寫法為:
構體也能夠同時去實作多個接口。并且,接口和接口之間也能夠互相嵌套定義。