網上所述*和&的區別 :
& 是取位址符號 , 即取得某個變數的位址 , 如 ; &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程的同步訊息處理操作,並且無緩衝通道的接收資料會發生在喚醒放者之前。如下圖 畫的...