Go指南学习-struct

一、指针

cat point.go

package main

import "fmt"

func main() {
    i, j := 42, 2701
    
    p := &i   
    fmt.Println(*p)
    *p = 21
    fmt.Println(i)
    
    p = &j
    *p = *p / 37
    fmt.Println(j)
}

&符号生成一个指向其作用对象的指针,这里的&i就生成了一个只想i的指针
*符号表示指针指向的底层的值
fmt.Println(*p)表示通过指针p读取i的值,然后输出
*p = 21表示通过指针设置i的值

二、结构体

2.1.结构体字段

一个结构体就是字段的集合

cat struct1.go

package main

import "fmt"

type Vertex struct {
    X int
    Y int
}

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

输出
{1, 2}

结构体字段使用点号访问

cat struct.go

package main

import "fmt"

type Vertex struct {
    X int
    Y int
}

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

输出
4
2

2.2.结构体指针

结构体字段可以通过结构体指针访问

cat struct-point.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)
    fmt.Print(p.Y)
}

输出
{1000000000 2}
2

2.3.结构体文法

通过结构体字段值作为列表新分配一个结构体

cat struc-newstruc.go

package main

import "fmt"

type Vertex struct {
    X, Y int
}

var (
    v1 = Vertex{1, 2}
    v2 = Vertex{X: 1}
    V3 = Vertex{}
    P  = &Vertex{1, 2}
)
func main() {
    fmt.Println(v1,p,v2,v3)
}

输出
{1 2} &{1 2} {1 0} {0 0}