最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Go day 5 (pointer & assign)

XAMPP下载 admin 558浏览 0评论
 pointer
變數是存值,而指標存的是變數的位址,所以可以透過指標來讀取或修改變數的值.

package main

import (
“fmt”
)

func main() {
name := “Daniel”
pname := &name
fmt.Println(pname)  //印出 0xc0000541c0
fmt.Println(*pname) //印出 Daniel
*pname = “Jack”     // 相當於 name = “Jack”
fmt.Println(name)   //印出 Jack
}

任何型別的指標的零值為 nil

var name *int
fmt.Println(name) // 印出 nil
var str *string
fmt.Println(str) // 印出 nil
有給位址時就不為 nil 了

var str *string
fmt.Println(str == nil) // 印出 true
var name = “Daniel”
str = &name
fmt.Println(str == nil) // 印出 false
function 可以回傳區域變數的位址,讓外部可以參照到區域變數,每次呼叫的位址會不一樣.

package main

import (
“fmt”
)

func getName() *string {
name := “Daniel”
return &name
}

func main() {
var name = getName()
mt.Println(name == getName()) // 印出 false
fmt.Println(*name) // 印出 “Daniel”
*name = “Sam”
fmt.Println(*name) // 印出 “Sam”
}

傳位址給 function,function 就可以直接對該位址的變數修改值

package main

import (
“fmt”
)

func add(num *int) int {
*num++
return *num
}

func main() {
sum := 0
fmt.Println(add(&sum)) // 印出 1
fmt.Println(add(&sum)) // 印出 2
fmt.Println(add(&sum)) // 印出 3
}

go 可以使用 ++ 及 — 符號,i++ 代表 i = i + 1,i– 代表 i = i – 1

func sub(num *int) int {
*num–
return *num
}

func main() {
sum := 10
fmt.Println(sub(&sum)) // 印出 9
fmt.Println(sub(&sum)) // 印出 8
fmt.Println(sub(&sum)) // 印出 7
}

assign
go 一次可以 assign 多組變數,所以可以很方便交換兩個值,如果 funtion 有回傳兩個值,可以使用 _ 略過不需要的

package main

import (
“fmt”
)

func getNums() (a string, b string) {
return “3”, “4”
}

func main() {
var num1, num2 = “1”, “2”
num1, num2 = num2, num1
fmt.Println(num1 + ” , ” + num2) // 印出 2, 1
var num3, num4 string
_, num3 = getNums()
fmt.Println(num3) // 印出 4
num4, _ = getNums()
fmt.Println(num4) // 印出 3
}

转载请注明:XAMPP中文组官网 » Go day 5 (pointer & assign)

您必须 登录 才能发表评论!