golang中 與 的一些解惑

2021-10-24 04:29:11 字數 1996 閱讀 4530

網上所述*和&的區別 :

& 是取位址符號 , 即取得某個變數的位址 , 如 ; &a

*是指標運算子 , 可以表示乙個變數是指標型別 , 也可以表示乙個指標變數所指向的儲存單元 , 也就是這個位址所儲存的值 .

**解惑:

type person struct

func

main()

p2 :=

&person

var p3 person = person

var p4 *person =

&person

chang

(p1)

// p1.

chang()

// p1.

changaddr()

//& &

fmt.

println

("p1"

,p1)

//p1

fmt.

println

("&p1"

,&p1)

//&p1 &

fmt.

println

("*&p1",*

&p1)

//*&p1 *&可以相互抵消

fmt.

println

("&*&p1",&

*&p1)

//&*&p1 &

fmt.

println

("*p1 null"

)//由於p1不是指標型別,所以無法用*獲取指標的值

fmt.

println

("p3"

,p3)

//p3

fmt.

println

("&p3"

,&p3)

//&p3 &

fmt.

println

("*p3 null"

)changaddr

(p2)

//& p2.

changaddr()

//& &

p2.chang()

//

fmt.

println

("p2"

,p2)

//p2 & &

fmt.

println

("&p2"

,&p2)

//&p2 0xc000006028 位址的位址

fmt.

println

("*&p2",*

&p2)

//*&p2 & 位址的位址所存的值

fmt.

println

("*p2"

,*p2)

//*p2 *取指標物件的值

fmt.

println

("p4"

,p4)

//p4 &

fmt.

println

("&p4"

,&p4)

//&p4 0xc000006030

fmt.

println

("*p4"

,*p4)

//*p4

}//傳入的是乙個拷貝的物件

func

chang

(person person)

//傳入的是乙個指向傳入物件的位址,會直接改變底層數值

func

changaddr

(person *person)

// 都可當做物件呼叫,但只是拷貝了乙個物件,不對原生值進行改變

func

(person person)

chang()

// 都可當做物件呼叫,指向該物件位址,會對原生值進行改變

func

(person *person)

changaddr()

本文為程式設計小白自學問題歸納,如有錯誤與不足敬請指正!

golang的一些使用技巧

1.列舉的實現 const freetime 5 bettime 9 opentime 7 比如 定義位元組大小的列舉 const b 1 10 iota 1 kb 1024 mb 1024 1024 gb 1024 1024 1024 2.繼承 type father struct var son...

Golang學習 struct的一些事情

golang中的struct還是有點意思的,相比於c 中的型別要好用很多。golang的資料成員放到乙個struct中,又為該struct配上相應的方法,這就形成了封裝資料成員和方法的class。相比於c golang沒有繼承,而是支援巢狀,以組合的形式完成相同的功能,這就使golang的邏輯非常清...

Golang 關於通道的一些總結

通道分為有緩衝與無緩衝,建立方式分別為make chan type 或make chan type 0 與make chan type len 無緩衝通道在沒有接收端或沒有傳送端的時候將會阻塞。無緩衝通道可以完成兩個go程的同步訊息處理操作,並且無緩衝通道的接收資料會發生在喚醒放者之前。如下圖 畫的...