iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 11
2
Modern Web

30天就Go:教你打造LINE自動回話機器人系列 第 11

30天就Go(10):Pointer

說Go是C的進化版一點也不為過(至少我學到現在是這樣啦),處處充滿了C的影子,又加上了新的script語言的功能。


Pointer

將變數直接指向記憶體位置就叫做Pointer,要修改內容就直接到該記憶體位置修改

基本操作

package main

import "fmt"

func main() {
    var p *int // 宣告p是一個int的指標,但此時他要指向哪還不知道
    a := 10 // a佔用了一個記憶體空間
    
    p = &a // 將p指到a的記憶體位置
    
    fmt.Println(p) // p所指到的記憶體位置
    fmt.Println(*p) // *代表顯示該記憶體位置的值
}

function的運作

有了Pointer的概念,就比較好理解function是怎麼傳值的

package main

import "fmt"

func foo(x int) {
    fmt.Println(&x) // function內x的記憶體位置
}

func main() {
    a := 10
    fmt.Println(&a) // main裡面a的記憶體位置
    foo(a)
}

結果會看到兩個記憶體位置是不一樣的。代表在function傳值過去後,function複製該值到另一個空間來操作,對於雲本main裡面的值是不會影響的

function傳指標

當然,想要在傳指標到function內操作也是可以的

package main

import "fmt"

func foo(x *int) {
    fmt.Println(x) // function內x的記憶體位置
}

func main() {
    a := 10
    fmt.Println(&a) // main裡面a的記憶體位置
    foo(&a)
}

可以看到傳指標過去後,兩邊操作的是同一個東西


下回預告:資料結構-Array


上一篇
30天就Go(9):Function(後)
下一篇
30天就Go(11):資料結構 - Array
系列文
30天就Go:教你打造LINE自動回話機器人23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言