【Go语言入门:Go语言的数据结构】
文章目录
- 3.Go语言的数据结构:
- 3.1. 指针
- 3.2. struct(结构体)
- 3.3. Map(映射,哈希)
3.Go语言的数据结构:
简介:
在Go语言中,数据结构体可以分为四种类型:基础类型、聚合类型、引用类型和接口类型。下面是对这四种类型的介绍:
- 基础类型:包括整型(有符号和无符号整数)、浮点数、复数、字符串(由不可变的字节序列构成)、布尔值(只有true和false两个值)。
- 聚合类型:包括数组和结构体。其中,结构体是由任意个任意类型的变量组合在一起的数据类型。
- 引用类型:包括指针、Slice(是一个拥有相同元素的可变长度序列)、map、function和channel。
- 接口类型:用于定义接口,实现接口可以获得多态性。
其中基础类型比较简单就不过多介绍,重点是其他几种类型
3.1. 指针
在 Go 语言中,指针是一种用于引用其他变量的变量。通过使用指针,你可以间接访问或修改指向变量的值。
- 指针的声明使用*操作符,例如:
var x int = 10
var p *int = &x
在上面的示例中,x是一个整数变量,而p是一个指向整数的指针变量。通过&x,将x的地址赋值给p。
- 使用指针可以通过*操作符来间接访问指向变量的值:
fmt.Println(*p)
通过*p,可以获取p所指向变量x的值。
- 指针还可以用于修改指向变量的值:
*p = 20
通过*p = 20,将 20 赋值给p所指向变量x。
需要注意的是,使用指针时要确保指针指向的变量类型与指针的类型相匹配,否则会导致编译错误。
3.2. struct(结构体)
在 Go 语言中,结构体(struct)是一种用户自定义的数据类型,可以用来组织多个不同类型的数据成员。
- 结构体的声明使用struct关键字,例如:
type Person struct {Name stringAge int
}
在上面的示例中,定义了一个名为Person的结构体,它包含了两个数据成员:Name(字符串类型)和Age(整数类型)。
- 创建结构体变量并赋值:
p := Person{Name: "Alice",Age: 25,
}
- 可以通过点号操作符来访问和修改结构体成员的值:
fmt.Println(p.Name)
fmt.Println(p.Age) p.Age = 30fmt.Println(p.Age)
- 结构体还可以用于嵌套其他结构体:
type Address struct {Country stringCity string
}type Person struct {Name stringAge intAddress
}
在上面的示例中,Person结构体包含了一个嵌套的Address结构体。
- 结构体还可以实现方法:
type Person struct {Name stringAge int
}func (p Person) SayHello() {fmt.Println("Hello, my name is", p.Name)
}
在上面的示例中,为Person结构体实现了一个名为SayHello的方法。
类比其他语言,struct相当于java中的类,区别是在go语言中struct中只写变量,并不写方法,具体含有的方法是根据方法在其他地方添加给他,具体看方法的介绍
3.3. Map(映射,哈希)
在 Go 语言中,映射(map)是一种无序的键值对数据结构。它用于存储一组键值对,其中键可以是任何类型,而值可以是任何类型。
- 映射的声明使用map关键字,例如:
var m map[string]int
在上面的示例中,创建了一个名为m的空映射,其中键的类型为字符串,值的类型为整数。
- 向映射中添加键值对:
m["key"] = value
- 通过键来访问映射中的值:
value, ok := m["key"]
- 使用delete函数来删除映射中的键值对:
delete(m, "key")
- len函数返回映射中键值对的数量:
count := len(m)
需要注意的是,映射中的键必须是可哈希的,因为映射是基于哈希表实现的。这意味着你不能使用函数、切片或映射作为映射的键。
今天先更新这么多,下次补全切片与数组,channel,接口等。
相关文章:
【Go语言入门:Go语言的数据结构】
文章目录 3.Go语言的数据结构:3.1. 指针3.2. struct(结构体)3.3. Map(映射,哈希) 3.Go语言的数据结构: 简介: 在Go语言中,数据结构体可以分为四种类型:基础类型、聚合类型、引用类型…...
QT designer的ui文件转py文件之后,实现pycharm中运行以方便修改逻辑,即添加实时模板框架
为PyCharm中的实时模板,你需要遵循以下步骤: 打开PyCharm的设置: 选择 File > Settings(在macOS上是 PyCharm > Preferences)。 导航到实时模板: 在设置中找到 Editor > Live Templates。 添加新的模板组 (可选): 为了…...
什么是负载均衡?
负载均衡是指在计算机网络领域中,将客户端请求分配到多台服务器上以实现带宽资源共享、优化资源利用率和提高系统性能的技术。负载均衡可以帮助小云有效解决单个服务器容量不足或性能瓶颈的问题,小云通过平衡流量负载,使得多台服务器能够共同…...
Python和Java的优缺点
Python的优点: 简单易学:Python的语法简洁清晰,易于学习和理解。丰富的库和框架:Python拥有庞大的标准库和活跃的开源社区,可以快速使用各种功能强大的库和框架,比如NumPy、Pandas、Django等。可读性强&am…...
AES - 在tiny-AES-c基础上封装了2个应用函数(加密/解密)
文章目录 AES - 在tiny-AES-c基础上封装了2个应用函数(加密/解密)概述增加2个封装函数的AES库aes.haes.c在官方测试程序上改的测试程序(用来测试这2个封装函数)END AES - 在tiny-AES-c基础上封装了2个应用函数(加密/解密) 概述 在github山有个星数很高的AES的C库 tiny-AES-c …...
51和32单片机读取FSR薄膜压力传感器压力变化
文章目录 简介线性电压转换模块51单片机读取DO接线方式51代码实验效果 32单片机读取AO接线方式32代码实验效果 总结 简介 FSR薄膜压力传感器是可以将压力变化转换为电阻变化的一种传感器,单片机可以读取然后作为粗略测量压力(仅提供压力变化,…...
【maven】pom.xml 文件详解
有关 maven 其他配置讲解参考 maven 配置文件 setting.xml 详解 pom.xml 文件是 Maven 项目的核心配置文件,其中包含了项目的元数据、构建配置、依赖管理等信息。以下是一个 pom.xml 文件的主要部分: <?xml version"1.0" encoding"U…...
SpringMVC源码解析——DispatcherServlet初始化
在Spring中,ContextLoaderListener只是辅助功能,用于创建WebApplicationContext类型的实例,而真正的逻辑实现其实是在DispatcherServlet中进行的,DispatcherServlet是实现Servlet接口的实现类。Servlet是一个JAVA编写的程序&#…...
搞定Apache Superset
踩雷了无数次终于解决了Superset的一系列问题 现在是北京时间2023年12月27日,亲测有效。 Superset概述 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用,可对接各种数据源,包括很多现代的大数据分析引擎ÿ…...
【每日试题】java面试之ssm框架
以下是20道常见的SSM(SpringSpring MVCMyBatis)面试题目和答案: 什么是SSM框架? SSM是指SpringSpring MVCMyBatis的组合,它是Java Web开发中常用的轻量级框架集合。 介绍一下SSM框架各个组件的作用? Sprin…...
Flutter 疑难杂症集合
一. Flutter集成uni小程序sdk 1. 手机连接电脑测试打开uni小程序没问题,打包成apk后debug编译下的apk也没问题,但就是release编译的apk包打不开小程序。 报错情景:点击后页面会闪现一下黑色的背景,然后又跳转回了点击之前的页面。…...
PHP序列化总结1--序列化和反序列化的基础知识
序列化和反序列化的作用 1.序列化:将对象转化成数组或者字符串的形式 2.反序列化:将数组或字符串的形式转化为对象 为什么要进行序列化 这种数据形式中间会有很多空格,不同人有不同的书写情况,可能还会出现换行的情况 为此为了…...
【Linux】 last 命令使用
last 命令 用于检索和展示系统中用户的登录信息。它从/var/log/wtmp文件中读取记录,并将登录信息按时间顺序列出。 著者 Miquel van Smoorenburg 语法 last [-R] [-num] [ -n num ] [-adiox] [ -f file ] [name...] [tty...]last 命令 -Linux手册页 选项及作用…...
Git 分布式版本控制系统(序章1)
第一章 Git 分布式版本控制系统 为什么学Git? 某些企业面试需要掌握Git,同时,也方便管理自己的Qt项目。 一、Git 客户端下载(Windows) 下载地址 https://gitee.com/all-about-git#git-%E5%A4%A7%E5%85%A8 二、Git 的特点 分支…...
给WordPress网站添加返回顶部按钮
给WordPress网站底部添加一个按钮,点它就可以现实快速返回到顶部。有两种方法可以现实,一种是通过安装相关插件来实现。另外一种方式就是以纯属代码的方式来实现。 给WordPress网站底部添加一个按钮,点它就可以现实快速返回到顶部。有两种方…...
App Inventor 2 接入短信服务,实现短信验证码功能
发送短信验证码功能一般都是基于短信平台提供的sdk进行调用,这里是基于阿里云短信平台进行的开发,阿里云短信平台接入步骤请点此参考。 App Inventor 2拓展提供的函数如下: 主要提供2个函数,生成随机位数的数字随机码 和 发送短信…...
Linux环境grep搜索方法记录
1 grep grep 命令,用来搜索字符串所在位置,可以具体到不同文件,不同行; 在Linux 下,查看命令释义如下 zhaocubuntu2004:~$ grep --help Usage: grep [OPTION]... PATTERNS [FILE]... Search for PATTERNS in each FI…...
C语言-破解密码
题目描述 密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。 假设老王原来一个BBS上的密码为zvbo941987,为了方便记忆,他通过一种算法把这个密码变换…...
ffmpeg 解码文件时的时间戳问题
实时流和普通文件 1 实时流 实时流编码时,我们一般不进行b帧编码,但是文件存储时为了减小大小,会增加b帧,实时流只带了I,P帧,那就会好很多 2 普通文件 很多文件带了b帧,所以要使用解码时间去同…...
Java企业电子招投标系统源代码,支持二次开发,采用Spring cloud框架
在数字化采购领域,企业需要一个高效、透明和规范的管理系统。通过采用Spring Cloud、Spring Boot2、Mybatis等先进技术,我们打造了全过程数字化采购管理平台。该平台具备内外协同的能力,通过待办消息、招标公告、中标公告和信息发布等功能模块…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
