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,一经查实,立即删除!

相关文章

OpenCV6-图形绘制

OpenCV6-图形绘制 1.绘制圆形2.绘制直线3.绘制椭圆4.绘制多边形5.文字生成6.demo 1.绘制圆形 void cv::circle(InputOutputArray img, // 需要绘制圆形的图像Point center, // 圆心坐标int radius, // 半径,单位为像素const Scalar& colo…

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…

dll文件缺失,ps,pr无法打开,游戏运行不了如何解决

最近重装了系统,然后打开原来的软件发现都会报错,说***.dll文件缺失 于是找了很多解决办法 方案一 说是下载一个dll文件恢复助手,一键恢复 不要信 统统不管用,不是收费高就是没作用 方案二 下载对应dll文件去c盘对应软件位置…

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

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

Sqlite3 查询 今日、昨日、本周、上周、本月、上月、本季度、上季度、本年

一、使用Between AND select * from 表名 where 字段名 Between ‘2019-1-01 00:00:00’ AND ‘2019-7-12 23:59:59’ 二、使用>,< select * from 表名 where 字段名 > ‘2019-1-01 00:00:00’ and 字段名 < ‘2019-12-12 23:59:59’ 三、升降序 select * from 表…

mathtype嵌入到wps中

首先你需要保证你有一个mathtype&#xff0c;mathtype的安装很简单&#xff0c;请自行查找资料 然后将mathtype嵌入到哪里是一个问题&#xff0c;网上的教程很多&#xff0c;但是一般分为两种&#xff0c;wps和word 那么&#xff0c;我为什么选取wps&#xff1f; 因为word频频碰…

BAT学习——计算当前路径下指定格式文件的MD5值,将文件名与MD5值写入文本

将以下内容粘贴到bat脚本中&#xff0c;双击运行&#xff0c;生成MD5.txt文件&#xff0c;需要其他格式&#xff0c;修改循环中的.rar 多个格式使用or分开 *.rar or *.bat脚本内容 echo off setlocal enabledelayedexpansionrem 设置输出文件名 set "outputFileMD5.txt&…

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

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

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

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

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

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

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

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

【经典排序算法 time: 2023-10-12】冒泡排序(层层优化改进)

原理 每次循环找出一个最大的元素&#xff08;动态演示&#xff09;第一版冒泡 public class Maopao1 {public static void main(String[] args) {long start System.currentTimeMillis();int[] arr2 {11, 23, 69, 99, 1, 3, 45, 67, 5, 234, 678, 999, 7, 123};int[] result…

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

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

hive 之select 中文乱码

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

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

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

十六、【橡皮擦工具组】

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