iT邦幫忙

DAY 15
1

初學 Golang 30 天系列 第 15

初學 Golang 30 天(十五)指標

  • 分享至 

  • xImage
  •  

有學過 C 語言的就會知道「指標」這的東西,用它宣告的變數指的是記憶體的位置,當然 Go 目標是取代 C / C++ 怎麼可能會沒有指標呢?

指標

讓我們來看看簡單的範例

func zero(x int) {
x = 0
}
func main() {
x := 5
zero(x)
fmt.Println(x) // x is still 5
}

這麼範例可以簡單的看出嘗試著用 zero 這個函式來更改 x 的值,但是 zero 函式裡面的 x=0 ,是區域變數的變更,這個變更不會帶到外面,所以 x 仍然會是 5 。
當然你可以用前面學到的函式,來回傳更改後的值。

package main

import "fmt"

func zero(x int) int {
x = 0
return x
}
func main() {
x := 5
x = zero(x)
fmt.Println(x) // x is 0
}

這樣子就變更了。
但是有更好的方法嗎?有的,就是使用 Pointer(指標),指標要怎麼使用呢?很簡單只要使用 「 * 」就可以囉~是不是很簡單阿,讓我們馬上來看看。

func zero(xPtr *int) {
*xPtr = 0
}
func main() {
x := 5
zero(&x)
fmt.Println(x) // x is 0
}

這樣子就可以用了耶,要注意的是 zero(&x),這邊有一個 「 & 」,這個很重要不可以忘記,如果沒有這個就找不到指標囉,這個再讀取的時候一定會用到。

另外我再說詳細一點給沒碰過的人看,所謂的指標就是指到記憶體位置,上面的例子函式內不是宣告了一個指標 xPtr 嗎?以這邊來看 x 帶進來後就會去看他的「記憶體位置」,然後我們再下面的 *xPtr = 0 更改了這個「記憶體位置」的「值」,所以回到外面印出的時候就已經是 0 了,因為記憶體位置上的值已經被更改囉!


上一篇
初學 Golang 30 天(十四)錯誤處理
下一篇
初學 Golang 30 天(十六)結構
系列文
初學 Golang 30 天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言