![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Golang
Golang
Word哥
代码改变世界
展开
-
Golang处理json的key不带双引号转换为json对象
问题:json对象中的key不带双引号,导致json.Unmarshal()解析失败。样例数据:{ AGE: 45, SEX: 2, JGSJ: "20200731152755", DEVICEID: "ea0d0534cb3a4806b08cce001c33bf1f", JKSBBH: "321282840000047700128094", KKBH: "5f91fc407b364d74a2a251e6bceaf4ba", XSFX: "", DWMC: "新桥鑫宏发超市",原创 2020-08-06 09:58:29 · 2177 阅读 · 0 评论 -
Golang协程调度原理( G、M、P)
1. 什么是协程?协程,又称微线程,纤程。英文名Coroutine。对于进程、线程,都是有内核进行调度,有CPU时间片的概念,进行抢占式调度。协程的调用有点类似子程序,但是和子程序相比,协程有挂起的概念,协程可以挂起跳转执行其他协程,合适的时机再跳转回来。goroutine使用方式非常的简单,只需使用go关键字即可启动一个协程,并且它是处于异步方式运行,你不需要等它运行完成以后在执行以后的代码。2. 协程调度原理?G(Goroutine):一个G代表一个goroutineM(Mach原创 2020-07-09 13:47:08 · 5082 阅读 · 0 评论 -
Golang学习篇——对象池sync.Pool
1. 什么是sync.Pool?Go 1.3 的sync包中加入一个新特性:Pool,官方文档。简单的说:它就是一个临时对象池,这个类设计的目的是用来保存和复用临时对象,以减少内存分配,降低CG压力。2. 为什么需要sync.Pool?增加临时对象的重用率,减少内存分配,减少GC负担,goroutine对象越多GC越慢,因为Golang进行三色标记回收的时候,要标记的也越多,自然就慢。3.sync.Pool使用思路:搞一个池子,预先放入临时产生的对象,然后取出使用官方fmt包就.原创 2020-06-08 18:05:07 · 1463 阅读 · 0 评论 -
Golang实现Time定时器超时退出方式
1.time.After假设业务中需调用服务接口A,要求超时时间为5秒,那么如何优雅、简洁的实现呢?可以采用select+time.After的方式,十分简单适用的实现。package mainimport ( "fmt" "time")//发送者func sender(c chan int) { for i := 0; i < 20; i++ { c <- i if i >= 5 { time.Sleep(time.Second * 7).原创 2020-06-08 13:36:44 · 4996 阅读 · 0 评论 -
Golang学习篇——协程池
目录1.为什么需要协程池?2. 简单的协程池3.go-playground/pool4. ants(推荐)1.为什么需要协程池?虽然go语言自带“高并发”的标签,其并发编程就是由groutine实现的,因其消耗资源低(大约2KB左右,线程通常2M左右),性能高效,开发成本低的特性而被广泛应用到各种场景,例如服务端开发中使用的HTTP服务,在golangnet/http包中,每一个被监听到的tcp链接都是由一个groutine去完成处理其上下文的,由此使得其拥有极其优秀的并发量...原创 2020-06-05 13:11:10 · 12701 阅读 · 0 评论 -
Golang创建XML
package mainimport ( "encoding/xml" "fmt" "io/ioutil")type Post struct { XMLName xml.Name `xml:"post"` Id string `xml:"id,attr"` Content string `xml:"content"` Author Author `xml:"author"`}type Author struct { Id string `xml:.原创 2020-06-02 13:01:53 · 1374 阅读 · 0 评论 -
HTTPS协议工作原理
1. 为什么需要HTTPS?1) 保护隐私(Privacy):所有信息都是加密传播,第三方无法窃听数据。如果使用 HTTP 明文传输数据的话,很可能被第三方劫持数据,那么所输入的密码或者其他个人资料都被暴露在他人面前,后果可想而知。2) 数据完整性(Integraty):一旦第三方篡改了数据,接收方会知道数据经过了篡改,这样便保证了数据在传输过程中不被篡改。3) 身份认证(Identification):第三方不可能冒充身份参与通信,因为服务器配备了由证书颁发机构(Certificate Aut原创 2020-05-19 11:23:08 · 1482 阅读 · 0 评论 -
Go Web学习篇——Hello World
1.概述目前 Go 社区已经有非常多关于 Web 开发的库或框架。大而全的有beego,revel。超高性能的有echo,fasthttp,gin(目前 GitHub 星标最多)。还有不少专注于具体某个方面的,最多要属路由,例如:mux/httprouter。这些库/框架大多是基于 net/http 包做了包装。GO语言不像php、java那样,需要使用apache、nginx、tomcat之类的第三方服务器,可以自身通过http包构建web服务器2. Hello World实例使用 Go原创 2020-05-19 16:53:20 · 214 阅读 · 0 评论 -
Golang 中 flag包开发命令行工具
1. flag包简介golang 提供了 flag 包来支持基本的命令行参数解析。命令行参数常用来为命令行程序指定选项。比如在wc -l命令中-l就是命令行参数。命令行语法:-flag //只支持bool类型-flag=x-flag x //只支持非bool类型定义 flag 参数:1) 通过flag.String(), Bool(), Int()等flag.Xxx()方法,该种方式返回一个相应的指针:brokers := flag.String("brok...原创 2020-05-11 15:18:59 · 411 阅读 · 0 评论 -
Golang 中 context(上下文)使用
目录1.为什么需要context2.context包简介3. 场景举例—等待组4. 场景举例—通道+select5. 场景举例—普通context6. 场景举例—Context超时7. 场景举例—Context传递元数据8. context总结1.为什么需要context在并发程序中,由于超时、取消操作或者一些异常情况,往往需要进行抢占操作或者中断后续操作。举个例子:在 Go http包的Server中,每一个请求在都有一个对应的 goroutine 去处...原创 2020-05-09 14:38:24 · 7113 阅读 · 0 评论 -
Golang无法连接docker中Elasticsearch
问题:使用Golang客户端连接docker中es报错:no active connection found: no Elasticsearch node available使用的第三方库:"github.com/olivere/elastic"解决办法:参考Docker No Elastic Node Aviable关闭sniff模式;或者设置es的地址为publish_...原创 2020-05-08 11:38:34 · 1398 阅读 · 0 评论 -
Golang学习篇——UTC时间互换标准时间
Golang时间相关处理,相关包 "time"1. UTC时间转标准时间//UTC时间转标准时间func (this *DataSearch) UTCTransLocal(utcTime string) string { t, _ := time.Parse("2006-01-02T15:04:05.000+08:00", utcTime) return t.Local().For...原创 2020-04-30 13:22:54 · 10182 阅读 · 0 评论 -
Golang学习篇——定时删除指定目录下的空文件夹
1. 场景需求1:根据日期动态创建文件夹写文件。需求2:定时删除根目录下的非空目录,如果子目录不为空不删除,当目录下的文件被删除完后,删除目录。2. 代码package mainimport ( "fmt" "github.com/satori/go.uuid" "io/ioutil" "os" "path/filepath" "time")// 生成UUI...原创 2020-04-27 11:40:37 · 1816 阅读 · 0 评论 -
Golang学习篇——提取Json数据中指定字段数据
1.json-iterator介绍jsoniter ( json-iterator )是一款快且灵活的 JSON 解析器,同时提供 Java 和 Go 两个版本Jsoniter 是最快的 JSON 解析.器。它最多能比普通的解析器快 10 倍之多,即使在数据绑定的用法下也有同样的性能优势。golang中的跑分:2.提取Json指定字段数据有时候,例如一个JSON对象很大...原创 2020-04-21 13:46:53 · 10899 阅读 · 1 评论 -
Golang学习篇——创建多级目录
创建单个文目录:err:=os.Mkdir("D:/dir1",os.ModePerm)if err!=nil{ fmt.Println(err)}创建多级目录://调用os.MkdirAll递归创建文件夹func CreateMutiDir(filePath string) error { if !isExist(filePath) { err := os.Mk...原创 2020-04-10 18:09:31 · 5472 阅读 · 2 评论 -
Golang学习篇—kafka压缩使用生产和消费
1.kafka使用依赖包"github.com/Shopify/sarama""github.com/bsm/sarama-cluster"2.kafka生产和消费端二次封装Common.gopackage XLKafkaimport "github.com/Shopify/sarama"type KafkaCfg struct { Producer struct ...原创 2020-01-06 18:02:46 · 1946 阅读 · 0 评论 -
Golang学习篇—kafka客户端压缩
1.kafka压缩参数说明compression.type:producer用于压缩数据的压缩类型。默认是无压缩。正确的选项值是none、gzip、snappy和lz4。压缩最好用于批量处理,批量处理消息越多,压缩性能越好。推荐配置一种适合的压缩算法,可以大幅度的减缓网络压力和Broker的存储压力。kafka的压缩和kafka的compact是不同的,compact就是相同的key...原创 2020-01-06 17:41:13 · 1302 阅读 · 0 评论 -
Golang学习篇—elasticsearch游标分页查询
1. 需求业务需求:ES中修改历史数据中的某个字段或增加字段,历史上亿的数据,使用游标分页查询的方式查询大量历史数据。《elasticsearch权威指南》直接看官网在线版的2. 使用第三方包使用第三方包:github.com/olivere/elastic3. 代码样例esclient.gopackage ESOperationimport ( "Behav...原创 2019-12-17 17:19:18 · 5694 阅读 · 5 评论 -
golang学习篇—遍历下载FTP文件
业务需求:循环遍历FTP文件夹获取文件后,并发下载FTP服务器的文件到本地,删除远程文件,然后继续下一轮扫描,客户端有读写权限。代码如下:package FTPimport ( "errors" "fmt" "github.com/jlaffaye/ftp" "runtime" "sync" "time")const ( Data_Size = 1024)/...原创 2019-12-13 16:20:06 · 2921 阅读 · 2 评论 -
Golang学习篇—推荐的几个网站
Go by example: https://gobyexample.com/effective go: https://golang.org/doc/effective_go.htmlGO 101: https://go101.org/article/101.htmlGO 101中文版:https://gfw.go101.org/article/101.html...原创 2019-12-11 13:52:44 · 481 阅读 · 0 评论 -
Golang学习篇—实现简单的事件总线(发布订阅模式)
1.事件总线事件总线是发布/订阅模式的实现,其中发布者发布数据,并且订阅者可以监听这些数据并基于这些数据作出处理。这使发布者与订阅者松耦合。发布者将数据事件发布到事件总线,总线负责将它们发送给订阅者。传统的实现事件总线的方法会涉及到使用回调。订阅者通常实现接口,然后事件总线通过接口传播数据。使用 Go 的并发模型,大多数地方可以使用channel来替代回调。2.事件总线实例...原创 2019-12-04 21:01:32 · 3437 阅读 · 0 评论