Go 指針和接口

指針

指針是存儲變量內存地址的變量,表達了這個變量在內存存儲的位置。數組

咱們常說:指針指向了變量。函數

Go中指針變量類型爲*T,指向一個T類型的變量。指針

經過&操做符用於獲取一個變量的地址。code

b := 255 //聲明變量
var a *int = &b // 經過&b獲取變量地址,指針變量a指向了b,a值是b的地址

獲取指針指向變量的值

  • &b是獲取變量b的地址。
  • a = &b,將a指針指向b。
  • 經過*a獲取指針指向變量的值,咱們叫反解引用

函數使用傳遞指針參數

咱們常常有相似的需求:對象

func change(val *int){
	*val = 55
}

看個複雜的例子:接口

a := 58 //變量a賦值 a=58
b := &a // b指向a,b存儲了變量a的地址
change(b) //方法接受一個指針變量,在方法中進行反解,並賦值爲55
// a此時被修改成55

咱們能夠把一個數組經過指針傳遞傳入一個方法,可是理解起來比較複雜,不是Go推薦的寫法,這種狀況一般採用切片來處理。內存

func modify(sis []int){
	sls[0] = 90
}

func main(){
	a := [3]int{89,90,91}
	modify(a[:])
	// 輸出90,90,91
}

因此這種場景仍是傳遞切片吧。string

接口

接口經常使用的目的是:定義一個對象的行爲。it

Go中,當一個類型定義了接口中的全部方法,此類型就實現了該接口。變量

type SalaryCalculator interface{
	CalculateSalary() int
}

type Permanent struct{
	empId int
	basicpay int
	pf int
}

type Contract struct{
	empId int
	basic pay int
}

func (p Permanent) CalculateSalary() int{
	return p.basicpay + p.pf
}

func (c Contract) CalculateSalary() int{
	return c.basicpay
}

空接口

沒有包含方法的接口稱爲空接口,空接口表示爲interface{},全部類型都實現了空接口。

Func findType(I interface{}){
	switch I.(type) // 經過這種方法獲取空接口對應的類型
}

接口的指針接收者

type Describer interface{
	Describe()
}

type Address struct{
	state string
	country string
}

func (a *Address) Describe(){
// 一個指針接受者
}
相關文章
相關標籤/搜索