Golang中结构体Struct

2023-11-08

前言

这里总结的Golang 笔记只适合有点编程基础的人看,比如Java

往期内容:

  1. Golang学习 【day1】变量、类型
  2. Golang学习,指针,循环控制相关
  3. 循环结构控制、包函数的使用
  4. 异常处理、数组
  5. 老奶奶可以看懂的切片
  6. 老奶奶可以看懂系列之—Golang的Map映射

结构体Struct

面向对象

面向对象程序设计(OOP)就是将现实世界中的实物抽象为程序之中的对象。

Golang与Java面向对象区别

  • 面向对象编程 OOP,与传统的面向编程有区别,并不是纯粹的面向编程对象语言,golang支持面向对象编程特性。
  • Golang之中没有Class,只有struct与class功能一样。
  • golang去掉传统面向对象编程语言继承、方法重载、构造函数和析构函数、隐藏的this指针。
  • Golang之中有继承、封装、多态的特性,知识实现方式不同,通过匿名字段来实现。

Struct使用

Struct介绍

结构体成员:

  • 字段拥有自己的类型和值;
  • 字段名必须唯一;
  • 字段的类型也可以是结构体,甚至是字段所在结构体的类型。

Struct结构

type typeName struct{
    fieldName1 type
    fieldName2 type
}

通过如上方式声明一个结构体Struct
type就是类似int、float等类型,在没有初始化的时候,引用类型默认值是nil,值类型就是变量文章里讲的默认值。

Struct四种声明类型

package main

type Student struct {
	id int
	name string
	age int
}

func main() {
	// 方式1
	stu1 := Student{1,"James",22}

	// 方式2
	var stu2 Student
	stu2.name = "Kobe"

	// 方式3
	var stu3 *Student = new(Student)
	(*stu3).name = "Curry"
	stu3.name = "Curry" // 这种方式底层会处理为上面这种

	// 方式4
	var stu4 *Student = &Student{} // {}这个里面可以给字段赋值
	stu4.name = "Scott"
}

后面两种方式,Golang在编译的时候会将stu转换为*stu形式。

Struct使用细节

Struct是一个值类型,将一个Struct1赋值给一个新的Struct2,然后新的Struct2中的i值改变为2,实际就是在内存中重新开辟一个空间,把Struct1中信息复制过来,然后将i变更。
以下为内存图
在这里插入图片描述
就是结构体之内的空间时连续的,但是结构体指针指向的空间不是连续的。

结构体类型

结构体进行type重新定义(相当于取别名),Golang认为新的数据类型,但是相互之间可以转换

type Student struct {
	name string
	id int
}

type stu Student

type integer int

func main() {
	var stu1 Student
	var stu2 stu
	stu2 = stu(stu1)
	fmt.Println(stu2)
	fmt.Printf("%T %T", stu1,stu2)

	fmt.Println()

	var i integer = 10
	var j int = 20
	fmt.Printf("%T %T", i,j)
}

在这里插入图片描述
从上述可以看出重定义之后,结构体的类型就会发生变化,如果要赋值的话必须强转,如果两个结构体内字段属性一致,那么可以直接将结构体变量进行赋值不需要进行强制转换。

Struct序列化

struct 的每个字段,可以写一个tag 该tag可以通过反射机制获取,常见使用场景就是序列化和反序列化

// 改成小写下面返回空串,json包里访问不了其他包中的字段
type Monster struct {
	Name string `json:"name"`
	Age int `json:"age"`
	Skill string `json:"skill"`
}

func main() {
	monster := Monster{"牛魔王", 20,"芭蕉扇"}
	jsonStr, _ := json.Marshal(monster)
	fmt.Println(string(jsonStr))
}

如上如果不加tag的话,返回的字段名就是大写。如果不加tag字段名小写返回空字符串,原因是json包访问不到当前包Struct中属性。

如果文章内容有错误,还请大佬们指导,防止误人子弟。继续冲冲冲!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Golang中结构体Struct 的相关文章

  • 【计算机毕业设计】北工国际健身俱乐部

    本系统为会员而设计制作北工国际健身俱乐部 旨在实现北工国际健身俱乐部智能化 现代化管理 本北工国际健身俱乐部管理自动化系统的开发和研制的最终目的是将北工国际健身俱乐部的运作模式从手工记录数据转变为网络信息查询管理 从而为现代管理人员的使用提
  • 【计算机毕业设计】SpringBoot+Vue.js协同过滤算法美食推荐小程序 _7tr93

    伴随着我国社会的发展 人民生活质量日益提高 于是对各种需求进行规范而严格是十分有必要的 所以许许多多的微信小程序应运而生 此时单靠人力应对这些事务就显得有些力不从心了 所以本论文将设计一套协同过滤算法美食推荐小程序 帮助美食推荐进行美食分类
  • 华为OD统一考试 Python【数字转化】

    描述 我们想要一种特殊的整数编码方式 让数字小的时候 编码占的空间也小 编码的方法如下 我们每7位组成一部分来编码 在每个字节里 用前7位来存数字 如果后面还有数据 最高的那一位就是1 否则就是0 数据要按小端序保存 也就是说 小的数据部分
  • 【无迹卡尔曼滤波】不确定和间接测量的非线性动力系统识别研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 计算机Java项目|尤文图斯足球俱乐部网上商城系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 计算机Java项目|电影购票系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 计算机Java项目|基于SSM的篮球系列网上商城设计与实现

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 面试官:分库分表后如何生成全局ID?

    分库分表后就不能使用自增 ID 来作为表的主键了 因为数据库自增 ID 只适用于单机环境 但如果是分布式环境 是将数据库进行分库 分表或数据库分片等操作时 那么数据库自增 ID 就会生成重复 ID 从而导致业务查询上的问题 所以此时 可以使
  • 详解Java信号量-Semaphore

    第1章 引言 大家好 我是小黑 今天 咱们一起来深入探讨一下Semaphore 在Java中 正确地管理并发是一件既挑战又有趣的事情 当谈到并发控制 大家可能首先想到的是synchronized关键字或者是ReentrantLock 但其实
  • 【自适应滤波】一种接近最佳的自适应滤波器,用于突发系统变化研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 【go语言】结构体数据填充生成md错误码文件

    这里使用pongo2这个模版引擎库进行md文件渲染 GitHub flosch pongo2 Django syntax like template engine for Go package main import fmt github
  • 15天学会Python深度学习,我是如何办到的?

    陆陆续续有同学向我们咨询 Python编程如何上手 深度学习怎么学习 如果有人能手把手 一对一帮帮我就好了 我们非常理解初学者的茫然和困惑 大量视频 书籍 广告干扰了大家的判断 学习Python和人工智能 成为内行人不难 为此 我们推出了
  • 【心电图基线估计和去噪方法的群稀疏正则化】带有群稀疏正则化的心电图基线估计和去噪(Matlab实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 基于节点电价的电网对电动汽车接纳能力评估模型研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据
  • 学Python,一个月从小白到大神?看你怎么学!

    Python是一门超强大而且超受欢迎的编程语言 它被用在各种领域 比如网站开发 数据分析 人工智能和机器学习 学会Python会给你创造很多职业机会 所以绝对是值得一试的 但你有没有过这样的梦想 一个月时间 从Python小白变成Pytho
  • 【C#】基础巩固

    最近写代码的时候各种灵感勃发 有了灵感 就该实现了 可是 实现起来有些不流畅 总是有这样 那样的卡壳 总结下来发现了几个问题 1 C 基础内容不是特别牢靠 理解的不到位 导致自己想出来了一些内容 但是无法使用正确的C 代码实现 导致灵感无法
  • 2024最强Java面试八股文合集(持续更新)

    今天要谈的主题是关于求职 求职是在每个技术人员的生涯中都要经历多次 对于我们大部分人而言 在进入自己心仪的公司之前少不了准备工作 有一份全面细致 面试题 将帮助我们减少许多麻烦 在跳槽季来临之前 特地做这个系列的文章 一方面帮助自己巩固下基
  • 【安全】Java幂等性校验解决重复点击(6种实现方式)

    目录 一 简介 1 1 什么是幂等 1 2 为什么需要幂等性 1 3 接口超时 应该如何处理 1 4 幂等性对系统的影响 二 Restful API 接口的幂等性 三 实现方式 3 1 数据库层面 主键 唯一索引冲突 3 2 数据库层面 乐
  • 计算机Java项目|人体健康信息管理系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • Spring Boot引起的“堆外内存泄漏”排查及经验总结

    Spring Boot引起的 堆外内存泄漏 排查及经验总结 背景 为了更好地实现对项目的管理 我们将组内一个项目迁移到MDP框架 基于Spring Boot 随后我们就发现系统会频繁报出Swap区域使用量过高的异常 笔者被叫去帮忙查看原因

随机推荐

  • RIP综合实验

    配置IP RI r1 int g 0 0 0 r1 GigabitEthernet0 0 0 ip address 12 0 0 1 24 Apr 6 2022 13 18 35 08 00 r1 01IFNET 4 LINK STATE
  • selenium数据提取学习(1)

    import time from selenium import webdriver 设置浏览器 driver webdriver Edge 控制浏览器访问地址 driver get https www baidu com time sle
  • 【DTale】数据分析强大工具DTale的使用

    简单介绍 使用dtale 启动 数据加载 功能介绍 主菜单选项 0 切换语言 1 创建列 2 汇总数据 3 缺失率分析 4 绘图 5 高亮功能 6 代码导出 数据导出 列菜单功能 1 冻结 2 隐藏和删除 3 替换和类型转换 4 描述性统计
  • tomcat的多实例和动静分离

    多实例 在一台服务器上有多个tomcat服务 配置成全局变量 方便后面传参 安装tomcat 安装好 jdk后编译安装tomcat cd opt tar zxvf apache tomcat 9 0 16 tar gz mkdir usr
  • android蓝牙键盘光标,罗技K810背光蓝牙键盘快捷键大全

    最近入手了一款罗技K810背光蓝牙键盘 该怎么使用键盘的快捷键实现快捷操作呢 下面我们就来看看罗技K810背光蓝牙键盘快捷键大全 需要的朋友可以参考下 一 PC版键盘上的WIN键相当于MAC iOS系统的command键 文本输入状态下 S
  • WiFi6技术细节简介

    WiFi6技术细节简介 WiFi的历史发展 WiFi历史发展中技术的迭代 WiFi6的新型技术优势 OFDMA 双向MU MMIO 多用户多输入输出 1024QAM 空间频率复用SR BSS Coloring WAP3 实际使用带来的用户体
  • docker: Error response from daemon: could not select device driver ““ with capabilities: [[gpu]].

    需要安装nvidia container toolkit或nvidia container runtime 包含nvidia container toolkit distribution etc os release echo ID VER
  • 使用 React Hooks + mock + antd构建一个完整且漂亮的 todoList

    实现效果 搭建项目 使用 create react app 快速创建一个项目 删除不必要的文件 保留文件如下 目录说明 index js 项目入口文件 index less 样式 mock js 模拟 todo 数据 TodoList js
  • 6基于二阶锥规划的主动配电网最优潮流求解

    matlab代码 6 基于二阶锥规划的主动配电网最优潮流求解 参考文献 主动配电网多源协同运行优化研究 乔珊 摘要 最优潮流研究在配 电网规划运行 中不可或缺 且在大量分布式能源接入 的主动配 电网环境下尤 为重要 传统的启发式算法 在全局
  • statsmodels.regression.linear_model.RegressionResults

    statsmodels regression linear model RegressionResults class statsmodels regression linear model RegressionResults model
  • vue上传文件夹,将file类型转为binary类型传参到后台

  • ES6-promise小技巧

    Promise all 从Promise all返回的主promise在所有成员promise都完成后才会执行 如果这些promise中有任何一个被拒绝 reject error 住promise就会被拒绝 并丢弃来自其他所有promise
  • 【Jupyter Notebook】安装及使用

    知识目录 前言 一 Jupyter Notebook安装使用 1 1 Jupyter Notebook的三种打开方式 1 点击Anaconda Prompt打开 2 点击Jupyter Notebook打开 3 使用Powershell打开
  • [计算机毕业设计]机器学习的数据驱动股票价格预测

    前言 大四是整个大学期间最忙碌的时光 一边要忙着准备考研 考公 考教资或者实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度的 对本科同学来说是充满挑战 为帮助大
  • 算法设计与分析——0/1背包问题

    问题描述 给定n个重量为 w1 w2 wn 价值为 v1 v2 vn 的物品和一个容量为C的背包 0 1背包问题是求这些物品中的一个 最有价值的子集 并且能够装入背包中 基本算法思想 暴力法 用暴力法解决0 1背包问题 需要考虑给定n个物品
  • 概率密度函数

    概率密度函数 Probability Density Function 简称PDF 是描述随机变量的概率分布的函数 它对于连续型随机变量来说是非常重要的概念 PDF可以用来描述变量在不同取值上的概率分布情况 对于一个连续型随机变量X 其概率
  • 记忆化搜索 (蒟蒻练习生)

    定义 记忆化搜索是一种通过记录已经遍历过的状态的信息 从而避免对同一状态重复遍历的搜索实现方式 因为记忆化搜索确保了每个状态只访问一次 它也是一种常见的动态规划实现方式 引入 题目见 NOIP2005 采药 朴素的 DFS 做法 很容易实现
  • Python web自动化测试 —— 文件上传

    文件上传三种方式 一 查看元素标签 如果是input 则可以参照文本框输入的形式进行文件上传 方法 和用户输入是一样的 使用send keys 1 2 3 4 5 步骤 1 找到定位元素 2 输入文件路径 ele driver find e
  • ios android 字体大小,并排文字在ios上字体变大,安卓上正常显示

    IOS页面 安卓页面 复现代码 公告 疑情公告 notice notice export default data return notice 中民筑友码垛机作业区域一号工位发 疑似闯入行为中民筑友码垛机作业区域一号工位发 疑似闯入行为 发
  • Golang中结构体Struct

    前言 这里总结的Golang 笔记只适合有点编程基础的人看 比如Java 往期内容 Golang学习 day1 变量 类型 Golang学习 指针 循环控制相关 循环结构控制 包函数的使用 异常处理 数组 老奶奶可以看懂的切片 老奶奶可以看