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 stringage  int
}func main() {var catVar CatcatVar.name = "小白猫"catVar.age = 1fmt.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.mzph.cn/news/175019.shtml

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

相关文章

Linux解压缩命令 tar -zxvf 压缩-zcvf 到指定文件夹-C

Linux解压缩命令 tar -zxvf 压缩-zcvf 到指定文件夹-C tar -zxvf x.tar.gz 解压提取 x.tar.gztar -zcvf x.tar.gz x.source 将 x.source 压缩打包为 x.tar.gztar -zxvf x.tar.gz --directory /tmp 解压提取 x.tar.gz 到 /tmp 文件夹 解压提取 x.tar.gz 到当前文件夹 横杆(减…

C语言错误处理之sterror和perror函数以及断言处理方式

目录 前言 sterror函数 perror函数 断言处理方式 前言 在错误处理一中,我们解释了C语言三种处理方式中的错误号处理方式,这一篇我们在基于上一篇的基础上加入了sterror函数与perror函数,以及断言处理方式的内容...... sterror函数 包含…

sql优化的知识点?

SQL优化是提升数据库性能的重要手段,以下是SQL优化的详细知识点: 正确使用索引:索引是加速数据检索的关键因素,可以通过合理的索引设计来提升查询性能。例如,在频繁使用的列上创建索引,使用联合索引等。 避…

fastsocket提升nginx CPS性能分析

fastsocket是针对单机网络性能优化,提升单机的cps。 提升现在单机7LB服务的性能,预计cps的性能提升一倍。 内核对nginx的性能瓶颈损耗主要在内核的三把锁。 1. accpet的全局队列的sk_lock锁 2. new_inode中的全局inode_lock锁 3. sock_alloc_file中的…

【每日一题】子数组的最小值之和

文章目录 Tag题目来源题目解读解题思路方法一:贡献法单调栈 写在最后 Tag 【贡献法】【单调栈】【数组】【2023-11-27】 题目来源 907. 子数组的最小值之和 题目解读 计算整数数组的连续子数组中最小值的和。 解题思路 本题朴素的解决思想是求出所有的连续子数组…

SQL函数使用大全

SQL函数使用大全 在数据库管理中,SQL函数是一种强大的工具,它们可以帮助我们处理数据,进行复杂的计算,甚至改变数据的显示方式。本文将介绍两种主要的SQL函数:Aggregate函数和Scalar函数,以及它们的使用方…

6.golang函数

函数是执行特定任务的代码块。函数接受输入,对输入执行一些计算,然后生成输出。 函数声明 在 go 中声明函数的语法是: func name(parameter) (result-list){//body }函数声明以func关键字开头,后跟name(函数名)。在括号中指定参…

小航助学题库蓝桥杯题库stem选拔赛(21年1月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSD…

SQL Server:流程控制语言详解

文章目录 一、批处理、脚本和变量局部变量和全局变量1、局部变量2、全局变量 二、顺序、分支和循环结构语句1、程序注释语句2、BEGIN┅END语句块3、IF┅ELSE语句4、CASE语句5、WHILE语句6、BREAK和CONTINUE语句BREAK语句CONTINUE语句 三、程序返回、屏幕显示等语句1、RETURN语句…

Python continue的用法详解与转义字符及用法

Python continue的用法详解 continue 的功能和 break 有点类似,区别是 continue 只是忽略当次循环的剩下语句,接着开始下一次循环,并不会中止循环;而 break 则是完全中止循环本身。 如下程序示范了continue 的用法: # …

谈谈一个异或交换算法

以下全部用c举例 int a[10] {0,1,2,3,4,5,6,7,8,9};我们想交换数组a中第5个和第6个的值&#xff0c;通常想到的做法是创建一个中间变量作为中转&#xff0c;如下&#xff1a; #include<stdio.h>void swap2num(int a[], int i, int j) {int tmp a[i];a[i] a[j];a[j] …

工程数学笔记 | 傅里叶级数/变换的本质理解

以下内容纯属个人学习记录&#xff0c;难免有误&#xff0c;欢迎指正~ 引子 虽已工作数宰&#xff0c;但当因为工作的需要再次碰到傅里叶级数/变换相关的知识时是还是难免汗流浃背&#xff0c;读书时的痛苦的回忆涌上心头&#xff0c;果然曾经欠下的总归是要偿还的&#xff0c…

Python基础语法之学习print()函数

Python基础语法之学习print函数 1、代码2、效果 1、代码 print("Hello World") print("Hello World1","Hello World2") print("Hello World1\n","Hello World2") print("Hello World",end" 默认结束符是行号…

传输层协议[精选]

网络: 跨主机通信. 互联网通信: 两点之间的通信路径有无数条. 集线器: 把一根网线差出来两根,但是同一时刻只能有一根线跑.交换机: 组建局域网.路由器: 本质就是将两个局域网连接起来 交换机和路由器之间的区别越来越模糊. 调制解调器: 使用电话线上网的时候,需要将电话线的模…

处理数据中的缺失值--填充缺失值

填充指的是利用现有知识/数据来确定缺失的数量值并填充的行为。我们有几个选择&#xff0c;最常见的是用此列其余部分的均值填充缺失值&#xff1b; 我们可以看到原始的数据集中有五行数据的plasma_glucose_concentration有缺失值&#xff1b; print(pima[plasma_glucose_con…

pandas 将DataFrame 转为txt文本,去除引号问题

法一(推荐)&#xff1a; import numpy as np np.savetxt(file.txt, df[列名]., fmt "%s")法二 此方法会导致原文中多 escapechar’ ’ 这种空格 import csv df[列名].to_csv(file.txt, sep , indexFalse, headerFalse, quotingcsv.QUOTE_NONE,escapechar )参考&am…

c++容器详解Vector、deque、list、set、multiset、map、multimap、queue、stcak、Array

容器 数据结构描述实现头文件向量(vector)连续存储的元素<vector>列表(list)由节点组成的双向链表,每个结点包含着一个元素<list>双向队列(deque)连续存储的指向不同元素的指针所组成的数组<deque>集合(set)由节点组成的红黑树,每个节点都包含着一个元素,…

C++:对象模型和this指针

对象模型&#xff1a; 成员变量和成员函数分开存储 在C中&#xff0c;类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 空对象占用空间&#xff1a; 1字节 C编译器会给每个空对象也分配一个字节空间&#xff0c;是为了区分空对象占内存的位置 每个…

根据密码构成规则检测密码字符串

从键盘输入密码字符串&#xff0c;程序根据给定密码构成规则检测并给出对应提示。 (笔记模板由python脚本于2023年11月27日 19:27:47创建&#xff0c;本篇笔记适合熟悉Python字符串str对象的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.…

Android12之logcat日志显示颜色和时间(一百六十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…