Golang 结构体数据集合


Posted in Golang onApril 22, 2022

引言

Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合

结构体表示一项记录,比如保存图书馆的书籍记录,每本书有以下属性:

Title :标题

Author : 作者

Subject:学科

ID:书籍ID

一、定义结构体

1. 语法格式

结构体定义需要使用 type 和 struct 语句

struct 语句定义一个新的数据类型,结构体中有一个或多个成员

type 语句设定了结构体的名称

结构体的格式如下

type struct_variable_type struct {
    member definition
    member definition
    ...
    member definition
 } 

一旦定义了结构体类型,它就能用于变量的声明,语法格式如下

variable_name := structure_variable_type {value1, value2...valuen}

或者

variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}  

2. 示例

package main
 
import "fmt"
 
type Persion struct {
    name    string
    sex     string
    age     int
    id_card int
}
 
func main() {
    //创建一个新的结构体
    fmt.Println(Persion{"zhangsan", "男", 20, 123412424})
    //使用key:value格式
    fmt.Println(Persion{name: "lisi", sex: "女", age: 18, id_card: 133654623})
    //忽略的字段为0或空
    fmt.Println(Persion{name: "wangwu", id_card: 21352365})
}

输出结果

{zhangsan 男 20 123412424}
{lisi 女 18 133654623}
{wangwu  0 21352365}  

二、访问结构体成员

如果要访问结构体成员,需要使用点号.操作符,格式为:

结构体.成员名"  

结构体类型变量使用 struct 关键字定义,实例如下:

package main
 
import "fmt"
 
func main() {
    //结构体声明
    type Persion struct {
        name string
        age  int
        sex  string
        id   int
    }
    //结构体类型的变量
    var (
        Persion1 Persion //声明 Persion1 为 Persion 类型
        Persion2 Persion //声明 Persion2 为 Persion 类型
    )
 
    //给prison1赋值
    Persion1.name = "lisi"
    Persion1.sex = "man"
    Persion1.age = 30
    Persion1.id = 56341153
 
    //给prison2赋值
    Persion2.name = "wangwu"
    Persion2.sex = "woman"
    Persion2.age = 18
    Persion2.id = 78238232
 
    fmt.Println(Persion1)
    fmt.Println(Persion2)
}

输出结果如下

{lisi 30 man 56341153}
{wangwu 18 woman 78238232} 

三、结构体作为函数参数

结构体也可以作为参数传递给函数,可以解决一些代码的冗余问题,简化代码

示例

package main
 
import "fmt"
 
//结构体声明
type Persion struct {
    name string
    age  int
    sex  string
    id   int
}
 
func main() {
 
    //结构体类型的变量
    var (
        Persion1 Persion //声明 Persion1 为 Persion 类型
        Persion2 Persion //声明 Persion2 为 Persion 类型
    )
 
    //给prison1赋值
    Persion1.name = "lisi"
    Persion1.sex = "man"
    Persion1.age = 30
    Persion1.id = 56341153
 
    //给prison2赋值
    Persion2.name = "wangwu"
    Persion2.sex = "woman"
    Persion2.age = 18
    Persion2.id = 78238232
 
    //使用函数传递结构体
    printInfo(Persion1)
    fmt.Println("------------------")
    printInfo(Persion2)
}
 
//函数定义结构体为形式参数,进行传入
func printInfo(p Persion) {
    fmt.Println("姓名: ", p.name)
    fmt.Println("年龄: ", p.age)
    fmt.Println("性别: ", p.sex)
    fmt.Println("身份证: ", p.id)
}

输出结果如下

姓名:  lisi
年龄:  30
性别:  man
身份证:  56341153
------------------
姓名:  wangwu
年龄:  18
性别:  woman
身份证:  78238232

四、结构体指针

可以定义指向结构体的指针类似于其他指针变量,格式如下

var struct_pointer *Persion

以上定的指针变量可以存储结构体变量的地址,查看结构体变量的地址,可以将&符合放置于结构体变量前

struct_pointer = &Persion1

使用结构体指针访问结构体成员,可以使用.操作符

struct_pointer.title  
package main
 
import "fmt"
 
//结构体声明
type Persion struct {
    name string
    age  int
    sex  string
    id   int
}
 
func main() {
 
    //结构体类型的变量
    var (
        Persion1 Persion //声明 Persion1 为 Persion 类型
        Persion2 Persion //声明 Persion2 为 Persion 类型
    )
 
    //给prison1赋值
    Persion1.name = "lisi"
    Persion1.sex = "man"
    Persion1.age = 30
    Persion1.id = 56341153
 
    //给prison2赋值
    Persion2.name = "wangwu"
    Persion2.sex = "woman"
    Persion2.age = 18
    Persion2.id = 78238232
 
    //使用函数传递结构体的地址
    printInfo(&Persion1)
    fmt.Println("------------------")
    printInfo(&Persion2)
}
 
//定义结构体指针形参进行传入
func printInfo(p *Persion) {
    fmt.Println("姓名: ", p.name)
    fmt.Println("年龄: ", p.age)
    fmt.Println("性别: ", p.sex)
    fmt.Println("身份证: ", p.id)
}

输出结果如下

姓名:  lisi
年龄:  30
性别:  man
身份证:  56341153
------------------
姓名:  wangwu
年龄:  18
性别:  woman
身份证:  78238232

总结

结构体是由相同类型和不同类型组成的数据集合,存储的结构类型是不受限制的


Tags in this post...

Golang 相关文章推荐
go语言-在mac下brew升级golang
Apr 25 Golang
golang 接口嵌套实现复用的操作
Apr 29 Golang
使用Golang的channel交叉打印两个数组的操作
Apr 29 Golang
golang中字符串MD5生成方式总结
Jul 04 Golang
K8s部署发布Golang应用程序的实现方法
Jul 16 Golang
Golang表示枚举类型的详细讲解
Sep 04 Golang
Golang使用Panic与Recover进行错误捕获
Mar 22 Golang
golang操作rocketmq的示例代码
Apr 06 Golang
Go语言安装并操作redis的go-redis库
Apr 14 Golang
Golang Elasticsearches 批量修改查询及发送MQ
Apr 19 Golang
Go获取两个时区的时间差
Apr 20 Golang
Golang 并发编程 SingleFlight模式
Apr 26 Golang
Golang map映射的用法
Apr 22 #Golang
Golang bufio详细讲解
Apr 21 #Golang
Go获取两个时区的时间差
Apr 20 #Golang
Golang jwt身份认证
实现GO语言对数组切片去重
Apr 20 #Golang
Golang日志包的使用
Apr 20 #Golang
Golang获取List列表元素的四种方式
Apr 20 #Golang
You might like
深入了解php4(1)--回到未来
2006/10/09 PHP
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
2007/04/16 PHP
php筛选不存在的图片资源
2015/04/28 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
jquery实用代码片段集合
2010/08/12 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
Vue.js图片预览插件使用详解
2018/08/27 Javascript
JS实现在线ps功能详解
2019/07/31 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
Python中List.count()方法的使用教程
2015/05/20 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
利用Pandas 创建空的DataFrame方法
2018/04/08 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
增大python字体的方法步骤
2020/07/05 Python
Python Opencv轮廓常用操作代码实例解析
2020/09/01 Python
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
写一个方法1000的阶乘
2012/11/21 面试题
剪枝的学问教学反思
2014/02/07 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
安全先进班组材料
2014/12/26 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js