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 相关文章推荐
Golang 使用Map实现去重与set的功能操作
Apr 29 Golang
Golang中interface{}转为数组的操作
Apr 30 Golang
golang elasticsearch Client的使用详解
May 05 Golang
golang日志包logger的用法详解
May 05 Golang
深入理解go slice结构
Sep 15 Golang
golang操作rocketmq的示例代码
Apr 06 Golang
golang使用map实现去除重复数组
Apr 14 Golang
golang的文件创建及读写操作
Apr 14 Golang
Golang jwt身份认证
Apr 20 Golang
GoFrame框架数据校验之校验结果Error接口对象
Jun 21 Golang
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
Jun 21 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的彩蛋
2006/10/09 PHP
PHP 源代码压缩小工具
2009/12/22 PHP
深入eAccelerator与memcached的区别详解
2013/06/06 PHP
浅析php学习的路线图
2013/07/10 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
js特殊字符过滤的示例代码
2014/03/05 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
2016/07/04 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
python八皇后问题的解决方法
2018/09/27 Python
Python GUI布局尺寸适配方法
2018/10/11 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
Python从入门到精通之环境搭建教程图解
2019/09/26 Python
python实现超市商品销售管理系统
2019/10/25 Python
python3注册全局热键的实现
2020/03/22 Python
如何在Python3中使用telnetlib模块连接网络设备
2020/09/21 Python
css3 按钮 利用css3实现超酷下载按钮
2013/03/18 HTML / CSS
俄罗斯卫浴采暖及维修用品超级市场:Dkrussia
2020/05/12 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
五一服装活动方案
2014/01/11 职场文书
早读迟到检讨书
2014/01/24 职场文书
工作自我评价怎么写
2014/01/29 职场文书
银行见习期自我鉴定
2014/01/29 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
生产助理岗位职责
2014/06/18 职场文书
关于倡议书的范文
2015/04/29 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python