Go语言入门心法(二): 结构体


Go语言入门心法(一)

Go语言入门心法(二): 结构体




一: Go语言中结构体认知

go语言中的结构体认知升维:go语言中的结构体本身是一种自定义的数据类型,即然是数据类型,则可以用来声明其他的变量,被声明的变量即为结构体的实例对象go语言中的结构体融合了c语言中的结构体体征和面向对象的java|python中的类的特性go中结构体通常分为两种(1)普通结构体(2)匿名结构体go语言中结构体实例化: 通常我们要使用结构体中的成员变量与方法时,都需要先实例化结构体,再通过实例化对象来操作结构体重的成员属性和成员方法;go语言中实例化结构体有三种方法:(1) 标准实例化格式: var 机构体实例 结构体数量类型(2) new(结构体类型)函数实例化,实例化完成后会返回结构体的指针类型(3) 取地址实例化与new函数进行实例化类似,返回的是结构体指针类型,取地址实例化格式如下: 结构体实例 := &结构体类型{}

实例一: 普通结构体 

package mainimport "fmt"/*
go语言中的结构体认知升维:go语言中的结构体本身是一种自定义的数据类型,即然是数据类型,则可以用来声明其他的变量,被声明的变量即为结构体的实例对象go语言中的结构体融合了c语言中的结构体体征和面向对象的java|python中的类的特性go中结构体通常分为两种(1)普通结构体(2)匿名结构体go语言中结构体实例化: 通常我们要使用结构体中的成员变量与方法时,都需要先实例化结构体,再通过实例化对象来操作结构体重的成员属性和成员方法;go语言中实例化结构体有三种方法:(1) 标准实例化格式: var 机构体实例 结构体数量类型(2) new(结构体类型)函数实例化,实例化完成后会返回结构体的指针类型(3) 取地址实例化与new函数进行实例化类似,返回的是结构体指针类型,取地址实例化格式如下: 结构体实例 := &结构体类型{}
*/
func main() {println(`go语言中的结构体与c语言中的结构体类似;go语言中的结构体相当于java|python中类功能相当`)type Book struct {title    string // 标题author   string // 作者numCount int    // 数量id       int64  // 编号id}println("go语言中的结构体定义中,如果变量类型相同的结构体成员,可以将它们写在同一行")type Person struct {name, address, schoolName string // 名称,地址,毕业学校age                       int    // 年龄sex                       int    // 性别: 0-男;1-女marry                     bool   // 是否结婚}println()println("===================================第一种实例化结构体的方式===============================")// 创建类的实例标量 personvar person Person// 修改属性的默认值person.schoolName = "清华大学"println("实例化Person结构体: ", person.schoolName)println()fmt.Println(person)println()fmt.Println("结构体实例化第二种方式:")println("===================================第二种实例化结构体的方式===============================")book := new(Book)book.author = "老杨"book.title = "go语言零从入门到放弃"println(book)fmt.Println(book)println(book.title)println("====================================第三种实例化结构体的方式==============================")// 实例化动物结构体an := &Animal{"菲拉斯","猫科",20,}fmt.Println("Name : ", an.name, " , age : ", an.age, ", type: ", an.typeName)println("喵喵名称: ", an.name)// 调用结构体的方法an.ChangeName()println("调用结构体方法修改猫咪名称: ", an.name)
}// Animal 声明一个表示动物的结构体
type Animal struct {name     stringtypeName stringage      int
}// ChangeName 结构体的方法
func (an *Animal) ChangeName() {an.name = "小猫迷,芳芳"
}

运行效果:


GOROOT=D:\program_file_worker\go1.20 #gosetup
GOPATH=D:\program_file_worker\go1.20\bin;C:\Users\Administrator\go #gosetup
D:\program_file_worker\go1.20\bin\go.exe build -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_BookStructGrammar_go.exe D:\program_file\go_workspace\org.jd.data\struct\BookStructGrammar.go #gosetup
C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_BookStructGrammar_go.exe

       go语言中的结构体与c语言中的结构体类似;
       go语言中的结构体相当于java|python中类功能相当

go语言中的结构体定义中,如果变量类型相同的结构体成员,可以将它们写在同一行

===================================第一种实例化结构体的方式===============================
实例化Person结构体:  清华大学


{  清华大学 0 0 false}

结构体实例化第二种方式:
===================================第二种实例化结构体的方式===============================
0xc000194060
&{go语言零从入门到放弃 老杨 0 0}
go语言零从入门到放弃
====================================第三种实例化结构体的方式==============================
Name :  菲拉斯  , age :  20 , type:  猫科

Process finished with the exit code 0


二: 匿名结构体认知


go语言中匿名结构体认知:

    go语言中通过内嵌套结构体的方式来实现继承;类似于其他语言中的类的继承和派生类的角色
    子结构体中继承了父结构体中的结构体属性及结构体方法;结构体内嵌式一种组合特性,使用结构体内嵌是可构建一种面向对象编程思想中的继承关系;
    匿名结构体定义与初始化:
        匿名结构体,顾名思义,即结构体没有名称,与匿名函数类型。匿名结构体无须type关键字就可以直接使用
    匿名结构体在创建的同时也要创建对象;匿名结构体的初始化更加简单,无须通过type关键字定义,且不用写出类型名称。
    匿名结构体在初始化时需进行匿名结构体定义和成员变量初始化【可选】

 


 实例二:匿名结构体


package mainimport ("encoding/json""fmt"
)/*
go语言中匿名结构体认知:go语言中通过内嵌套结构体的方式来实现继承;类似于其他语言中的类的继承和派生类的角色子结构体中继承了父结构体中的结构体属性及结构体方法;结构体内嵌式一种组合特性,使用结构体内嵌是可构建一种面向对象编程思想中的继承关系;匿名结构体定义与初始化:匿名结构体,顾名思义,即结构体没有名称,与匿名函数类型。匿名结构体无须type关键字就可以直接使用匿名结构体在创建的同时也要创建对象;匿名结构体的初始化更加简单,无须通过type关键字定义,且不用写出类型名称。匿名结构体在初始化时需进行匿名结构体定义和成员变量初始化【可选】*/// Book 定义书籍结构体
type Book struct {title      stringauthor     stringpublishNum intid         string
}// Book结构体的方法
func (b *Book) setAuthor(authorName string) {b.author = authorName
}// BookBorrow 声明可供借阅的数据结构体
type BookBorrow struct {BookborrowTime string // 归还日期
}type BookNotBorrow struct {BookreadTime string // 借阅日期
}func main() {println("==========================go语言初始化第一种方式======================")bookBorrow := &BookBorrow{ // 使用类似map键值对信息实例化Book: Book{"线性代数","老张",2000,"987-2354-454-33-211",},borrowTime: "300",}fmt.Println(bookBorrow)fmt.Println("借阅的书籍:", bookBorrow.Book.title)println("==========================go语言初始化第二种方式======================")bookNotBorrow := new(BookNotBorrow)bookNotBorrow.title = "Java底层实现机制"bookNotBorrow.author = "老杨"bookNotBorrow.publishNum = 5000bookNotBorrow.readTime = "2023/10/13"bookNotBorrow.id = "987-2354-454-365-289"fmt.Println(bookNotBorrow)println("调用从父类继承的方法,修改作者名称:")println()bookNotBorrow.setAuthor("清华大学出版社")fmt.Println(bookNotBorrow)println("===========================go语言中匿名结构体=================================")// 定义匿名结构体并初始化化cat := struct {name     stringage      intcategory string}{name:     "喵喵",age:      20,category: "猫科",}println("匿名结构体:")fmt.Println(cat)fmt.Println(cat.category)fmt.Println(cat.name)fmt.Println(cat.age)println(`匿名结构体的应用:匿名结构体一般可以组织全局变量,构建数据模版,解析JSON等`)// 使用匿名结构体定义全局变量var config struct {IP   stringPort int}config.Port = 3306config.IP = "192.168.1.234"println("全局变量", config.IP)// 定义一个表示异常的结构体,来接收json的字符串窗data := &struct {Code    intMessage string}{}jsonData := `{"code": 200,"message":"系统异常"}`if err := json.Unmarshal([]byte(jsonData), data); err != nil {println(err)}fmt.Println("Code: ", data.Code)fmt.Println("Message: ", data.Message)}

 实例运行效果:


GOROOT=D:\program_file_worker\go1.20 #gosetup
GOPATH=D:\program_file_worker\go1.20\bin;C:\Users\Administrator\go #gosetup
D:\program_file_worker\go1.20\bin\go.exe build -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_AnonymityStructGrammar_go.exe D:\program_file\go_workspace\org.jd.data\struct\AnonymityStructGrammar.go #gosetup
C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_AnonymityStructGrammar_go.exe
==========================go语言初始化第一种方式======================
&{{线性代数 老张 2000 987-2354-454-33-211} 300}
借阅的书籍: 线性代数
==========================go语言初始化第二种方式======================
&{{Java底层实现机制 老杨 5000 987-2354-454-365-289} 2023/10/13}
调用从父类继承的方法,修改作者名称:

&{{Java底层实现机制 清华大学出版社 5000 987-2354-454-365-289} 2023/10/13}
===========================go语言中匿名结构体=================================
匿名结构体:
{喵喵 20 猫科}
猫科
喵喵
20

       匿名结构体的应用:
          匿名结构体一般可以组织全局变量,构建数据模版,解析JSON等

全局变量 192.168.1.234
Code:  200
Message:  系统异常

Process finished with the exit code 0
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/103925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xshell7和Xftp7超详细下载教程(包括安装及连接服务器附安装包)

1.下载 1.官网地址: XSHELL - NetSarang Website 选择学校免费版下载 2.将XSHELL和XFTP全都下载下来 2.安装 安装过程就是选择默认选项,然后无脑下一步 3.连接服务器 1.打开Xshell7,然后新建会话 2.填写相关信息 出现Connection establi…

JVM 性能调优参数

JVM分为堆内存和非堆内存 堆的内存分配用-Xms和-Xmx -Xms分配堆最小内存,默认为物理内存的1/64; -Xmx分配最大内存,默认为物理内存的1/4。 非堆内存分配用-XX:PermSize和-XX:MaxPermSize -XX:PermSize分配非堆最小内存,默认为物理…

【LeetCode高频SQL50题-基础版】打卡第5天:第26~30题

文章目录 【LeetCode高频SQL50题-基础版】打卡第5天:第26~30题⛅前言超过5名学生的课🔒题目🔑题解 求关注者的数量🔒题目🔑题解 只出现一次的最大数字🔒题目🔑题解 买下所有产品的客户&#x1f…

《进化优化》第4章 遗传算法的数学模型

文章目录 4.1 图式理论4.2 马尔可夫链4.3 进化算法的马尔可夫模型的符号4.4 遗传算法的马尔可夫模型4.4.1 选择4.4.2 变异4.4.3 交叉 4.5 遗传算法的动态系统模型4.5.1 选择4.5.2 变异4.5.3 交叉 4.1 图式理论 图式是描述一组个体的位模式,其中用*来表示不在乎的位…

如何在Ubuntu 20.04.6 LTS系统上运行Playwright自动化测试

写在前面 这里以 Ubuntu 20.04.6 LTS为例。示例代码:自动化测试代码。 如果过程中遇到其他非文本中提到的错误,可以使用搜索引擎搜索错误,找出解决方案,再逐步往下进行。 一、 环境准备 1.1 安装python3 1.1.1 使用APT安装Py…

python+opencv+深度学习实现二维码识别 计算机竞赛

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 pythonopencv深度学习实现二维码识别 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:3分 该项目较为新颖&…

跨语言深入探讨如何实现方法增强:Java Go的多策略实现

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

虚拟现实VR技术在医疗行业的应用介绍

虚拟现实 (VR) 虽然经常与游戏联系在一起,但不可否认,未来科技少不了虚拟现实,其应用可以彻底改变许多行业。在医疗领域,无数人正在探索 VR 可以帮助患者和医疗从业者实现更好的治疗结果治疗方式,比如在手术、疼痛管理…

最新水果FL Studio21.2中文汉化版本覆盖升级

FLStudio中文21最新版本以其使用速度而闻名,是一个高度复杂的音乐制作环境。FL Studio免费,联合国音序器音频和MIDI每个复合编辑都是音乐。现代的DAW是一种非凡的野兽。首先,它在很大程度上把自己放在了(几乎)每个人记录过程的核心。其次&…

【计算机网络】——前言计算机网络发展的历程概述

主页点击直达:个人主页 我的小仓库:代码仓库 C语言偷着笑:C语言专栏 数据结构挨打小记:初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记:LeetCode刷题 算法:算法专栏 C头…

【2023全网最全教程】web自动化测试入门

一、自动化测试基本介绍 1 自动化测试概述: 什么是自动化测试?一般说来所有能替代人工测试的方式都属于自动化测试,即通过工具和脚本来模拟人执行用例的过程。 2 自动化测试的作用 减少软件测试时间与成本改进软件质量通过扩大测试覆盖率…

hive 之select 中文乱码

此处的中文乱码和mysql的库表 编码 latin utf 无关。 直接上案例。 有时候我们需要自定义一列,有时是汉字有时是字母,结果遇到这种情况了。 说实话看到这真是糟心。这谁受得了。 单独select 没有任何问题。 这是怎么回事呢? 经过一番检查&…

【C++】-c++11的知识点(中)--lambda表达式,可变模板参数以及包装类(bind绑定)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

十六、【橡皮擦工具组】

文章目录 橡皮擦背景橡皮擦1. 一次取样2. 连续取样3. 取样背景色板 魔术橡皮擦 橡皮擦 橡皮擦跟我们平常生活中所用的橡皮擦是一样,它是将图层的内容擦除,只剩下空白部分。另外当我们按住Alt的键去擦除空白部分的时候,也可以将背景的部分显示出来。 另…

深入解析Spring Cloud Gateway的GlobalFilter

文章目录 摘要引言GlobalFilter的作用使用GlobalFilter默认的GlobalFilter自定义GlobalFilter 示例代码配置GlobalFilter配置文件方式代码方式 高级用法:重写GlobalFilter思路代码实现 结论参考文献 摘要 本文将详细介绍Spring Cloud Gateway中的GlobalFilter&…

VR会议:远程带看功能,专为沉浸式云洽谈而生

随着科技的不断发展,VR技术已经成为当今市场上较为热门的新型技术之一了,而VR会议远程带看功能,更是为用户提供更加真实、自然的沉浸式体验。 随着5G技术的发展,传统的图文、视频这种展示形式已经无法满足消费者对信息真实性的需求…

Vue2 +Element UI 表格行合并

如果相邻数据是一致的&#xff0c;则单元格的行合并,指定需要合并的列&#xff0c;下面我是指定合并了分类和类型这两列。 先看效果 Element UI为我们的<el-table>提供了一个属性span-method&#xff1a;合并行或列的计算方法 下面是一个示例: html部分 - 主要是在表上指…

广州华锐互动:炼钢工厂VR仿真实训系统

随着科技的发展&#xff0c;我们的教育体系和职业培训方法也在迅速变化。其中&#xff0c;虚拟现实&#xff08;VR&#xff09;技术的出现为我们提供了一种全新的学习和培训方式。特别是在需要高度专业技能和安全性的领域&#xff0c;如钢铁冶炼。本文将探讨如何使用VR进行钢铁…

MySQL使用函数、存储过程实现:向数据表快速插入大量测试数据

实现数据表快速插入20W测试数据 实现过程创建表开启允许创建函数生成随机字符串生成随机整数生成随机地址创建存储过程调用存储过程查看插入数据 其他实用函数生成随机浮点数生成随机日期时间生成随机布尔值生成随机姓名生成随机手机号码生成随机邮箱地址生成随机IP地址生成随机…

SQL Server 创建表

切换数据库&#xff0c;判断是否存在 --切换数据库 use DBTEST--判断表是否存在 --创建的所有表都可以在sys.boject中找到&#xff0c;所以这里在sys.objects中查找是否有名字为department的表并且type为U 即用户生成的表 if exists(select * from sys.objects where namedepa…