go语言学习
字典(映射)类型 (Map)
以键值对为元素去存储元素
Map的特点:
键不能重复。
键必须是(int,bool,float,string,array)这些可以哈希的 (如果自定义类型想要作为键,需要自定义比较运算符 ‘==’,‘!=’)
存储是无序的
Map的声明和初始化
//1,简短声明的创建
info := map [键的类型] 值的类型{ 键1:值1,键2:值2..... }
info [键1] //可以通过键为下标来访问值,可以对其进行修改,赋值,获取
//2,通过make 来声明 创建Map
info := make (map[int ] int , 大小)//这里的大小可以选填,表示容量,但是这个只是个大概值,最后生成的大小比这个数大
//3,声明一个map然后整体赋值
var info map [int ] int
//这个只是个声明,如果是这样声明,无法赋值
info [1]=10 //这个会报错,因为内部是nil
/只能整体的去赋值
info : = make(map [int ] int )
info [10]=100
var info1 map [int ] int
//info1 = info
//4,通过new来声明
info := new (map [ int ] int)
//这里面返回的指针也是指向空的,所以也只能整体赋值
///
info : = make(map [int ] int )
info [10]=100
info1 := new (map [ int ] int)
//info1 = &info //这里的info的地址
map的一些功能
1,长度
info := make (map [int ] int ,10)
info[1]=10
info[10]=100
fmt.Println(len (info))//这里会打印 2,而不是 10
2,增加
//直接使用[]来增加键值对
info := make (map [int ] int ,10)
info[1]=10
3,修改
//直接使用[]来修改键值对
info := make (map [int ] int ,10)
info[1]=10
info[1]=100
4,删除
info := make (map [int ] int ,10)
info[1]=10
delete(info,1) //第一个参数是map,第二个是想要删除的键
6,for range 来遍历map
info := make (map [int ] int ,10)
info[1]=10
info[10]=100
for key,val := range info { //如果这里只有一个元素,只能默认拿到键
fmt.Println(val)
}
7,嵌套
7.1值的嵌套,这里的值可以是任意类型
info := make (map[int ] int )
info := make (map[int ] string )
info := make (map[int ] float)
info := make (map[int ] [ 10 ] int )
info := make (map[int ] [ ] int )
info := make (map[int ] map [ string ] int )
info := make ( map [int ] [4] map[ string ] int ) //每个键指向一个 map的数组
.........
7.2 键的嵌套
这里的键只能是 可以'==' 和 '!='的,所以 可以是数组,int,float ,string,bool,
这里的数组的元素也必须是上述的元素
map的底层
如上图,创建map的时候会先创建一个 hmap,这里的count表示内部的键值对数,B表示2^B个桶,buckets就是桶数组,hash0是哈希因子
这里的Bmap 才是元素内容存储的真正主体
1,初始化
info := make (map [ int ] int ,10)
先回创建一个hmap,然后生成一个哈希因子 赋值给hmap中的hash0,
根据给定的10,会计算出一个大概的B
根据B来创建buckets中的bmap
:如果B<4,就会创建 2^B个桶
:如果 B>=4,会创建 2^B 个标准桶 + 2^(B-4)个溢出桶
如果一个桶中的8个元素都存储满了,那么就会用链表的方式去来连接一个新的桶
2,写数据
info [1]=10
根据计算出来的哈希因子和键值1 生成一个哈希值
然后根据哈希值的后B位数 a,然后由这a决定放在哪个桶
然后将哈希值的高8位存储在tophash,用于之后的辨认,然后键和值分别存入key和value
如果溢出就去overflow中找
最后hmap的个数++
3,读数据
根据计算出来的哈希因子和键值1 生成一个哈希值
然后根据哈希值的后B位数 a,然后由这a决定在哪个桶找数据
先去tophash中找,如果没有找到就去overflow中找,没找到就
4,map扩容
(1)当map的数据个数/桶的个数 >6.5(平均每个桶都存储了6.5个以上)会翻倍扩容
如果是翻倍扩容的话, buckets会指向新的桶,oldbuckets指向原来的桶,然后去慢慢迁移
(2)如果太多的溢出桶也会触发等量扩容
一,B<=15,溢出桶使用量>=2^B,触发等量扩容
二,B>15,溢出桶数量>=2^15 ,触发等量扩容
总结就是使用的溢出桶数量 >= min(2^B,2^15) ,触发等量扩容
扩容后的溢出桶的nextoverflow也会重新指向新桶的尾部,oldoverflow指向原来的桶的溢出桶
5,迁移
将旧桶的数据迁移到新桶
(1)翻倍迁移B++;
同一个桶的内部数据会分到新的两个桶中 ,(2^B)+i 和 i
但是这个分,不是等分,因为原本是根据哈希值的后B位来存储的,但是现在B+1了,所以会重新根据这后B+1位来选择桶,对应的就是 (2^B)+i 和 i.
更直接的说就是根据倒数的第B+1位的0 还是1来确定的
(2)等量扩容
只是将溢出桶中的数据迁移进去新的桶中的bmap中(因为可能有删除操作导致bmap中的值存储的比较稀疏)
结构体
1,定义
type 结构体名字 struct {
数据内容......
}
结构体里面可以有其他的结构体,但是不能有自己这个类型,因为无法计算内存大小(但是可以包含自己这个结构体的指针)
结构体里面可以包含匿名字段,可以不写数据的标识符,系统会自动帮你生成一个以类型名为名字的成员
type owner struct {
name string
age int
}
type book struct {
owner // 会在book里面自动生成一个 owner 成员 -相当于-> owner owner
price int
}
2,初始化
type book struct {
owner string
price int
}
//1,先声明后赋值
var b book
b.owner ="xxx"
b.price = 1
//2,直接赋值
b : = book("xxx",1)
//3,按照成员名来初始化
b := book (onwer : "xxx",price : 1)
3,赋值
type book struct {
owner string
price int
}
b1 := book ("xx",1)
b2:= b1 //这里会拷贝一份,不共享同一个内存
b3 := &b1 //这里是b3指向b1的那个地址的,如果修改了b3的内容,b1也会变
b3->price =2
4,结构体嵌套的拷贝
本质都会拷贝一份,但是有些事指针就会出现问题
如果内部有一个指针,那么会拷贝这个指针,但是这是一个浅拷贝,也就是说拷贝的指针还是指向同一个区域,但是这个指针已经是新的的指针了
和指针一样的还有map和切片,因为内部都是维护的指针
标签
type book struct {
owner string "归属者"
price int "价格"
}
没啥用,可能是方便我们去看吧
可以通过
b := book("xx",1)
strcutTag := reflect.TypeOf (b)
tag:= structTag.Field( i) //获取第i个的标签
tagNum :=structTag.NumFeild //可以获得标签的个数
函数补充:
函数的参数可以是函数
func f( n int.g func (int ) (int,int )) int {
...
}
表示一个f函数 ,以 n和 g函数为参数,这里的g的参数是int类型, 返回值是 int,int
匿名函数;因为函数可以直接当一个类型,所以可以吧一个函数直接赋值给一个变量
f:= func ( n int ) int{
.......
}
defer
在函数结束的时候再执行
func f () {
fmt.Println("end")
fmt.Println("111")
}
会输出 end111
相关文章:
go语言学习
字典(映射)类型 (Map) 以键值对为元素去存储元素 Map的特点: 键不能重复。 键必须是(int,bool,float,string,array)这些可以哈希的 (如果自定义类型想要作为键,需要自…...
OpenCV相机标定与3D重建(53)解决 Perspective-3-Point (P3P) 问题函数solveP3P()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 根据 3 个 3D-2D 点对应关系找到物体的姿态。 cv::solveP3P 是 OpenCV 中的一个函数,用于解决 Perspective-3-Point (P3P) 问题。该问…...
【西北工业大学主办 | EI检索稳定 | 高H值专家与会报告】2025年航天航空工程与材料技术国际会议(AEMT 2025)
2025 年航天航空工程与材料技术国际会议(AEMT 2025)将于2025年2月28日至3月2日在中国天津召开。本届会议由西北工业大学主办,由北京航空航天大学、北京理工大学作为支持单位加入,AEIC 学术交流中心协办。 AEMT 2025 旨在汇聚来自全…...
卷积神经02-CUDA+Pytorch环境安装
卷积神经02-CUDAPytorch环境安装 在使用Python进行pytorch的使用过程中遇到各种各样的版本冲突问题,在此进行记录 0-核心知识脉络 1)根据自己电脑的CUDA版本安装对应版本的Pytorch,充分的使用GPU性能2)电脑要先安装【CUDA ToolKi…...
监听器与RBAC权限模型
目录 1、监听器ServletContextListener1.1、主要用途1.2、接口方法1.3、实现步骤1.4、示例代码1.5、使用场景 2、德鲁伊数据源2.1、主要特性2.2、配置 DruidDataSource 3、RBAC权限模型3.1、什么是RBAC3.2、RBAC 的核心概念3.3、RBAC 的优势3.4、RBAC 的实现步骤 1、监听器Serv…...
根据浏览器的不同类型动态加载不同的 CSS 文件
实现思路: 安装并引入 vue 项目相关的 CSS 文件:首先确保你有为不同浏览器准备了不同的 CSS 文件(例如,style-chrome.css,style-firefox.css,style-ie.css 等)。 在 index.js 中根据浏览器类型…...
[ComfyUI]接入Google的Whisk,巨物融合玩法介绍
一、介紹 前段时间,谷歌推出了一个图像生成工具whisk,有一个很好玩的图片融合玩法,分别提供三张图片,就可以任何组合来生成图片。 最近我发现有人开发了对应的ComfyUI插件,对whisk做了支持,就来体验了下&#…...
3DGabor滤波器实现人脸特征提取
import cv2 import numpy as np# 定义 Gabor 滤波器的参数 kSize 31 # 滤波器核的大小 g_sigma 3.0 # 高斯包络的标准差 g_theta np.pi / 4 # Gabor 函数的方向 g_lambda 10.0 # 正弦波的波长 g_gamma 0.5 # 空间纵横比 g_psi np.pi / 2 # 相位偏移# 生成 Gabor 滤…...
一文流:Maven精讲
一文流系列是作者苦于技术知识学了-忘了,背了-忘了的苦恼,决心把技术知识的要点一笔笔✍️出来,一图图画出来,一句句讲出来,以求刻在🧠里。 该系列文章会把核心要点提炼出来,以求掌握精髓&#…...
10.STM32F407ZGT6-内部温度传感器
参考: 1.正点原子 前言: 本笔记的主要目的和意义就是,再次练习ADC的使用。 32.1 内部温度传感器简介 STM32F407 有一个内部的温度传感器,可以用来测量 CPU 及周围的温度(TA)。对于STM32F407 系列来说,该温度传感器在…...
软件测试预备知识④—NTFS权限管理、磁盘配额与文件共享
在软件测试的实际环境搭建与管理过程中,了解和掌握NTFS权限管理、磁盘配额以及文件共享等知识至关重要。这些功能不仅影响系统的安全性和稳定性,还对测试数据的存储、访问以及多用户协作测试有着深远的影响。 一、NTFS权限管理 1.1 NTFS简介 NTFS&am…...
Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能
Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能 基于SpringBoot3Vue3前后端分离的Java快速开发框架 项目简介:基于 JDK 17、Spring Boot 3、Spring Security 6、JWT、Redis、Mybatis-P…...
科研绘图系列:R语言绘制Y轴截断分组柱状图(y-axis break bar plot)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍特点意义加载R包数据下载导入数据数据预处理画图输出总结系统信息介绍 Y轴截断分组柱状图是一种特殊的柱状图,其特点是Y轴的刻度被截断,即在某个范围内省略了部分刻度。这种图表…...
省森林防火应急指挥系统
森林防火形势严峻 我国森林防火形势十分严峻,森林火灾具有季节性强、发现难、成灾迅速等特点,且扑救难度大、影响范围广、造成的损失重。因此,构建森林防火应急指挥系统显得尤为重要。 系统建设模式与架构 森林防火应急指挥系统采用大智慧…...
HTML 迷宫游戏
HTML 迷宫游戏 相关资源文件已经打包成压缩文件,可双击index.html直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢࿰…...
【面试题】技术场景 4、负责项目时遇到的棘手问题及解决方法
工作经验一年以上程序员必问问题 面试题概述 问题为在负责项目时遇到的棘手问题及解决方法,主要考察开发经验与技术水平,回答不佳会影响面试印象。提供四个回答方向,准备其中一个方向即可。 1、设计模式应用方向 以登录为例,未…...
Autoencoder(李宏毅)机器学习 2023 Spring HW8 (Boss Baseline)
1. Autoencoder 简介 Autoencoder是一种用于学习数据高效压缩表示的人工神经网络。它由两个主要部分组成: Encoder 编码器将输入数据映射到一个更小的、低维空间中的压缩表示,这个空间通常称为latent space或bottleneck。 这一过程可以看作是数据压缩,去除冗余信息,仅保留…...
Python的循环
Python的循环 Python的循环有两种,分别是for…in循环和while循环。 for…in 循环 假设我们要循环输出一个列表里的元素: names [张三,李四,王五] for name in names:print(name)执行这段代码后,会依次打印names的每一个元素:…...
车联网安全--TLS握手过程详解
目录 1. TLS协议概述 2. 为什么要握手 2.1 Hello 2.2 协商 2.3 同意 3.总共握了几次手? 1. TLS协议概述 车内各ECU间基于CAN的安全通讯--SecOC,想必现目前多数通信工程师们都已经搞的差不多了(不要再问FvM了);…...
Git | git stash命令详解
关注:CodingTechWork 引言 在日常开发中,使用Git版本控制系统时,可能会遇到需要暂时中断当前工作,去处理其他任务的情况。这时,如果直接切换分支,可能会导致当前的修改未提交而丢失或需要暂时保存修改的状…...
LeetCode hot100-100
287. 寻找重复数 给定一个包含 n 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。你设计的解决方案必须 不修改 数组…...
AWS re:Invent 2024 现场实录 - It‘s all about Scale
时隔五年,再度造访美国,也是同样的主题,参加在拉斯维加斯举行的 AWS re:Invent 大会。 会场 从 2012 起第一届开始,每年的 re:Invent 大会都放在拉斯维加斯,主会场也都放在威尼斯人酒店 (Venetian)。有小伙伴好奇这背…...
qt-C++笔记之自定义继承类初始化时涉及到parents的初始化
qt-C笔记之自定义继承类初始化时涉及到parents的初始化 code review! 参考笔记 1.qt-C笔记之父类窗口、父类控件、对象树的关系 2.qt-C笔记之继承自 QWidget和继承自QObject 并通过 getWidget() 显示窗口或控件时的区别和原理 3.qt-C笔记之自定义类继承自 QObject 与 QWidget …...
[微服务]redis数据结构
介绍 我们常用的Redis数据类型有5种,分别是: StringListSetSortedSetHash 还有一些高级数据类型,比如Bitmap、HyperLogLog、GEO等,其底层都是基于上述5种基本数据类型。因此在Redis的源码中,其实只有5种数据类型。 …...
android四大组件之一——Service
目录 一、Service概述 二、生命周期 三、权限 四、进程生命周期 五、组件与绑定Service的通信方式 1.扩展 Binder 类 2.Messenger信使 3.AIDL 七、总结 场景使用区别 一、Service概述 Service 是应用组件,代表一个应用的长时间后台运行的操作࿰…...
PythonOpenCV图片识别
在windows下面,使用python opencv 进行识别,获取到坐标。 依赖安装: pip install opencv-python pip install numpy pip install pyautogui pip install pywin32代码: import cv2 import numpy as np import pyautogui import o…...
ASP.NET Core 中使用 Cookie 身份验证
在 ASP.NET Core 中使用 Cookie 身份验证,通常是为了实现用户的登录和授权。以下是配置 Cookie 身份验证的步骤。 1. 安装必要的 NuGet 包 首先,确保项目中包含 Microsoft.AspNetCore.Authentication.Cookies 包。你可以通过 NuGet 包管理器或命令行安…...
2021 年 3 月青少年软编等考 C 语言五级真题解析
目录 T1. 红与黑思路分析T2. 密室逃脱思路分析T3. 求逆序对数思路分析T4. 最小新整数思路分析T1. 红与黑 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的…...
LeetCode带环链表题深度解析(是否带环、寻找环的入口结点)
目录 一、链表是否带环 常规方法解析: 拓展问题:那么fast一次走三步,走四步...是否还会相遇? fast :3 ,low :1 fast :4 ,low :1 总结: 二、…...
Redis--20--大Key问题解析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 大Key问题1.什么是 Redis 大 Key?在 Redis 中,大 Key 是指单个键值对的数据量非常大,可能包含大量数据。 2. Redis大Key的危害3.…...
如何使用Yarn Workspaces实现Monorepo模式在一个仓库中管理多个项目
Yarn Workspaces是Yarn提供的一种依赖管理机制,它支持在单个代码仓库中管理多个包的依赖。这种机制非常适合需要多个相互依赖的包的项目,能够减少重复依赖,加快依赖安装速度,并简化依赖管理。下面将详细介绍如何使用Yarn Workspac…...
测试ip端口-telnet开启与使用
前言 开发过程中我们总会要去测试ip通不通,或者ip下某个端口是否可以联通,为此我们可以使用telnet 命令来实现。 一、telnet 开启 可能有些人使用telnet报错,不是内部命令,可以如下开启: 1、打开控制面板ÿ…...
c#版本、.net版本、visual studio版本之间的对应关系
最近这几年一直没用过c#开发,都是从事Qt c开发工作,回想一下之前c#还要追溯到2019年,算算时间大概都已过去4,5年了,时间飞快。 2019真是个神奇的数字,vs2019是我用的时间最长的一个IDE,新冠起始…...
大语言模型训练
步骤 Self-Supervised Pre-Training,简称SPTSupervised Fine-Tuning,简称SFTLearning from Human Feedback,简称LfHF Self-Supervised Pre-Training 自监督预训练(Self-Supervised Pre-Training,简称SPT)…...
ElasticSearch | Elasticsearch与Kibana页面查询语句实践
关注:CodingTechWork 引言 在当今大数据应用中,Elasticsearch(简称 ES)以其高效的全文检索、分布式处理能力和灵活的查询语法,广泛应用于各类日志分析、用户行为分析以及实时数据查询等场景。通过 ES,用户…...
idea快捷键
IDEA常见快捷键 Ctrl A 全写 Ctrl C 粘贴 Ctrl V 复制 Ctrl F 搜索 Ctrl R 替换 Ctrl Z 撤销 Ctrl D 复制行 Ctrl X 删除行,并且被删除的行复制到剪贴板中 Ctrl Y 删除一行 Ctrl Shift Z 反撤销 IDEA重要快捷键 Ctrl / 单行注释&…...
2024年全国信息素养大赛-图形化编程-省赛-绘制正方和三角形
绘制正方和三角形 【编程实现】 使用自制积木,绘制正方形和三角形。 【具体要求】 *程序尽量简洁。 1.画出喜庆的红色图形。 2.先画正方形,再画三角形。 3.正方形和三角形不重叠。 4.正方形和三角形不超出背最中红框的范围。 题目程序演示可点击…...
二进制编码 和 Base64编码
我需要将音频数据存为字符串,不知道存为 二进制编码 和 Base64编码 以下内容来自 DeepSeek : 1. 二进制编码 优点: 高效:二进制编码直接存储原始数据,占用空间小,处理速度快。适合传输:在需要高效传输的…...
微信小程序防止重复点击事件
直接写在app.wpy里面,全局可以调用 // 防止重复点击事件preventActive(fn) {const self this;if (this.globalData.PageActive) {this.globalData.PageActive false;if (fn) fn();setTimeout(() > {self.globalData.PageActive true;}, 3000); //设置该时间内…...
Kafka集群安装
Apache kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,是消息中间件的一种,用于构建实时数据管道和流应用程序。 Kafka官网:http://kafka.apache.org/ 安装环境: Kafka集群环境搭建,依赖于zookeep…...
EXCEL: (二) 常用图表
10. 图表 134-添加.删除图表元素 图表很少是一个单独的整体,而是由十几种元素/对象拼凑出来的。 学习图表就是学习当中各类元素的插删改。 ①图表中主要元素的定义 图表上的一个颜色就是一个系列,每个系列都对应原数据中的一列/一行值数据。 每个系…...
系统日志优化---自定义springboot-starter日志组件供各个服务使用
在优化项目时发现各个微服务都有各自的接口调用日志逻辑,比如每个服务都定义一个aop类拦截,十分冗余,其实是可以做成starter被各个服务引用使用,前提要先了解一下springboot自动装配原理 创建springboot工程,如果是jdk…...
《GB50348-2018 安全防范工程技术标准》:安防工程的权威指南
《GB50348-2018 安全防范工程技术标准》:安防工程的权威指南 【下载地址】GB50348-2018安全防范工程技术标准分享 GB50348-2018 安全防范工程技术标准本仓库提供的是《GB50348-2018 安全防范工程技术标准》的高清电子版资源 项目地址: https://gitcode.com/Open-s…...
RabbitMQ高级篇
目录 确保发送者的可靠 为什么需要确保发送者的可靠性 RabbitMQ 的发送者重连机制配置 springAMQP实现发送者确认 MQ的可靠性 为什么需要实现MQ的可靠性? 数据持久化 Lazy Queue 核心思想 总结RabbitMQ 如何保证消息的可靠性 持久化 Lazy Queue 消息…...
任务调度系统Quartz.net详解2-Scheduler、Calendar及Listener
任务调度系统Quartz.net详解2-Scheduler、Calendar及Listener Scheduler 调度器scheduler是Quartz中的独立工作容器,所有的Trigger和Job都需要注册到scheduler中才能工作。我们可以通过SchedulerFactory来获取scheduler实例。如下: //1.获取默认的标准…...
服务器出现蓝屏现象的原因有什么?
当服务器定期出现蓝屏的现象,则会影响到企业业务的连续性,同时还可能会导致重要数据信息丢失和系统稳定性下降,是一种较为复杂的技术问题,本文就来探讨一下导致服务器出现蓝屏的原因都有什么。 服务器出现蓝屏有可能是硬件出现了故…...
IP 地址与蜜罐技术
基于IP的地址的蜜罐技术是一种主动防御策略,它能够通过在网络上布置的一些看似正常没问题的IP地址来吸引恶意者的注意,将恶意者引导到预先布置好的伪装的目标之中。 如何实现蜜罐技术 当恶意攻击者在网络中四处扫描,寻找可入侵的目标时&…...
探索数据存储的奥秘:深入理解B树与B+树
key value 类型的数据红黑树(最优二叉树,内存最优),时间复杂度:O(logn),调整方便;一个结点分出两个叉B树一个节点可以分出很多叉数据量相等的条件下:红黑树的层数很高&am…...
mac学习芋道源码记录
nodejs安装 v16.20.0 cd yudao-ui-admin-vue2 node install -g yarn yarn install npm run local改配置不然node install -g yarn报错 前往-前往文件夹-/Library 创建 /nodejs/node_global /nodejs/node_cache npm config set prefix /Library/nodejs/node_global npm c…...
CCF 赛事介绍
CCF 赛事介绍 中国计算机学会(CCF)举办了诸多具有影响力的赛事,面向不同年龄段与群体,各有其特色要求。 一、青少年编程启蒙类 CCF 编程能力等级认证(GESP): 适合年龄:涵盖中小学…...