Go语言学习之指针(The way to go)

时间:2022-09-08 15:00:24

生命不止,继续Go go go. 今天与大家分享golang中的Pointers。

如果你是从c++转到go,那么恭喜你,对于指针可谓清晰明了。

通过例子进行讲解:

package main

import "fmt"

func updateValue(val int) {
    val = val + 100
}

func main() {
    val := 1000
    updateValue(val)
    fmt.Println("val:", val)
}

输出:1000
按值传递,传递的是变量的副本。

使用指针作为参数:

package main

import "fmt"

func updateValue(someVal *int) {
    *someVal = *someVal + 100
}

func main() {
    val := 1000
    updateValue(&val)
    fmt.Println("val:", val)
}

输出:1100
按指针传递,不是副本。

交换两个值

func swap(a *int, b *int) {
   temp := *a
   *a = *b
   *b = temp
}

通过new进行指针创建

package main

import "fmt"

func updateValue(someVal *int, someVal2 *float64) {
    *someVal = *someVal + 100
    *someVal2 = *someVal2 + 1.75    
}
func main() {
    val := 1000
    val2 := new(float64)
    updateValue(&val, val2)
    fmt.Println("val:", val)
    fmt.Println("val2:", *val2)    
}

结构体指针

package main

import "fmt"

type Stock struct {
    high float64
    low float64
    close float64
}

func modifyStock(stock *Stock) {
    stock.high = 475.10
    stock.low = 400.15
    stock.close = 450.75    
}

func main() {
    goog := Stock{454.43, 421.01, 435.29}
    fmt.Println("Original Stock Data:", goog)
    modifyStock(&goog)
    fmt.Println("Modified Stock Data:", goog)    
}

输出:
Original Stock Data: {454.43 421.01 435.29}
Modified Stock Data: {475.1 400.15 450.75}

指针的指针

func main() {
  u := &User{Name: "Leto"}
  fmt.Println(u.Name)
  Modify(&u)
  fmt.Println(u.Name)
}

func Modify(u **User) {
 *u = &User{Name: "Bob"}
}

golang中保留了指针,是不是想有一天代替C++呢?