11【保姆级】-GO语言的struct

11【保姆级】-GO语言的struct

  • 一、Go的面向对象
    • 1.1 说明
  • 二、结构体
    • 2.1 结构体和结构体变量(实例)的区别和联系
    • 2.2 声明结构体 和 细节说明
    • 2.3 结构体在内存中的布局
    • 2.4 创建结构体和访问结构体的四种方式

在学习GO语言时:

  1. 先建立整体框架,然后再去抠细节。
  2. 先Know how,然后know why。
  3. 先做出来,然后再去一点点研究,才会事半功倍。
  4. 适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。
  5. 对于GO语言,切记遵守语法格式规则。(例如python语言、例如SpringBoot框架等)
    解释:某些知识点,就是很难了解,那么先做出来,然后继续向前学习,可能在某个时间点我们就会恍然大悟。

一、Go的面向对象

1.1 说明

  1. Golang 也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说 Golang 支持面向对象编程特性是比较准确的。
  2. Golang 没有类(class),Go 语言的结构体(struct)和其它编程语言的类(class)有同等的地位,在Golang中的面向对象 是基于 struct 来实现 OOP 特性的。
  3. Golang 面向对象编程非常简洁,去掉了传统 OOP 语言的继承、方法重载、构造函数和析构函数、隐藏的 this 指针等等
  4. Golang 仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它 OOP 语言不样,比如继承 : Golang 没有 extends 关键字,继承是通过匿名字段来实现。
  5. Golang 面向对象(OOP)很优雅,OOP 本身就是语言类型系统(type system)的一部分,通过接口(interface)关联,耦合性低,也非常灵活。后面同学们会充分体会到这个特点。也就是说在 Golang 中面向接口编程是非常重要的特性。

二、结构体

2.1 结构体和结构体变量(实例)的区别和联系

  1. 结构体是自定义的数据类型(数据类型例如:int、string),代表一类事物
  2. 结构体变量(实例)是具体的,实际的,代表一个具体变量
type Cat struct {
	name string
	age  int
}

func main() {

	var catVar Cat
	catVar.name = "小白猫"
	catVar.age = 1
	fmt.Println(catVar)                 	 // {小白猫 1}
	fmt.Println("catName:", catVar.name) // catName: 小白猫
	fmt.Println("catAge:", catVar.age)   // catAge: 1
}

2.2 声明结构体 和 细节说明

在这里插入图片描述

  1. 从概念或叫法上看: 结构体字段 = 属性 = feld
  2. 字段是结构体的一个组成部分,一般是基本数据类型、数组,也可是引用类型。
  3. 字段声明语法同变量,示例: 字段名 字段类型
  4. 字段的类型可以为: 基本类型、数组或引用类型
  5. 在创建一个结构体变量后,如果没有给字段赋值,都对应一个零值(默认值),规则:
    • 布尔类型是 false ,数值是 0 ,字符串是"
    • 数组类型的默认值和它的元素类型相关,比如 score [3 int 则为[0,0,0]
    • 指针 slice,和 map 的零值都是 nil ,即还没有分配空间
  6. 不同结构体变量的字段是独立,互不影响,一个结构体变量字段的更改,不影响另外一个,结构体
    是值类型。

2.3 结构体在内存中的布局

在这里插入图片描述

2.4 创建结构体和访问结构体的四种方式

直接访问

var 变量名 结构体名
var MyCat Cat 

方式二:

var 变量名 结构体名 = 结构体名{}
var MyCat Cat = Cat{} 

方式三:

var 变量名 *结构体名 = new(结构体名)
var MyCat *Cat  = new (Cat) 

方式四:

var 变量名 *结构体名 = &结构体名{}
var MyCat *Cat  =&Cat{}
  1. 第 3 种和第 4 种方式返回的是 结构体指针
  2. 结构体指针访问字段的标准方式应该是:(*结构体指针).字段名 ,比如(*person).Name =“tom”
  3. 但 go 做了一个简化,也支持 结构体指针.字段名,比如 person.Name =“tom”。更加符合程序员使用的习惯,go 编译器底层 对 person.Name 做了转化 (*person).Name。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

职场快速赢得信任

俗话说的好,有人的地方就有江湖。 国内不管是外企、私企、国企,职场环境都是变换莫测。 这里主要分享下怎么在职场中快速赢取信任。 1、找到让自己全面发展的方法 要知道,职场中话题是与他人交流的纽带,为了找到共同的话题&am…

elastic -job和springboot集成实现分布式调度5

一 案例介绍说明 1.1 案例介绍 基于 Spring boot 集成方式的而产出的工程代码,完成对作业分片的实现,文件数据备份采取更接近真实项目的数 据库存取方式。 1.分片设置 2.每个线程获取给自的类型 1.2 作业配置 zk的配置 二 操作说明 2.1 数据表的初始…

【单片机学习笔记】STC8H1K08参考手册学习笔记

STC8H1K08参考手册学习笔记 STC8H系列芯片STC8H1K08开发环境串口烧录 STC8H系列芯片 STC8H 系列单片机是不需要外部晶振和外部复位的单片机,是以超强抗干扰/超低价/高速/低功耗为目标的 8051 单片机,在相同的工作频率下,STC8H 系列单片机比传统的 8051约快12 倍速度…

讯飞星火知识库文档问答Web API的使用(二)

上一篇提到过星火spark大模型,现在有更新到3.0: 给ChuanhuChatGPT 配上讯飞星火spark大模型V2.0(一) 同时又看到有知识库问答的web api,于是就测试了一下。 下一篇是在ChuanhuChatGPT 中单独写一个基于星火知识库的内容…

机器学习库:pandas

☁️主页 Nowl 🔥专栏《机器学习实战》 《机器学习》 📑君子坐而论道,少年起而行之 文章目录 写在开头 基本数据格式 DataFrame 数据选取 iloc 数据描述 head describe 数据合并 merge 数据删除 drop drop删除多列 处理缺失…

LeetCode Hot100 236.二叉树的最近公共祖先

题目: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节…

基于U-Net的视网膜血管分割(Pytorch完整版)

基于 U-Net 的视网膜血管分割是一种应用深度学习的方法,特别是 U-Net 结构,用于从眼底图像中分割出视网膜血管。U-Net 是一种全卷积神经网络(FCN),通常用于图像分割任务。以下是基于 U-Net 的视网膜血管分割的内容&…

什么是分布式锁?Redis实现分布式锁详解

目录 前言: 分布式系统买票示例 引入redis做分布式锁 引入过期时间 引入校验id 引入lua脚本 过期时间续约问题 redlock算法 小结: 前言: 在分布式系统中,涉及多个主机访问同一块资源,此时就需要锁来做互斥控制…

[论文阅读]CBAM——代码实现和讲解

CBAM 论文网址:CBAM 论文代码:CBAM 本文提出了一种卷积块注意力模块(CBAM),它是卷积神经网络(CNN)的一种轻量级、高效的注意力模块。该模块沿着通道和空间两个独立维度依次推导注意力图&#x…

ehr人力资源管理系统(实际项目源码)

eHR人力资源管理系统:功能强大的人力资源管理工具 随着企业规模的不断扩大和业务需求的多样化,传统的人力资源管理模式已无法满足现代企业的需求。eHR人力资源管理系统作为一种先进的管理工具,能够为企业提供高效、准确、实时的人力资源管理…

GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHF

GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHF 文章目录 GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHFPretraining 预训练阶段Supervised FineTuning (SFT&#x…

基于51单片机交通灯夜间模式+紧急模式_易懂版_(仿真+代码_报告_讲解)

J029 51单片机交通灯_易懂版__夜间紧急(仿真代码_报告_讲解) 51单片机交通灯_易懂版_ 1 **讲解视频:**2 **功能要求**3 **仿真图:**4 **程序设计:**5 **设计报告**6 **资料清单&&下载链接:****资料下载链接&am…

超好玩C++控制台打飞机小游戏,附源码

我终于决定还是把这个放出来。 视频在这:https://v.youku.com/v_show/id_XNDQxMTQwNDA3Mg.html 具体信息主界面上都有写。 按空格暂停,建议暂停后再升级属性。 记录最高分的文件进行了加密。 有boss(上面视频2分47秒)。 挺好…

2023年【N1叉车司机】新版试题及N1叉车司机作业考试题库

题库来源:安全生产模拟考试一点通公众号小程序 N1叉车司机新版试题参考答案及N1叉车司机考试试题解析是安全生产模拟考试一点通题库老师及N1叉车司机操作证已考过的学员汇总,相对有效帮助N1叉车司机作业考试题库学员顺利通过考试。 1、【多选题】《中华…

Linux系统编程 day05 进程控制

Linux系统编程 day05 进程控制 1. 进程相关概念2. 创建进程3. exec函数族4. 进程回收 1. 进程相关概念 程序就是编译好的二进制文件,在磁盘上,占用磁盘空间。程序是一个静态的概念。进程即使启动了的程序,进程会占用系统资源,如内…

【服务器能干什么】二十分钟搭建一个属于自己的 RSS 服务

如果大家不想自己捣鼓,只是想尝尝鲜,可以在下面留言,我后台帮大家开几个账号玩一玩。 哔哩哔哩【高清版本可以点击去吐槽到 B 站观看】:【VPS服务器到底能干啥】信息爆炸的年代,如何甄别出优质的内容?你可能需要自建一个RSS服务!_哔哩哔哩_bilibili 前言 RSS 服务 市…

MySQL表连接

文章目录 MySQL内外连接1.内连接2.外连接(1)左外连接(2)右外连接 3.简单案例 MySQL内外连接 1.内连接 内连接的SQL如下: SELECT ... FROM t1 INNER JOIN t2 ON 连接条件 [INNER JOIN t3 ON 连接条件] ... AND 其他条件;说明一下…

2.5 逆矩阵

一、逆矩阵的注释 假设 A A A 是一个方阵,其逆矩阵 A − 1 A^{-1} A−1 与它的大小相同, A − 1 A I A^{-1}AI A−1AI。 A A A 与 A − 1 A^{-1} A−1 会做相反的事情。它们的乘积是单位矩阵 —— 对向量无影响,所以 A − 1 A x x A^{…

QT基础开发笔记

用VS 写QT ,设置exe图标的方法: 选定工程--》右键--》添加---》资源--》 QString 字符串用法总结说明 Qt QString 增、删、改、查、格式化等常用方法总结_qstring 格式化-CSDN博客 总结来说: QString 的 remove有两种用法,&am…

【C++】类和对象(下篇)

这里是目录 构造函数(续)构造函数体赋值初始化列表 explicit关键字隐式类型转换 static成员友元友元函数友元类 内部类匿名对象匿名对象的作用const引用匿名对象 构造函数(续) 构造函数体赋值 在创建对象时,编译器通…