[13th][Day8] Pointer

Pointer 到底是个什麽东东呢?指标?指引?位址?指针?
目前为止提到的变数都很单纯 int float string bool ... 等等
那麽 ... Pointer 又是如何呢?来看看 wiki 的解说:

计算机概论告诉我们,指标(Pointer)是程序语言中的一类资料类型及其物件或变数,用来表示或储存一个记忆体位址,这个位址的值直接指向(points to)存在「该位址的物件」的值。

就像我知道霍格华兹的地址是 苏格兰OOOO路OO号
但我并「不知道」它确切位置到底在哪

Go 支援指标 (pointer),在学习 coding 的过程中,指标是必经的门槛、无可避免的
but ... 对没接触过的人来说,指标不是那麽的容易理解,常因误用指标而造成 segment fault(记忆体区段错误) … 等错误。对 golang 来说就是不断的 panic 然後又 panic 一直在 panic

golang 的指标(pointer)比较简化,不仅没有指标运算,也不需要手动控制记忆体释放。

package main

import "fmt"

type House struct {
    Name  string
    Price int
}

func (c House) GetPrice() {
    fmt.Println(c.Price)
}

func main() {
    h := &House{"Dibao", 100000000}
    h.GetPrice()
}

宣告变数 h 为 一个 struct , type 为 House
h 里的 name 为 Dibao
Price 为 100000000

上面是个单纯的 Go struct 例子,只有单纯的捞出 struct 中的某个值
使用到保留字 type struct
那 ... 如果我想要动态更新 Price 值,要怎麽做呢?

package main

import "fmt"

type House struct {
    Name  string
    Price int
}

func (c House) GetPrice() {
    fmt.Println("price:", c.Price)
}

func (c House) UpdatePrice(price int) {
    c.Price = price
}

func main() {
    h := &House{"Dibao", 100000000}
    h.GetPrice()
    h.UpdatePrice(10000)
    h.GetPrice()
}

上面可以看到输出的结果仍然是 100000000,只用 value 传值是无法改变 Struce 内成员的。我们可以用另外方式绕过。

经过 c.UpdatePrice(10000) 後

c.GetPrice()印出来的仍然是 100000000
(变成一万我还不买爆)


<<:  Day3 Pipeline 如何做版本控制 - NiFi Registry

>>:  [13th][Day10] registry

Day8 - 读 Concurrency is not Parallelism - Rob Pike (三)

续上篇,Day7 - 读 Concurrency is not Parallelism - Rob ...

Golang 转生到web世界 - gin路由

Golang Gin路由 Gin本身是支援restful的,所以可以看一下github所写的范例,使...

【第17天】训练模型-InceptionV4

摘要 InceptionV4 1.1 来源 1.2 架构 1.3 特性 训练过程 2.1 预训练模型...

DAY29 - [React] useContext 实作篇

今日文章目录 需求说明 过程纪录 问题统整 重点笔记 参考资料 需求说明 加入深浅主题色切换。 过...

JavaScript入门 Day26_while回圈

今天是讲的是whille回圈,来看看他的样子吧~ var i = 1; while (i<6)...