&和*這多是Go中最使人困惑的事情之一。基本上你須要瞭解3個案例:
var str string ="123" //打印str變量的內存地址 ftm.Println(&str)
獲取變量內存地址,須要把 & 放到變量前面指針
myString := "Hi" fmt.Println(*&myString) // prints "Hi"
或者code
myStructPointer = &myStruct // ... (*myStructPointer).someAttribute = "New Value" * 在一個類型前面
*
操做符是訪問指針變量中指向地址的值。在上面兩段代碼中,&myStruct
是獲取myStruct
的內存地址,而咱們須要解析內存地址獲取對應值時候須要用到*
,因此&
和*
是相對應的。內存
*
操做符操做類型時var str *string /* 聲明string指針類型的變量 */
當*
放在類型前面時,例如*string,它成爲類型聲明的一部分,所以您能夠說聲明瞭一個string類型指針類型的變量string
因此使人困惑的是,*
真正被用於2個獨立的事物。*
能夠是操做變量或類型的一部分。class