非零基础自学Golang 第9章 结构体 9.1 理解结构体 9.2 定义结构体 9.3 实例化结构体

news2024/9/20 1:02:46

非零基础自学Golang

文章目录

      • 非零基础自学Golang
      • 第9章 结构体
        • 9.1 理解结构体
        • 9.2 定义结构体
        • 9.3 实例化结构体
          • 9.3.1 标准实例化
          • 9.3.2 new函数实例化
          • 9.3.3 取地址实例化
          • 9.3.4 访问成员

第9章 结构体

在Go语言官网的常见问题解答一栏中,有这样一个问题:“Is Go an object-oriented language?(Go语言是否是一种面向对象语言?)”比较有意思的是,

Go官方给出的回答是:“Yes and no.(既是也不是。)”

不同于Python和C++等编程语言,虽然Go有着面向对象语言的编程风格,但Go并不是典型的面向对象的语言。Go语言中不支持类,但它提供了结构体,Go语言中的结构体和接口实现了面向对象编程的特性。

此外,Go中的方法比C++或Java等编程语言中的方法更通用,可以为任何类型的数据定义这些方法。

9.1 理解结构体

通过使用结构体,我们可以自定义一系列由相同类型或不同类型的数据构成的数据集合,用来实现较复杂的数据结构。

Go语言的结构体是一种对现实生活中实体的抽象,结构体由一系列成员变量构成,这些成员变量对应着实体不同的属性。

例如,对于某个图书馆中的所有书籍,我们可以抽象出书这个结构体,经过总结归纳,该图书馆中的书都拥有以下属性:书名、作者、数量、ID号。

那么,我们可以定义以下结构体:

结构体名:book

  • 成员1:书名
  • 成员2:作者
  • 成员3:数量
  • 成员4:ID号

9.2 定义结构体

GO语言中通过关键字type定义自定义类型,结构体定义需要使用type和struct关键字,具体定义格式如下:

type 结构体名 struct {
 	成员变量1 类型1
 	成员变量2 类型2
 	成员变量3 类型3
 	...
}

和C 真像啊

注意:

  • 结构体名:同一个包内结构体名不能重复。
  • 成员名:同一个结构体内,成员名不能重复。
  • 类型1、类型2……:表示结构体成员变量的类型。
  • 同类型的成员名可以写在同一行。
  • 当结构体、方法名或变量名的首字母为大写时(可被导出)【“公有”】,就可以在当前包外进行访问。

对于book结构体,其定义如下:

type Book struct {
 	title string
 	author string
 	num int
 	id int
}

对于同变量类型的结构体成员,可以将它们写在同一行:

type Book struct {
 	title,author string
 	num,id int
}

9.3 实例化结构体

一个结构体在定义完成后才能进行使用。结构体实例化时,会真正地分配内存。因此,必须在定义结构体并实例化后才能使用结构体的字段。

Go语言实例化结构体主要有以下三种方式:

  • 标准实例化。
  • new函数实例化。
  • 取地址实例化。
9.3.1 标准实例化

结构体本身是一种自定义数据类型,和其他基本数据类型的声明格式类似,可以通过var关键字进行实例化。

标准实例化格式如下:

var 结构体实例 结构体类型

下方的程序实例化了book1,对book1的各个成员进行了初始化赋值。

[ 动手写 9.3.1]

package main

import "fmt"

type Book struct {
   title  string
   author string
   num    int
   id     int
}

func main() {
   var book1 Book
   fmt.Println(book1)
}

运行结果

在这里插入图片描述

由于string和int类型变量的初始值为""和0,因此程序执行结果如上。

9.3.2 new函数实例化

new函数可对结构体进行实例化,实例化完成后会返回结构体的指针类型。

[ 动手写 9.3.2]

package main

import "fmt"

type Book struct {
   title  string
   author string
   num    int
   id     int
}

func main() {
   book1 := new(Book)
   fmt.Println(book1)
}

运行结果

在这里插入图片描述

9.3.3 取地址实例化

取地址实例化与使用new函数进行实例化类似,返回的是结构体指针类型。

取地址实例化格式如下:

结构体实例 := &结构体类型{}

[ 动手写 9.3.3]

package main

import "fmt"

type Book struct {
   title  string
   author string
   num    int
   id     int
}

func main() {

   book1 := &Book{}
   fmt.Println(book1)
}

运行结果

在这里插入图片描述

9.3.4 访问成员

结构体实例化完成后,可通过“.”来访问结构体的成员变量,对成员变量进行赋值或修改。

[ 动手写 9.3.4]

package main

import "fmt"

type Book struct {
   title  string
   author string
   num    int
   id     int
}

func main() {

   book1 := &Book{}
   book1.title = "Go语言"
   book1.author = "Tom"
   book1.num = 20
   book1.id = 152368

   fmt.Println("title: ", book1.title)
   fmt.Println("author: ", book1.author)
   fmt.Println("num: ", book1.num)
   fmt.Println("id: ", book1.id)
   
}

运行结果

在这里插入图片描述

不论使用哪种方式对结构体进行实例化,都可通过“.”的方式来对结构体的成员变量进行访问。

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

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

相关文章

Fiddler(7):fiddler设置弱网测试

弱网测试 概念:弱网看字面意思就是网络比较弱,我们通称为信号差,网速慢。 意义:模拟在地铁、隧道、电梯和车库等场景下使用APP ,网络会出现延时、中断和超时等情况。 Fiddler弱网测试流程: 一、限速操作…

基于云开发的微信小程序、QQ小程序详细教程(更新中)

云开发解决方案 小程序云开发解决方案 为企业和开发者提供一站式后端云服务,无需管理基础架构,一次开发多端运行,腾讯云和微信联合出品。 云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环…

数据结构---大整数相加

大整数相加列竖式运算第一步第二步第三步第四步JAVA实现给出两个很大的整数,要求实现程序求出两个整数之和。 记得这个题目我大二ACM课程老师讲过,但是忘记了。。。。。。。。。。 列竖式运算 程序不可能通过一条指令计算出两个大整数之和,…

【学习打卡04】可解释机器学习笔记之Grad-CAM

可解释机器学习笔记之Grad-CAM 文章目录可解释机器学习笔记之Grad-CAMGrad-CAM介绍Grad-CAM是CAM的泛化形式Gard-CAM可视化结果Grad-CAM算法的优点Grad-CAM算法的缺点Grad-CAM变种Grad-CAMScore-CAMLayer-CAM思考与总结参考阅读首先非常感谢同济子豪兄拍摄的可解释机器学习公开…

SAP S4 FICO 固定资产模块后台配置详解

1. 概述 资产会计(FI-AA)作为总帐模块(FI-GL)的子分类帐,对企业的固定资产、无形资产、在 建工程、低值易耗品、长期待摊、从购置、资本化、折旧、调拨到出售/报废的整个生命周期 进行全过程的管理,并和…

java实现给微信群中定时推送消息

大家好,我是雄雄。 前言 上一篇,我们介绍了如何通过调用接口的方式,将每日新闻发送到自己的博客中。我们会发现,将新闻以文章的形式发布,并且相关内容按照markdown的形式进行格式调整,有需要的可以点击这里…

获取小程序生产、开发、体验等环境、版本信息、appid等信息

if (typeof __wxConfig "object"){const version __wxConfig.envVersion;console.log("当前环境:" version)if (version "develop"){cosole.log(测试 开发环境)}else if (version "trial"){cosole.log(测试 体验版)}else if (versio…

【电力系统】基于YALMIP+CPLEX求解带储能的微电网优化调度问题附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

【树莓派不吃灰】兄弟连篇② 文件编辑器vim与RPM软件包管理、yum

目录1、文件编辑器Vim1.1 工作模式1.2 插入命令1.3 定位命令1.4 删除命令1.5 复制和剪切命令1.6 替换和取消命令1.7 搜索和搜索替换命令1.8 保存和退出命令1.9 使用技巧2、yum包管理2.1 网络yum源2.2 yum命令2.3 rpm包与源码包安装位置❤️ 博客主页 单片机菜鸟哥,一…

联盛德W801开发板流水灯示例

联盛德W801开发板流水灯示例📺📽🎞🎬本实验通过利用开发板中间的7个led,控制对应的IO实现流水灯效果。 📜W801 32位WiFi蓝牙双模SoC开发板 🛠开发工具以及示例Demo工程 参考:《W801…

【数学模型】基于ARMR模型模拟风速附matlab完整代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

图计算的学习与思考

好的软件不是靠程序分析、查错查出来的,而是由正确的人构建出来的。图成为日益重要的运算对象,图结构是对群体关系的一种抽象,可以描述丰富的对象和关系。图计算的核心是如何将数据建模为图结构以及如何将问题的解法转化为图结构上的计算问题…

MySQL高级【存储引擎】

目录 1:Mysql体系结构图: 2:存储引擎简介 3:存储引擎特点 InnoDB存储引擎: MyISAM存储引擎: Memory存储引擎: 4:存储引擎选择 5:存储引擎小结 1:Mysq…

.net core 在arm linux 上运行

一、环境 开发板:OKMX6ULL 硬件:cortex A7 软件环境:Linux version 4.1.15-00041-g92e8c0f (zsdeveloper-RH2485-V2) (gcc version 5.3.0 (GCC) ) #1 SMP PREEMPT Mon May 24 17:20:23 CST 2021 .net core 版本: 二、问题 1…

网络攻防中的支持多种社交媒体的网络 go-fish 工具(包含智能探测、用户查找、权限提升等等),需谨慎使用,不然要被请去喝茶了

网络攻防中的支持多种社交媒体的网络 go-fish 工具(包含智能探测、用户查找、权限提升等等),需谨慎使用,不然要被请去喝茶了。 ShellPhish是一个可定制的网络 go-fish 工具,基于SocialFish。 支持以下社交平台: Instagram Facebook Twitter Snapchat Github Yahoo…

Linux学习笔记——Linux基础命令

02、Linux基础命令 2.1、Linux的目录结构 1、学习目标 掌握Linux系统的目录结构掌握Linux系统的路径表达式 2、Linux的目录结构是一个树型结构 Windows系统可以拥有多个盘符,如C盘、D盘、E盘 Linux没有盘符这个概念,只有一个根目录/,所有…

【大数据趋势】趋势在发生变化,稍安勿躁。

昔日(12月以前)行情核心源头 : 纳斯达克指数主连日线,趋势预测准确,继续筑底可能中 回顾一下上周大数据预测的趋势,指数用上引线方式神奇完成目标 【12.3趋势模拟情况】 预计:趋势不变情况下,预测反弹到黄金分割线…

基于预训练和对比学习的新意图发现

前言 从对话人的语句中发现新意图是一个研究方向 一般来说就是对句子通过聚类来解决这一问题,所以这里通常会涉及到两个问题: (1)怎么表征好一个句子 (2)怎么更好的聚类 今天就给大家介绍本篇~&…

通信技术对自动驾驶发展的关键作用

【摘 要】随着自动驾驶的快速发展,新技术逐渐涌现,通信技术被产业认为是未来网联化自动驾驶发展的关键技术。从通信角度出发,分析通信技术为自动驾驶在技术及可靠性、成本控制、以及社会效益方面带来的提升,详细介绍了3GPP R16 5G-V2X在自动驾驶业务方面带来的技术优化,并…

Spring Boot整合分布式搜索引擎ElasticSearch 实现相关基本操作

文章目录一、ElasticSearch 介绍二、环境准备三、创建Spring Boot项目导入依赖四、创建高级客户端五、基本操作索引操作文档操作批量插入数据其他操作六、总结一、ElasticSearch 介绍 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据…