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原生库的中bytes.Buffer用法
Apr 25 Golang
Golang 正则匹配效率详解
Apr 25 Golang
go语言中切片与内存复制 memcpy 的实现操作
Apr 27 Golang
golang json数组拼接的实例
Apr 28 Golang
golang DNS服务器的简单实现操作
Apr 30 Golang
go类型转换及与C的类型转换方式
May 05 Golang
基于Golang 高并发问题的解决方案
May 08 Golang
Go语言实现Snowflake雪花算法
Jun 08 Golang
Golang中异常处理机制详解
Jun 08 Golang
浅谈Go语言多态的实现与interface使用
Jun 16 Golang
Go语言编译原理之源码调试
Aug 05 Golang
Go中使用gjson来操作JSON数据的实现
Aug 14 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
新的一年,新的期待:DC在2020年的四部动画电影
2020/01/01 欧美动漫
PHP Array交叉表实现代码
2010/08/05 PHP
如何用php获取程序执行的时间
2013/06/09 PHP
HTML中嵌入PHP的简单方法
2016/02/16 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
js loading加载效果实现代码
2009/11/24 Javascript
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
详解webpack中的hash、chunkhash、contenthash区别
2018/01/05 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
微信小程序如何利用getCurrentPages进行页面传值
2019/07/01 Javascript
Node对CommonJS的模块规范
2019/11/06 Javascript
python list中append()与extend()用法分享
2013/03/24 Python
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
python开发之str.format()用法实例分析
2016/02/22 Python
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
使用python3实现操作串口详解
2019/01/01 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
Python 根据数据模板创建shapefile的实现
2019/11/26 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
2020/01/25 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
高中体育教学反思
2014/01/29 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
镇党委书记群众路线整改措施思想汇报
2014/10/13 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
庆七一主持词
2015/06/29 职场文书
Win11 Build 22000.51版本文件资源管理器“命令栏”和上下文菜单有什么新变化?
2021/11/21 数码科技
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫