[Go 語言教學影片] 在 struct 內的 pointers 跟 values 差異

栏目: Go · 发布时间: 6年前

内容简介:要區別 pointer 跟 value 可以透過下面的例子快速了解:

[Go 語言教學影片] 在 struct 內的 pointers 跟 values 差異

Struct MethodGo 語言 開發上是一個很重大的功能,而新手在接觸這塊時,通常會搞混為什麼會在 function 內的 struct name 前面多一個 * pointer 符號,而有時候又沒有看到呢?以及如何用 struct method 實現 Chain 的實作,本影片會實際用寄信當作範例講解什麼時候該用 pointer 什麼時候該用用 Value 。也可以參考我之前的一篇文章『 Go 語言內 struct methods 該使用 pointer 或 value 傳值?

教學影片

範例

要區別 pointer 跟 value 可以透過下面的例子快速了解:

package main

import "fmt"

type car struct {
    name  string
    color string
}

func (c *car) SetName01(s string) {
    fmt.Printf("SetName01: car address: %p\n", c)
    c.name = s
}

func (c car) SetName02(s string) {
    fmt.Printf("SetName02: car address: %p\n", &c)
    c.name = s
}

func main() {
    toyota := &car{
        name:  "toyota",
        color: "white",
    }

    fmt.Printf("car address: %p\n", toyota)

    fmt.Println(toyota.name)
    toyota.SetName01("foo")
    fmt.Println(toyota.name)
    toyota.SetName02("bar")
    fmt.Println(toyota.name)
    toyota.SetName02("test")
    fmt.Println(toyota.name)
}

上面範例可以看到如果是透過 SetName02 來設定最後是拿不到設定值,這就代表使用 SetName02 時候,是會將整個 struct 複製一份。假設 struct 內有很多成員,這樣付出的代價就相對提高。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

七周七并发模型

七周七并发模型

Paul Butcher / 黄炎 / 人民邮电出版社 / 2015-3 / 49.00元

借助Java、Go等多种语言的特长,深度剖析所有主流并发编程模型 基于锁和线程的并发模型是目前最常用的一种并发模型,但是并发编程模型不仅仅只有这一种,本书几乎涵盖了目前所有的并发编程模型。了解和熟悉各种并发编程模型,在解决并发问题时会有更多思路。 ——方腾飞,并发编程网站长 当看到这本书的目录时,我就为之一振。它涉及了当今所有的主流并发编程模型(当然也包括Go语言及其实现的CSP......一起来看看 《七周七并发模型》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具