go对象选择器自解引


 Go编程时光 1.0
  • 前言
  • 第一章:基础知识
  • 第二章:面向对象
  • 第三章:项目管理
  • 第四章:并发编程
  • 第五章:学标准库
  • 第六章:开发技能
  • 第七章:Go面试题
    • 7.1 Go 中的 = 和 := 有什么区别?
    • 7.2 Go 中的指针有什么作用?
    • 7.3 Go 允许多个返回值吗?
    • 7.4 Go 有异常类型吗?
    • 7.5 Go 中的 rune 类型是什么?
    • 7.6 Go 语言中的深拷贝和浅拷贝?
    • 7.7 局部变量分配在栈上还是堆上?
    • 7.8 什么叫字面量和组合字面量?
    • 7.9 为什么常量、字符串和字典不可寻址?
    • 7.10 为什么 slice 元素是可寻址的?
    • 7.11 对象选择器自动解引用怎么用?
    • 7.12 slice 扩容后容量及内存如何计算?
    • 7.13 goroutine 存在的意义是什么?
    • 7.14 说说 Go 中闭包的底层原理?
    • 7.15 defer 的变量快照什么情况会失效?
  • 第八章:暂未分类
  • 关于作者
  • Roadmap

Go编程时光

  • Docs ?
  •  
  • 第七章:Go面试题 ?
  •  
  • 7.11 对象选择器自动解引用怎么用?

7.11 对象选择器自动解引用怎么用?

从一个结构体实例对象中获取字段的值,通常都是使用 . 这个操作符,该操作符叫做 选择器

选择器有一个妙用,可能大多数人都不清楚。

当你对象是结构体对象的指针时,你想要获取字段属性时,按照常规理解应该这么做

type Profile struct {
    Name string
}

func main() {
    p1 := &Profile{"iswbm"}
  fmt.Println((*p1).Name)  // output: iswbm
}

但还有一个更简洁的做法,可以直接省去 * 取值的操作,选择器 . 会直接解引用,示例如下

type Profile struct {
    Name string
}

func main() {
    p1 := &Profile{"iswbm"}
    fmt.Println(p1.Name)  // output: iswbm
Go