生命不止,继续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++呢?