# Go学习-Day5
文章目录
- map
- 增加和更新
- 删除
- 查询
- 遍历(for-range)
- map切片
- 关于哈希表遍历的一点看法
- 对map的key排序
- 结构体与OOP
- 声明、初始化、序列化
- 方法
- 工厂模式
- 个人博客:CSDN博客
map
-
map是一个key-value的数据结构,又称为字段或关联数组
-
Golang自带的map是哈希表
-
声明
-
import "fmt"func main() {var a map[int]intfmt.Println(a) } -
slice,map和func不能作为键值
-
声明map是不会分配内存的,初始化需要用make
-
import "fmt"func main() {var a map[int]inta = make(map[int]int, 3)//可以存放三个键值对fmt.Println(a) } -
Go的map的键值是没有顺序的
-
自动增长
-
func main() {a := make(map[int]int)a[1] = 2a[2] = 1fmt.Println(a) } -
直接初始化
-
func main() {a := map[int]int{1: 1,2: 2,//这里也要,}fmt.Println(a) }
增加和更新
- 直接给键值赋值即可
删除
-
delete(map, 1)//删除map键值为1的对,如果不存在不会操作 -
如果要完全清空
-
遍历key来删除,或者让map赋值一个新的map,给GC回收
查询
val, flag := mp[1] //flag是bool,找到是true,没找到是false,val是对应值
遍历(for-range)
-
func main() {a := map[int]int{1: 1,2: 2,}for k, v := range a {fmt.Println(k, v)}fmt.Println(a) }
map切片
- 同样slice的用法,注意map也要make就行,相当于在底层维护一个map类型的数组
关于哈希表遍历的一点看法
- 大概是这样的,在底层有一个迭代器链表,或者,有一个指针数组,每次存放一个指针,迭代器依次访问这些指针,但是在添加元素的时候, 会rehash,导致顺序变化。所以Go的设计者把他设置成无序,每次都打乱这个数组,防止程序员误用哈希map
对map的key排序
-
将键值追加到切片内,然后对切片排序
-
import ("fmt""sort" )func main() {mp := make(map[int]int, 10)mp[1] = 2mp[3] = 1mp[2] = 5mp[5] = 6var keys []int //切片for key, _ := range mp {keys = append(keys, key)}sort.Ints(keys)fmt.Println(keys) } -
map是引用类型
结构体与OOP
声明、初始化、序列化
-
go语言是用struct来面向对象的
-
声明
-
type Node struct {X intY int }func main() {var a Node//空间自动分配fmt.Println(a)} //输出{0 0} -
赋值
-
func main() {var a Nodea.X = 1a.Y = 2fmt.Println(a)} //输出{1 2} -
初始化
-
//方法一 a := Node{1, 2}//方法二 ptr *Node = new(Node) (*ptr).X = 1 (*ptr).Y = 2 //-------- func main() {var ptr *Node = new(Node)(*ptr).X = 1(*ptr).Y = 2fmt.Println(*ptr)} //---底层自动识别,这样也可以 func main() {var ptr *Node = new(Node)ptr.X = 1ptr.Y = 2fmt.Println(*ptr) } //方法三 var node *Node = &Node{} -
结构体的所有字段在内存中是连续的
-
两个结构体的字段类型完全相同的话可以强制类型转换
-
用type struct1 struct2给struct2取别名,相当于定义了一个新的类型,两者之间可以强制类型转换,但是不能直接赋值
-
struct的每个字段上可以写上一个tag,该tag可以通过反射机制获取,常见于序列化和反序列化
-
复习一个点,Go没有public和private,所以用首字母大写和小写来确定是公共的还是私有的
-
序列化:对象转json字符串
-
反序列化:json字符串转对象
-
动手
-
import ("encoding/json""fmt" )type Node struct {Name stringPassword string }func main() {a := Node{"aaaaaa","123456",}str, _ := json.Marshal(a)fmt.Println(a)fmt.Println(string(str)) } //输出 //{aaaaaa 123456} //{"Name":"aaaaaa","Password":"123456"} -
但是这种大写的变量很多客户端不习惯,所以使用tag,如果使用小写,就无法被结构体外部函数使用,无法序列化
-
import ("encoding/json""fmt" )type Node struct {Name string `json:"name"`Password string `json:"password"` }func main() {a := Node{"aaaaaa","123456",}str, _ := json.Marshal(a)fmt.Println(a)fmt.Println(string(str)) } //输出 //{aaaaaa 123456} //{"name":"aaaaaa","password":"123456"}
方法
-
方法是作用在指定类型上的函数
-
func (a Node) ok() {fmt.Println("ok") } //这个函数绑定给了Node //调用 var a Node p.ok() -
动手
-
import ("fmt" )type Node struct {Name string `json:"name"`Password string `json:"password"` }func (a Node) ok() {fmt.Println(a.Name) } func main() {a := Node{"aaaaaa","123456",}a.ok() } //输出了Node的名字 -
这个方法只能用指定类型来调用,不能直接调用
-
如果想要修改原来的参数,我们使用结构体指针,并且这更常用,不用深拷贝,速度更快
-
type Node struct {Name string `json:"name"`Password string `json:"password"` }func (a *Node) ok() {a.Name = "bbbb" } func main() {a := Node{"aaaaaa","123456",}a.ok()//编译器底层自动识别变为&afmt.Println(a) } -
可以通过实现String方法,可以自定义格式化输出
工厂模式
- 类似于构造函数,在结构体所在包下写相应构造的函数,返回结构体指针,这样就可以在结构体私有的情况下,在其他包调用这个函数直接返回结构体对象
相关文章:
# Go学习-Day5
文章目录 map增加和更新删除查询遍历(for-range)map切片关于哈希表遍历的一点看法对map的key排序 结构体与OOP声明、初始化、序列化方法工厂模式 个人博客:CSDN博客 map map是一个key-value的数据结构,又称为字段或关联数组 Gol…...
创建型(二) - 单例模式
一、概念 单例设计模式(Singleton Design Pattern):一个类只允许创建一个对象(或者实例),那这个类就是一个单例类。 优点:在内存里只有一个实例,减少了内存的开销,避免…...
基于swing的图书借阅管理系统java jsp书馆书籍信息mysql源代码
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于swing的图书借阅管理系统 系统有2权限࿱…...
Android相机-HAL-Rockchip-hal3
引言: 对于Android相机的 HAL层而言对上实现一套Framework的API接口,对下通过V4L2框架实现与kernel的交互。不同的平台会有不同的实现方案。主要是对Android HAL3的接口的实现。看看rockchip是怎么支持hal3的? 代码目录: hardw…...
基于Java+SpringBoot+vue前后端分离华强北商城二手手机管理系统设计实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...
【论文阅读】HOLMES:通过关联可疑信息流进行实时 APT 检测(SP-2019)
HOLMES: Real-time APT Detection through Correlation of Suspicious Information Flows S&P-2019 伊利诺伊大学芝加哥分校、密歇根大学迪尔伯恩分校、石溪大学 Milajerdi S M, Gjomemo R, Eshete B, et al. Holmes: real-time apt detection through correlation of susp…...
HTML 网页中 自定义图像单击或鼠标悬停时放大
HTML 网页中 自定义图像单击或鼠标悬停时放大 一:在悬停时更改 HTML 图像的大小 例子中,使用 CSS 样式;来设置每个图像元素的高宽 200px;以及 10px 边距,以便在图像周围留出空间。 使用 CSS 的 :hover 属性来添加悬停效…...
从程序员进阶到架构师再到CTO,该如何破解焦虑?
引言 我们生活的时代,变化太快,许多人在职业发展的道路上都会面临焦虑与迷茫。这种焦虑源自我们内心的不安,也来自于外部形势的变化。 对于技术从业者来说,焦虑并不会随着职业发展而自动消失,不同职场阶段会面临不同的…...
批量将excel文件转csv文件
要将Excel文件批量转换为CSV文件,并按照关键词汇总,可以使用Python中的pandas库来实现。下面是示例代码: import pandas as pd import os def excel_to_csv(file_path, output_folder): # 读取Excel文件 df pd.read_excel(file_pat…...
实现 CSS 文字渐变色效果
实现 当涉及到文字渐变色时,以下是一个更详细的用法示例。你可以使用 CSS 的 background-image,background-clip 和 text-fill-color 属性来实现: h1 {background-image: linear-gradient(to right, #ff0000, #00ff00, #0000ff);background-clip: text;-webkit-background-c…...
C++信息学奥赛1148:连续出现的字符
代码题解: #include <iostream> #include <string> using namespace std; int main() {int n;// 输入一个整数ncin>>n;cin.ignore();string str1;// 输入一行字符串getline(cin,str1);for(int i0;i<str1.length();i){int a0;for(int ji;j<…...
【笔记】岂不怀归:三和青年调查
三和青年的遭遇绝非孤例,他们是中国现代化和城市化进程中一些难以被城市容纳的群体的缩影。三和青年的“后备军”,是整整一代没有知识与技能的农村青年。本书对三和青年抱以人道主义的关怀与同情,并鼓励各界关注社会发展过程中被抛下的那一群…...
使用Mavon-Editor编辑器上传本地图片到又拍云云存储(Vue+SpringBoot)
需求:将本地的图片上传到服务器或者云存储中,考虑之后,这里我选的是上传到又拍云云存储。 技术背景: 前端:VueAjax 后端:SpringBoot 存储:又拍云云存储原理:Mavon-Editor编辑器有两个…...
QT使用QXlsx实现对Excel的创建与文字的存取 QT基础入门【Excel的操作】
准备:搭建环境引用头文件QT中使用QtXlsx库的三种方法 QT基础入门【Excel的操作】_吻等离子的博客-CSDN博客 #include "xlsxdocument.h"const QString ExcelName="./test.xlsx"; QTXLSX_USE_NAMESPACE // 添加Xlsx命名空间 1、初始化excel表格 注意!两…...
前端遇到困扰怎么办?10年前端在线帮您解决问题,只需一杯下午茶
前端遇到困扰怎么办?10年前端在线帮您解决问题,只需一杯下午茶...
c#值类型和引用类型
在C#中,变量可以是值类型或引用类型。下面是一些常见的值类型和引用类型 值类型: 基本数据类型:bool、byte、sbyte、char、short、ushort、int、uint、long、ulong、float、double、decimal 枚举类型:enum 结构体类型࿱…...
机器学习算法示例的收集;MetaAI编码工具Code Llama;“天工AI搜索”首发实测
🦉 AI新闻 🚀 Meta推出新一代AI编码工具Code Llama,助力程序员提高开发效率 摘要:Meta推出Code Llama,这是一个基于Llama 2语言模型打造的AI编码工具,能够生成新的代码并调试人类编写的工作。Code Llama可…...
大模型一、大语言模型的背景和发展
文章目录 背景模型1 文本LLM模型ChatGLMChatGLM2-6BChinese-LLaMA-Alpaca:Chinese-LLaMA-Alpaca-2:Chinese-LlaMA2:Llama2-Chinese:OpenChineseLLaMA:BELLE:Panda:Robin (罗宾):Fengshenbang-LM…...
Linux常用命令——dhcpd命令
在线Linux命令查询工具 dhcpd 运行DHCP服务器。 语法 dhcpd [选项] [网络接口]选项 -p <端口> 指定dhcpd监听的端口 -f 作为前台进程运行dhcpd -d 启用调试模式 -q 在启动时不显示版权信息 -t 简单地测试配置文件的语法是否正确的,但不会尝试执行任何网络…...
Apache和Nginx各有什么优缺点,应该如何选择?
Apache和Nginx各有什么优缺点,应该如何选择? Apache和Nginx都有各自的优点和缺点,选择应该根据您的具体需求而定。Nginx的优点包括:轻量级,与同等web服务相比,Nginx占用更少的内存和资源;抗并发…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...
高抗扰度汽车光耦合器的特性
晶台光电推出的125℃光耦合器系列产品(包括KL357NU、KL3H7U和KL817U),专为高温环境下的汽车应用设计,具备以下核心优势和技术特点: 一、技术特性分析 高温稳定性 采用先进的LED技术和优化的IC设计,确保在…...
