Go基础(复杂类型):结构体

简介: 结构体一个结构体(struct)就是一个字段的集合。 (而 type 的含义跟其字面意思相符。) 下面来写一个简单的例子:package mainimport "fmt"/** * 一个结构体就是一...

结构体

一个结构体(struct)就是一个字段的集合。
(而 type 的含义跟其字面意思相符。)
下面来写一个简单的例子:

package main

import "fmt"

/**
 * 一个结构体就是一个字段的集合
 */
type Vertex struct {
    X int
    Y float64
}

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

输出结果:

{1 2.31231}

一、结构体字段

结构体字段使用点号来访问。

package main

import "fmt"

type Vertex2 struct {
    X int
    Y int
}

func main() {
    //在这里给结构体赋值,x=6,y=3
    v := Vertex2{6, 3}
    //这边输出的结果是6,3
    fmt.Println(v.X, v.Y)
    //这边从新给结构体中的X赋值,X=7
    v.X = 7
    //输出X=7
    fmt.Println(v.X)
}

二、结构体指针

结构体字段可以通过结构体指针来访问。
如果我们有一个指向结构体的指针 p,那么可以通过 (*p).X 来访问其字段 X。不过这么写太啰嗦了,所以语言也允许我们使用隐式间接引用,直接写 p.X 就可以。

package main

import "fmt"

type Vertex3 struct {
    X int
    Y int
}

func main() {
    //给结构体赋值,X=1,Y=3
    v := Vertex3{1, 3}
    //这个是输出实际的结构体的值,所以{1 3}
    fmt.Println(v)
    //将结构体给p做引用,p是一个指向结构体的指针
    p := &v
    //输出结果有引用的结果,有一个&,&{1 3}
    fmt.Println(p)
    //给结构体中的X赋值为1e9,这个表示1后面跟着9个0
    p.X = 1e9
    //输出结果{1000000000 3}
    fmt.Println(v)
}

输出结果:

{1 3}
&{1 3}
{1000000000 3}

三、结构体文法

结构体文法通过直接列出字段的值来新分配一个结构体。
使用 Name: 语法可以仅列出部分字段。(字段名的顺序无关。)
特殊的前缀 & 返回一个指向结构体的指针。

package main

import "fmt"

//定义一个结构体
type Vertex4 struct {
    //在结构体中定义两个变量
    X, Y int
}

var (
    //给X、Y都赋值
    v1 = Vertex4{1, 2}  // has type Vertex
    //给X赋值为1,Y未赋值,默认为0
    v2 = Vertex4{X: 1}  // Y:0 is implicit
    //X、Y都不赋值,默认都为0
    v3 = Vertex4{}      // X:0 and Y:0
    //指针的方式去赋值
    p  = &Vertex4{1, 2} // has type *Vertex
)

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

好了,这一次的结构体文法就是这样子了。

目录
相关文章
|
21天前
|
Go 开发者
掌握Go语言:Go语言结构体,精准封装数据,高效管理实体对象(22)
掌握Go语言:Go语言结构体,精准封装数据,高效管理实体对象(22)
|
3月前
|
关系型数据库 MySQL Go
工厂模式+自动注册管理Go多包结构体
工厂模式+自动注册管理Go多包结构体
43 1
|
3月前
|
安全 Go 开发工具
Go语言学习6-字典类型
【1月更文挑战第7天】本篇 Huazie 介绍 Go语言中的字典类型
28 1
Go语言学习6-字典类型
|
3月前
|
Go 数据安全/隐私保护 索引
Go语言学习5-切片类型
【1月更文挑战第4天】本篇 Huazie 带大家了解 Go 语言的切片类型
38 2
Go语言学习5-切片类型
|
3月前
|
存储 设计模式 Cloud Native
云原生系列Go语言篇-类型、方法和接口 Part 1
通过前面章节的学习,我们知道Go是一种静态类型语言,包含有内置类型和用户定义类型。和大部分现代编程语言一样,Go允许我们对类型关联方法。它也具备类型抽象,可以编写没有显式实现的方法。
50 0
|
1月前
|
Go Windows
|
2月前
|
Java Go 数据安全/隐私保护
Go语言学习7-函数类型
本篇 Huazie 向大家介绍 Go 语言的函数类型
34 1
Go语言学习7-函数类型
|
3月前
|
Go
Go语言导出包解密:外部访问你的类型和值
Go语言导出包解密:外部访问你的类型和值
34 0
|
3月前
|
编译器 Go
go语言第六章(结构体与方法)
go语言第六章(结构体与方法)
22 0
|
3月前
|
Go
深入理解Go的接口和类型断言
深入理解Go的接口和类型断言
68 0