结构体-学习Go语言

阅读笔记

pointers.go

package main

import "fmt"

func main() {
    i, j := 42, 2701

    p := &i         // point to i
    fmt.Println(*p) // read i through the pointer
    *p = 21         // set i through the pointer
    fmt.Println(i)  // see the new value of i

    p = &j         // point to j
    *p = *p / 37   // divide j through the pointer
    fmt.Println(j) // see the new value of j
}

笔记

Go 拥有指针。指针保存了值的内存地址。

类型 *T 是指向 T 类型值的指针。其零值为 nil。
& 操作符会生成一个指向其操作数的指针。
这也就是通常所说的“间接引用”或“重定向”。

structs.go

package main

import "fmt"

type Vertex struct {
    X int
    Y int
}

func main() {
    fmt.Println(Vertex{1, 2})
}

笔记

  1. 这个不是c语言的结构体是一样的吗?

struct-fields.go

package main

import "fmt"

type Vertex struct {
    X int
    Y int
}

func main() {
    v := Vertex{1, 2}
    v.X = 4
    fmt.Println(v)
}

笔记

  1. 内部实现是否类似c语言的指针?

struct-pointers.go

package main

import "fmt"

type Vertex struct {
    X int
    Y int
}

func main() {
    v := Vertex{1, 2}
    p := &v
    p.X = 1e9
    fmt.Println(v)
}

笔记

  1. v 和 p 都是指向结构体的指针吧
  2. p使用隐式间接引用

struct-literals.go

package main

import "fmt"

type Vertex struct {
    X, Y int
}

var (
    v1 = Vertex{1, 2}  // has type Vertex
    v2 = Vertex{X: 1}  // Y:0 is implicit
    v3 = Vertex{}      // X:0 and Y:0
    p  = &Vertex{1, 2} // has type *Vertex
)

func main() {
    fmt.Println(v1, p, v2, v3)
}

笔记

  1. 结构体会初始化字段的默认值
  2. 特殊的前缀 & 返回一个指向结构体的指针。

参考链接

  1. 指针
  2. 结构体
  3. 结构体字段
  4. 结构体指针
  5. 结构体文法

发表评论

电子邮件地址不会被公开。 必填项已用*标注