非零基础自学Golang 第9章 结构体 9.6 结构体内嵌

news2024/9/20 18:49:52

非零基础自学Golang

文章目录

      • 非零基础自学Golang
      • 第9章 结构体
        • 9.6 结构体内嵌
          • 9.6.1 初始化结构体内嵌
          • 9.6.2 内嵌匿名结构体

第9章 结构体

9.6 结构体内嵌

Go语言的结构体内嵌是一种组合特性,使用结构体内嵌可构建一种面向对象编程思想中的继承关系。

结构体实例化后,可直接访问内嵌结构体的所有成员变量和方法。

结构体内嵌格式如下:

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

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

对于图书馆中的书,我们可大致分为两类:可外借的书和不可外借的书。

我们现在将图书馆中的书抽象为结构体Book,将可借阅的书抽象为结构体BookBorrow,将不可借阅的书抽象为结构体BookNotBorrow。

可借阅和不可借阅的书作为图书馆中的书,都继承了书的基本属性和方法,具体代码如下:

[ 动手写 9.6.1]

package main

import "fmt"

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

type BookBorrow struct {
   Book
   borrowTime string
}

type BookNotBorrow struct {
   Book
   readTime string
}

func main() {
   bookBorrow := &BookNotBorrow{}
   bookNotBorrow := &BookNotBorrow{}

   fmt.Println(bookBorrow)
   fmt.Println(bookNotBorrow)
}

运行结果

在这里插入图片描述

9.6.1 初始化结构体内嵌

结构体内嵌的初始化和结构体初始化类似,可以使用键值对或“.”的方式来进行初始化。

例如,已借阅书籍和未借阅书籍的初始化:

[ 动手写 9.6.2]

package main

import "fmt"

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

type BookBorrow struct {
   Book
   borrowTime string
}

type BookNotBorrow struct {
   Book
   readTime string
}

func main() {
   bookBorrow := &BookBorrow{
      Book: Book{
         "Go语言",
         "Tom",
         20,
         152368,
      },
      borrowTime: "30",
   }

   fmt.Println(bookBorrow)

   bookNotBorrow := &BookNotBorrow{}

   bookNotBorrow.title = "Python语言"
   bookNotBorrow.author = "Peter"
   bookNotBorrow.num = 10
   bookNotBorrow.id = 152369
   bookNotBorrow.readTime = "50"

   fmt.Println(bookNotBorrow)
}

运行结果

在这里插入图片描述

9.6.2 内嵌匿名结构体

在部分场景下,我们会使用匿名结构体来代替普通的结构体,以使代码的编写更加便利。

在定义匿名结构体时,无须type关键字,但是在初始化被嵌入的匿名结构体时,需要再次声明结构体才能赋予数据。

[ 动手写 9.6.3]

package main

import "fmt"

type BookBorrow struct {
   Book struct { //内嵌匿名结构体
      title  string
      author string
      num    int
      id     int
   }

   borrowTime string
}

func main() {

   bookBorrow := &BookBorrow{
      Book: struct { // 声明类型
         title  string
         author string
         num    int
         id     int
      }{"Go语言", "Tom", 20, 152368},
      borrowTime: "30",
   }

   fmt.Println(bookBorrow)
}

运行结果

在这里插入图片描述

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

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

相关文章

[附源码]Python计算机毕业设计Django文曦家教预约系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

PCB四层板、六层板层叠推荐设计,常见层叠方案优缺点

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验&a…

Qt-Web混合开发-WebSocket客户端程序Web版本(9)

Qt-Web混合开发-WebSocket客户端程序Web版本💚💜🉑🍑 文章目录Qt-Web混合开发-WebSocket客户端程序Web版本💚💜🉑🍑1、概述🐛🦆2、实现效果😅&…

Java实战:hutool-db实现多数据源配置

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

5G NR同频多beam检测方法

【摘 要】5G NR与LTE有诸多方面的不同,较突出的变化就是SSB内PSS序列和SSS序列设计与LTE明显不同,而且在每个SSB突发内会有多个SSB,多个SSB的出现增加了小区搜索的难度。由于频谱资源匮乏,所以采用同频方式组网,但因此相邻小区之间也会产生干扰,影响检测效率。同频检测技…

器乐文化网站

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 1.用户模块 1)登录/注册 (通过前后端交互实现用户信息注册登 录) 2) 在线支付充值虚拟币;&#…

Ajax(七)+axios+跨域+JSONP

目录 1. XMLHttpRequest Level2的新特性——FormData对象管理表单数据(一) 用法(二) 2. XMLHttpRequest Level2的新特性—— 上传文件 3. XMLHttpRequest Level2的新特性—— 显示文件上传进度 4. jQuery高级用法 4.1 jQuery…

【AIOT】Python语音处理

语音信号有三个重要的参数:声道数、取样频率和量化位数。 声道数:可以是单声道或者是双声道采样频率:一秒内对声音信号的采集次数,44100Hz采样频率意味着每秒钟信号被分解成44100份。换句话说,每隔144100秒就会存储一次…

[附源码]计算机毕业设计Python本地助农产品销售系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

class80(CL80)双模蓝牙5.2热插拔PCB

键盘使用说明索引(均为出厂默认值)软件支持一些常见问题解答(FAQ)首次使用测试步骤蓝牙配对规则(重要)蓝牙和USB切换键盘默认层默认触发层0的FN键配置的功能默认功能层1配置的功能默认的快捷键蓝牙参数蓝牙…

【lssvm回归预测】基于鸽群算法优化最小二乘支持向量机PIO-lssvm实现数据回归预测附matlab代码

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

Python+Qt抽奖点名工具源码窗体程序

程序示例精选 PythonQt抽奖点名工具源码窗体程序 如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonQt抽奖点名工具源码窗体程序》编写代码,功能包括了抽奖点名,历史…

【DBN分类】基于粒子群算法优化深度置信网络PSO-DBN实现数据分类附matlab代码

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

Enhancing Adversarial Training with Second-Order Statistics of Weights

利用二阶权重统计增强对抗训练 对抗训练已被证明是提高深度神经网络鲁棒性的最有效方法之一。它被形式化为对模型权重和对抗性扰动的最小-最大优化,其中权重可以通过梯度下降方法(如SGD)进行优化。在本文中,我们证明了将模型权重…

黑*头条_第2章_app端文章查看,静态化freemarker,分布式文件系统minIO(新版)

黑*头条_第2章_app端文章查看,静态化freemarker,分布式文件系统minIO(新版) 文章目录黑*头条_第2章_app端文章查看,静态化freemarker,分布式文件系统minIO(新版)1)文章列表加载1.1)需求分析1.2)表结构分析1…

2000-2020年全国31省城镇化率

2000-2020年全国31省城镇化率 1、时间:2000-2020年 2、范围:包括全国31个省 3、指标包括:总人口、城镇人口、农村人口、城镇化率 其中:城镇化率城镇人口/总人口 3、来源:整理自计NJ及各省统计NJ 4、指标解释&…

葵花宝典之C语言冷知识(一)

实用小课堂开课啦!鸟类天堂: 🦢一:函数类型的对应 🦜代码呈现: 🦢二:浮点数运算 🦢三:scanf的使用 🦩 NUM 1:遇见空格,回车…

(附源码)Springboot北京东奥会志愿者报名系统 毕业设计 150947

Springboot北京北京东奥会志愿者报名系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对北…

数据挖掘Java——KNN算法的实现

一、KNN算法的前置知识 k-近邻(kNN, k-NearestNeighbor)是在训练集中选取离输入的数据点最近的k个邻居,根据这个k个邻居中出现次数最多的类别(最大表决规则),作为该数据点的类别。 分类在数据挖掘中是一项…

底层网络知识详解:陌生的数据中心-第18讲-DNS协议:网络世界的地址簿

前面我们讲了平时常见的看新闻、支付、直播、下载等场景,现在网站的数目非常多,常用的网站就有二三十个,如果全部用IP地址进行访问,恐怕很难记住。于是,就需要一个地址簿,根据名称,就可以查看具体的地址。 例如,我要去西湖边的“外婆家”,这就是名称,然后通过地址簿…