- 博客(271)
- 资源 (3)
- 收藏
- 关注
原创 channel 实现并发读写
文章目录1. 实现一个线程安全的map2. 并发读写3. 多写多读4. 生产者消费者1. 实现一个线程安全的maptype RWMap struct { Lock sync.RWMutex DMap map[string]string}func (r *RWMap)Get(key string)string{ r.Lock.RLock() defer r.Lock.RUnlock() if v,ok := r.DMap[key]; ok { return v } return
2021-12-30 16:49:15 1174
转载 golang中Context的使用场景
golang中Context的使用场景golang中Context的使用场景context在Go1.7之后就进入标准库中了。它主要的用处如果用一句话来说,是在于控制goroutine的生命周期。当一个计算任务被goroutine承接了之后,由于某种原因(超时,或者强制退出)我们希望中止这个goroutine的计算任务,那么就用得到这个Context了。关于Context的四种结构,CancelContext,TimeoutContext,DeadLineContext,ValueContext的使用在
2021-12-24 17:32:13 2836
原创 Redis分布式锁原理
业务背景:后台定时任务刷新Redis的数据到数据库中,有多台机器开启了此定时同步的任务,但是需要其中一台工作,其他的作为备用,提高可用性。使用Redis分布式锁进行限制,拿到锁的机器去执行具体业务,拿不到锁的继续轮询。分布式锁原理分布式锁:当多个进程不在同一个系统中,多个进程共同竞争同一个资源,用分布式锁控制多个进程对资源的互斥访问。采用Redis服务器存储锁信息(即SET一个Key表示已加锁),可以实现多进程的并发读锁的状态,如果没有锁,则只允许一个进程加锁。Redis分布式锁实现的关键点:
2021-12-15 14:06:21 5484 1
原创 Kubernetes--Code
1、简述etcd及其特点etcd是CoreOS团队发起的开源项目,是一个管理配置信息和服务发现(service discovery)的项目,它的目标是构建一个高可用的分布式键值(key-value)数据库,基于Go语言实现。特点:简单:支持REST风格的HTTP+JSON API安全:支持HTTPS方式的访问快速:支持并发1k/s的写操作可靠:支持分布式结构,基于Raft的一致性算法,Raft是一套通过选举主节点来实现分布式系统一致性的算法。2、简述etcd适应的场景etcd基于其优秀的
2021-12-15 10:13:08 268
原创 golang 读取xlsx 文件中的日期字段
golang 读取excel(xlsx文件) 时间格式解析问题起源最近在写一个读取xlsx文件,并解析其中数据的项目,在所有的数据都就绪之后,却遇到了时间格式获取不正确的问题时间格式我查询到的结果我的代码func main() { f, err := excelize.OpenFile("./template.xlsx") if err != nil { log.Fatal(err) } rows := f.GetRows("Sheet1") for _,
2021-09-15 17:59:19 2704
转载 常用正则表达式
https://c.runoob.com/front-end/854一、校验数字的表达式数字:^[0-9]*$n位的数字:^\d{n}$至少n位的数字:^\d{n,}$m-n位的数字:^\d{m,n}$零和非零开头的数字:^(0|[1-9][0-9]*)$非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$有两位小
2021-08-17 19:24:57 200
原创 JWT认证
什么是JWTJson web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。JWT就是一段字符串,用来进行用户身份认证的凭证,该字符串分成三段【头部、载荷、签证】
2021-02-22 19:20:34 339
原创 Golang 中下划线的作用
golang 中的下划线有3种用法。忽略返回值比如某个函数返回三个参数,但是只需要其中的俩个,另外一个参数可以忽略:v1,v2,_ := function(...)用在变量(特别是接口断言)如果定义了一个接口(interface):type Foo interface{ Say() }然后定义了一个结构体(struct)type Dog struct {}然后希望在代码中判断Dog 这个struct 是否实现了Foo 这个interfacevar _Foo = Do
2021-01-22 10:44:17 673
原创 xorm 常见问题
如何使用Like:engine.Where("column like ?", "%"+char+"%").Find怎么同时使用xorm 的tag 和json 的tag ?使用空格:type User struct { Name string `json:"name" xorm:"name"`}struct 里面包含bool 类型,为什么它不能作为条件也没法用Update 更新?默认bool 类型因为无法判断是否为空,所以不会自动作为条件也不会作为Update 的内容。可以使用U.
2021-01-21 15:49:38 2207
原创 在不同的文件中实现接口失败
想要在store–> readwriter–> message.go 中实现store–> message.go 中定义的接口:实现不了:最后的原因:在 store–> message.go 中定义的接口:GetsByIDInSession(ctx context.Context, session *xorm.Session, ids ...int64) ([]*model.Message, error)中的xorm 包是 "xorm.io/xorm"在 store–.
2020-12-28 16:15:59 154
原创 Mac 环境 redis哨兵模式配置
Sentinel 哨兵中的应用:Sentinel服务器与Master服务器/Slave服务器之间的订阅发布系统是Sentinl监控过程的一个重要环节,通过订阅发布系统达到监控服务器状态的作用。其运行原理与上面的客户端服务器之间的订阅机制无太大区别,都是基于网络连接的数据传输。Sentinel之间的通信也是通过Sentinel与服务器间的这个订阅发布系统实现的,一个Sentinel通过服务器的频道发送信息,其他Sentinel就会接收到。Redis哨兵模式(sentinel)(主从复制、读写分离、主从切换
2020-12-16 11:39:07 1161
原创 WARNING: Missing ‘go_package‘ option in “person.proto“,
是因为在 proto3 的语法中缺少了 option go_package。解决:在syntax下面添加option信息option go_package = "aaa;bbb";aaa 表示生成的go文件的存放地址,会自动生成目录的。bbb 表示生成的go文件所属的包名解决方法://package message; //注释掉包option go_package = ".;protoes"; //新增该行比如:option go_package = "./pbs;messag
2020-12-14 10:51:57 1650 1
原创 中文字符串的编码转换 UTF-8//GBK
golang在处理中文时默认的是utf-8编码,当某些情况下遇到GBK编码或需要GBK编码时,就会出现显示乱码的问题。1. simplifiedchinesegolang官方有针对中文编码转换的包:golang.org/x/text/encoding/simplifiedchineseimport "golang.org/x/text/encoding/simplifiedchinese"func ConvertStr2GBK(str string) string { //将utf-8编码
2020-11-24 20:58:18 2897
原创 cobra
cobra–>cmd–>root.gopackage cmdimport ( "fmt" "github.com/mitchellh/go-homedir" "github.com/spf13/cobra" "github.com/spf13/viper" "os" "strings")var cfgFile stringvar echoTimes intvar RootCmd = &cobra.Command{ Use: "app",}var cm
2020-11-24 10:53:08 268
原创 golang 占位符”
golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。#定义示例类型和变量type Human struct { Name string}var people = Human{Name:"zhangsan"}普通占位符占位符 说明 举例 输出%v 相应值的默认格式。 Printf("%v", people) {zh
2020-11-19 15:17:48 632
原创 html/template
库(html/template):是go实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。简单说就是对html,css,javascript进行安全转换;例如对html中的<div>这个标签的特殊字符<>进行转换。还有用于生成安全的html模版代码的方法。与之相似还有另一个包 text/template,只是前者解析html,后者解析普通文本字符串而已。常见的几个html转义字符:package mainimport ( "fmt" "html" "
2020-11-13 18:26:54 969
转载 Gin 框架
Gin框架介绍Gin是一个用 Go (Golang) 编写的 web 框架。它是一个类似于martini但性能更好的API框架,不同于谢大主导的Beegoweb框架,后者更像是Python语言中的Django框架,内部包含了开发一个web程序所需的各种组件。如果你是性能和高效的追求者,我相信你会像我一样爱上Gin。同时,不同于其他Golang语言的API框架,该框架社区十分活跃,并且主程仍然在不断更新和改进,我们知道通常情况下在选择一个开源的软件或者相关库时,社区的活跃度以及项目的更新情况会非常重要(
2020-11-03 11:40:02 991
原创 crypto/md5
先认识go的hash接口(位于go标准库-hash包):type Hash interface { // 通过io.Writer接口的Write方法向hash中添加数据 io.Writer // 返回添加b到当前的hash值后的新切片,不会改变底层的hash状态,这个方法就是返回计算后的hash值,只是它是字符切片 Sum(b []byte) []byte // 重设hash为无数据输入的状态,就是清空hash之前写入的数据 Reset() // 返
2020-10-30 18:39:33 1578
原创 Golang 序列化之 ProtoBuf
package mainimport ( "fmt" "github.com/golang/protobuf/proto" "log")func main() { p1 := Person{ Id: *proto.Int32(1), Name: *proto.String("xieyangke"), } p2 := Person{ Id: 2, Name: "gopher", } all_p := AllPerson{ Per: []*Person{&
2020-10-30 14:56:13 380
转载 网关工作原理
网关(Gateway)就是一个网络连接到另一个网络的“关口”。也就是网络关卡。假设你的名字叫 小不点 (很小),你住在一个大院子里,你的邻居有很多小伙伴, 父母 是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字,他听到了就会回应你,并且跑出来跟你玩。但是你 家长不允许你走出大门,你想与外界发生的一切联系,都必须由父母(网关)用电话帮助你联系。假如你想找你的同学小明聊天,小明家住在很远的另外一个院子里,他家里也有父母(小明的网关)。但是你不知道小明家的电话号码,不过你的 班主任老师
2020-10-29 14:32:36 8107 4
转载 关于TCP/IP,必须知道的十个知识点
https://www.toutiao.com/i6570218601117123080/本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养。一、TCP/IP模型TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。下图表示TCP/
2020-10-27 20:25:05 239
原创 mac 下 Typora MarkDown编辑器的使用方法
文章目录// 生成以上目录:[TOC] + 回车// 切换预览和源码模式:command + /分割线内联样式字体注脚标题级别引用列表层级回退:无序列表:有序列表:任务列表:代码数学表达式表格图流程图UML时序图超链接特殊字符快捷键// 生成以上目录:[TOC] + 回车// 切换预览和源码模式:command + /分割线使用 *** 或者 — + 回车内联样式字体**字体加粗** command+b__字体加粗__ // _ _ :2个_*字体倾斜*
2020-10-22 17:17:32 2756
原创 sql 语句的执行和解析顺序
数据库是java开发必经之路,而sql语句的书写和语句的解析也是非常的重要的.sql语句的书写顺序:select ---> from --->where ---> group by ---> having ---> order by其中where和having是不能同时使用的,并且having和group by 是联合使用的sql语句的解析顺序 :from --->where ---> group by ---> having ---> sele
2020-10-20 19:58:45 731
原创 Golang Time
基础使用//获取秒级时间戳time.Now().Unix()//获取毫秒级时间戳time.Now().UnixNano()/1e6//格式化时间time.Now().Format("2006-01-02 15:04")//字符串转时间格式t, err := time.Parse("2006-01-02 15:04:05", "2019-05-20 18:30:50")//时间戳转为字符串t := time.Unix("1558348250", 0).Format("2006-01
2020-10-15 19:34:49 2081
原创 sync.Map
// Go 语言中 map 在并发情况下,只读是线程安全的,同时读写是线程不安全的。// 并发的 map 读和 map 写,使用了两个并发函数不断地对 map 进行读和写而发生了竞态问题,map 内部会对这种并发操作进行检查并提前发现。// 需要并发读写时,一般的做法是加锁,但这样性能并不高,Go语言在 1.9 版本中提供了一种效率较高的并发安全的 sync.Map,sync.Map 和 map 不同,不是以语言原生形态提供,而是在 sync 包下的特殊结构。sync.Map 有以下特性:无须初始
2020-10-15 17:08:41 178
转载 go-regexp
golang Regexp主要提供如下正则所表示的16个方法:Find(All)?(String)?(Submatch)?(Index)?若带All,该方法返回一个所有递进匹配结果的slice;该方法需要额外传一个整数n,若n>=0,至多返回n个匹配或子匹配,若x<0,返回全部。若带String,该方法传入的参数需是string,否则为字节slice,返回结果也为对应的string。若带Submatch,该方法返回表达式递进的子匹配slice(子匹配匹配以括号扩起的表达式,也称作匹配组
2020-10-15 15:52:20 998
转载 github.com/sirupsen/logrus
https://blog.csdn.net/wslyk606/article/details/81670713golang日志库golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数对于更精细的日志级别、日志文件分割以及日志分发等方面并没有提供支持。所以催生了很多第三方的日志库,但是在golang的世界里,没有一个日志库像slf4j那样在Java中具有绝对统治地位。golang中,流行的日志框架包括logrus、zap、zerolog、seelog等。 logrus是
2020-10-15 14:48:20 2736
原创 github.com/davecgh/go-spew/spew
通过经常通过调试的方式查找问题的原因,解决问题,尤其是当遇到一个很棘手的问题的时候,就需要知道一段代码在执行的过程中,其上下文的变量对应的数据,以便进行推测出问题的原因。对于这类调试,我们用的比较多的一个是断点调试,还有是通过打印日志输出。通过日志打印的话,可能一开始常用的就是fmt.Println输出,简单,边界。如果我们再想看一些更多信息的话,比如行号,可以通过log包。package mainimport ( "fmt" "log")func main() { i := 0 s
2020-10-15 14:16:30 1176
原创 Mysql中key 、primary key 、unique key 与index区别
1. 一个表只能有一个PRIMARY KEY,但是可以有多个UNIQQUE KEY。 唯一约束设置唯一约束的列允许有空值,但是只能有一个空值。 主键约束在一个表中只能有一个,且不允许有空值。 2. key: 主要是用来加快查询速度的,key是数据库的物理结构:约束和索引。 3. primary key:主键约束,并建立一个主键索引。主键必须唯一,非NULL, 4. unique key: 唯一约束并在这个key上建立一个唯一索引。主要是用来防止数据插入的时候重复的。 5. foreign.
2020-10-15 10:56:38 1127
原创 github.com/google/uuid
uuid是Universally Unique Identifier的缩写,即通用唯一识别码。uuid的目的是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 uuid。uuid是谷歌开发的生成16字节UUID的模块,实现了RFC4122;对UUID的v1,v2,v3,v4,v5等各个版本都有实现。一般来说,如果只是要生成唯一序列号的话,通常用v4版本,New()和NewRandom()都可以生成v4, New是对New
2020-10-14 20:56:09 2330
原创 github.com/prometheus/client_golang/prometheus/promhttp 使用golang编写Prometheus Exporter
Exporter是基于Prometheus实施的监控系统中重要的组成部分,承担数据指标的采集工作,官方的exporter列表中已经包含了常见的绝大多数的系统指标监控,比如用于机器性能监控的node_exporter, 用于网络设备监控的snmp_exporter等等。这些已有的exporter对于监控来说,仅仅需要很少的配置工作就能提供完善的数据指标采集。有时我们需要自己去写一些与业务逻辑比较相关的指标监控,这些指标无法通过常见的exporter获取到。比如我们需要提供对于DNS解析情况的整体监控,了解如
2020-10-14 11:00:01 3321
原创 Golang :字符串连接的不同方法 利用字节缓冲区 bytes.Buffer 创建字符串
bytes buffer:就是写byte或者字符串string的一个容器利用字节缓冲区 bytes.Buffer 创建字符串package mainimport ( "bytes" "fmt")func main() { var buffer bytes.Buffer buffer.WriteString("www.baidu.com") buffer.WriteString(":") buffer.WriteString("welcome!") buffer.WriteStri
2020-10-12 17:42:19 1351
原创 github.com/aliyun/aliyun-oss-go-sdk/oss. 对象存储OSS
对象存储OSS的Go SDK各种使用场景下的示例代码:https://help.aliyun.com/document_detail/32144.html快速入门:package mainimport ( "fmt" "github.com/aliyun/aliyun-oss-go-sdk/oss" "os")// OSS Go SDK// 创建存储空间(Bucket)、上传/下载文件(Object)func handleError(err error) { fmt.Print
2020-10-12 15:58:48 1690 1
原创 Goland 中import 包没有报错,但是使用包下的方法会报错
Goland 中import 包没有报错,import "github.com/aliyun/aliyun-oss-go-sdk/oss"但是使用包下的方法会报错:oss.New()标红:Unresolved reference 'New'解决方法:在terminal 里运行:进入到项目目录下:1. go mod init 项目名称(该文件所在的包)2. go mod vendor3. go mod tidy...
2020-10-12 15:28:55 1750
原创 单元测试出现的问题
在写单元测试的时候遇到这种问题:=== RUN Testxxx Testxxx: box_test.go:239: missing call(s) to *xxxmock.Mockxxx.xxx(is anything, is anything, is anything) xxx/xxx/xxx/box_test.go:202 Testxxx: box_test.go:239: aborting test due to missing call(s)--- FAIL: Testx.
2020-10-10 11:04:22 4754
redis-sentinel.conf
2020-12-16
redis.conf
2020-12-16
m4-1.4.18.tar.gz
2019-06-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人