
Golang优雅中带着严谨
文章平均质量分 61
介绍golang基础包、使用golang开发中可能遇到的问题、网上比较流行的一些开源包使用。
九品神元师
AI平台、分布式存储、分布式计算、微服务
展开
-
go随聊- chan使用(close关闭通道)
chan不需要显示关闭(close),只要没有goroutine持有channel,相关资源会自动释放。chan最好是发送端调用close,此时读取端会收到一个空消息,如下:ch:=make(chan string,1)go func(){ for{ i:=<-ch if i==""{ fmt.Println("通道被close") break }els...原创 2019-11-22 19:22:50 · 5699 阅读 · 0 评论 -
go随聊-go编译so库让C++引用
有时C++需要引用go的一些开源库,这时就需要go编译成C++可调用的库go代码package main//包必须是mainimport( "C"//需要C库的支持,方便类型转换)func main() {}//export HelloWorldfunc HelloWorld() *C.char { return C.CString("hello world")}...原创 2019-03-18 14:08:21 · 591 阅读 · 0 评论 -
go随聊-SSDB实战 同步和复制
SSDB一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis.地址:https://github.com/ideawu/ssdb 同步和复制的配置主-从#server 1replication: slaveof:#server 2replication: slaveof: id: svc_1 # sync|mirror, d...原创 2018-11-14 10:53:34 · 354 阅读 · 0 评论 -
go随聊-SSDB实战 运维管理
SSDB一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis.地址:https://github.com/ideawu/ssdb 命令行工具 ssdb-cli启动命令行工具./ssdb-cli -p 18888ssdb (cli) - ssdb command line tool.Copyright (c) 2012-2016 ssdb.io...原创 2018-11-14 10:25:52 · 461 阅读 · 0 评论 -
go随聊-SSDB实战 安装SSDB
SSDB一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis.地址:https://github.com/ideawu/ssdb特性1.替代 Redis 数据库, Redis 的 100 倍容量2.LevelDB 网络支持, 使用 C/C++ 开发3.Redis API 兼容, 支持 Redis 客户端4.适合存储集合数据, 如 list, hash, ...原创 2018-11-14 10:15:11 · 667 阅读 · 0 评论 -
go随聊-安全散列算法SHA256
SHA-256安全散列算法SHA(Secure Hash Algorithm)是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数,包括 SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512 等变体。主要适用于数字签名标准(DigitalSignature Standard DSS)里面定义的数字签名算法(Digital ...原创 2018-11-09 17:47:59 · 498 阅读 · 0 评论 -
go随聊-消息摘要算法MD5
MD5MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。例子:import ( "fmt" "cryp...原创 2018-11-09 17:53:26 · 640 阅读 · 0 评论 -
go随聊-Redis实战 操作Hash
go-redis/redis地址:https://github.com/go-redis/redisSupports:Redis 3 commands except QUIT, MONITOR, SLOWLOG and SYNC. Automatic connection pooling with circuit breaker support. Pub/Sub. Transac...原创 2018-11-06 11:52:56 · 3856 阅读 · 0 评论 -
go随聊-Redis实战 操作Set
go-redis/redis地址:https://github.com/go-redis/redisSupports:Redis 3 commands except QUIT, MONITOR, SLOWLOG and SYNC. Automatic connection pooling with circuit breaker support. Pub/Sub. Transac...原创 2018-11-06 11:28:59 · 1066 阅读 · 0 评论 -
go随聊-Redis实战 操作List
go-redis/redis地址:https://github.com/go-redis/redisSupports:Redis 3 commands except QUIT, MONITOR, SLOWLOG and SYNC. Automatic connection pooling with circuit breaker support. Pub/Sub. Transac...原创 2018-11-05 15:59:08 · 2795 阅读 · 0 评论 -
go随聊-Redis实战 操作String
go-redis/redis地址:https://github.com/go-redis/redisSupports:Redis 3 commands except QUIT, MONITOR, SLOWLOG and SYNC. Automatic connection pooling with circuit breaker support. Pub/Sub. Transac...原创 2018-11-05 15:32:11 · 819 阅读 · 0 评论 -
go随聊-生成、识别二维码
QRCode QR Code码,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。生成二维码skip2/go-qrcode地址:https://github.com/skip2/go-qrcodeackage qrcode implements...原创 2018-11-04 20:07:01 · 2336 阅读 · 0 评论 -
go随聊-反射reflect
reflect即反射。对于C++程序员来说比较陌生,对于Java或是C#程序员来说理解反射就易如反掌了。golang中为我们提供了reflect包用于反射。package reflect接下来就要介绍golang中的reflect package了。reflect包有两个数据类型,一个是Type,一个是Value。 1.Type就是定义的类型的一个数据类型2.Value是值的类...原创 2018-10-30 10:37:16 · 508 阅读 · 0 评论 -
go随聊-defer延迟调用
本文只适合想要进阶学习 Golang 的新手阅读,大牛请绕道。Go 语言中的 defer 语句是 UNIX 之父 Ken Thompson 大神发明的, 是完全正交的设计。简化资源的回收这是最常见的 defer 用法. 比如:mu.Lock()defer mu.Unlock()panic异常的捕获defer 除了用于简化资源的释放外, 还是Go语言异常框架的一个组成部分...原创 2018-11-04 17:04:37 · 284 阅读 · 0 评论 -
go随聊-golang实现生成缩略图
项目中难免会遇到图片查询的情况,有时候原始图片很大,考虑到带宽,可以只传缩略图给前端。golang有很多生成缩略图的方法,本文介绍一个不错的图片处理包。disintegration/imaginghttps://github.com/disintegration/imagingPackage imaging provides basic image processing func...原创 2018-11-02 18:34:38 · 5360 阅读 · 2 评论 -
go随聊-Panic
Go提供了两个内置函数 panic()和recover()用于异常处理。Go中,对异常处理的整体原则是:多用errors包,少用panic。对于可预见的错误,比如网络连接失败等,一般都使用errors,只有重大错误才会使用panic。记住一个大原则:panic会导致程序直接挂掉,除非调用了recover方法。在函数内部调用 panic 会立即终止当前函数的执行,由当前调用栈逐层...原创 2018-11-04 16:35:22 · 211 阅读 · 0 评论 -
go随聊-指针
指针!对的,你没有看错,Golang居然有指针,C++转过来的人笑了。值传递func Update(value int) { value=value+1}func main() { value:=1 Update(value) fmt.Println("当前值:",value)}-----------------------------------当前值: 1va...原创 2018-11-03 21:46:12 · 215 阅读 · 0 评论 -
go随聊-ioutil包
今天主要介绍Go的io.ioutil标准库使用package ioutilReadAll 读取 r 中的所有数据,返回读取的数据和遇到的错误。如果读取成功,则 err 返回 nil,而不是 EOF,因为 ReadAll 定义为读取所有数据,所以不会把 EOF 当做错误处理。func ReadAll(r io.Reader) ([]byte, error) 例子:impo...原创 2018-11-03 21:31:03 · 252 阅读 · 0 评论 -
go随聊-time包
几乎所有的系统开发都会涉及到时间转换或者时间处理,今天介绍一下go里面处理时间的包package time获取当前时间//Now returns the current local time.func Now() Time // UTC returns t with the location set to UTC.func (t Time) UTC() Time// ...原创 2018-11-02 20:09:38 · 211 阅读 · 0 评论 -
go随聊-断路器
重试是为了应付偶尔抖动的情况,以求更多地挽回损失。可是如果provider持续的响应时间超长呢?如果provider是核心路径的服务,down掉基本就没法提供服务了,那我们也没话说。 如果是一个不那么重要的服务,却因为这个服务一直响应时间长导致consumer里面的核心服务也拖慢,那么就得不偿失了。单纯超时也解决不了这种情况了,因为一般超时时间,都比平均响应时间长一些,现在所有的打...原创 2018-11-02 14:55:14 · 812 阅读 · 0 评论 -
go随聊-errors
每种语言都有自己的一套错误定义方式,刚开始使用go的时候很不习惯,出现错误并不是返回错误码或者异常类,而是一个error的东东,如下:type error interface { Error() string}Error()是每一个订制的error对象需要填充的错误消息,用户可以这样定义一个error第一种:通过errors包去订制errorerr:=errors.New(...原创 2018-11-02 15:42:54 · 263 阅读 · 0 评论 -
go随聊-strings包
package strings// Package strings implements simple functions to manipulate UTF-8 encoded strings.// For information about UTF-8 strings in Go, see https://blog.golang.org/strings.用于转换的方法字符串转换为...原创 2018-11-01 09:59:37 · 245 阅读 · 0 评论 -
go随聊-限流器
由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统。也就是面对大流量时,如何进行流量控制?服务接口的流量控制策略:分流、降级、限流等。本文讨论下限流策略,虽然降低了服务接口的访问频率和并发量,却换取服务接口和业务应用系统的高可用。go自带的限流包 golang.org/x/time/rate限流器定义:type Limiter str...原创 2018-11-02 15:16:05 · 1119 阅读 · 0 评论 -
go随聊-Arrays和Slices
Arrays声明一个数组:var value[10]int声明一个数组并初始化:value:=[3]int{1,2,3}通过下标修改数组:value:=[3]int{1,2,3}value[1]=20range在数组中的使用:value:=[3]int{1,2,3}for _,v:=range value { fmt.Println(v)}----...原创 2018-11-01 11:16:00 · 170 阅读 · 0 评论 -
go随聊-map
定义map并初始化,根据key获取valueitems := map[string]string{ "id1": "1", "id2": "2", "id3": "3",}v:= items["id2"]fmt.Println(v)通过make进行构建 items:=make(map[string]string,10)i原创 2018-10-31 19:22:42 · 181 阅读 · 0 评论 -
go随聊-chan使用的坑
Go中chan是分阻塞和非阻塞(带缓冲)的创建非缓冲的chanch:=make(chan int)ch<-1fmt.Println("run")运行会报:fatal error: all goroutines are asleep - deadlock! 因为这种方式创建的是非缓冲的chan创建带缓冲的chanch:=make(chan int,1)ch<...原创 2018-10-24 18:58:07 · 885 阅读 · 0 评论 -
go随聊-负载均衡[随机]
在分布式系统中,负载均衡是非常重要的环节,通过负载均衡将请求派发到网络中的一个或多个节点上进行处理。通常来说,负载均衡分为硬件负载均衡及软件负载均衡。硬件负载均衡,顾名思义,在服务器节点之间安装专门的硬件进行负载均衡的工作,F5便为其中的佼佼者。软件负载均衡则是通过在服务器上安装的特定的负载均衡软件或是自带负载均衡模块完成对请求的分配派发。随机算法随机,按权重设置随机概...原创 2018-11-02 14:16:00 · 534 阅读 · 0 评论 -
go随聊-负载均衡[轮询]
在分布式系统中,负载均衡是非常重要的环节,通过负载均衡将请求派发到网络中的一个或多个节点上进行处理。通常来说,负载均衡分为硬件负载均衡及软件负载均衡。硬件负载均衡,顾名思义,在服务器节点之间安装专门的硬件进行负载均衡的工作,F5便为其中的佼佼者。软件负载均衡则是通过在服务器上安装的特定的负载均衡软件或是自带负载均衡模块完成对请求的分配派发。轮询算法轮循,按公约后的权重...原创 2018-11-02 14:24:40 · 750 阅读 · 0 评论 -
go随聊-负载均衡[加权轮询]
本文内容参考了网上其他文章,懒得自己打字了,拷贝过来直接用:) 在分布式系统中,负载均衡是非常重要的环节,通过负载均衡将请求派发到网络中的一个或多个节点上进行处理。通常来说,负载均衡分为硬件负载均衡及软件负载均衡。硬件负载均衡,顾名思义,在服务器节点之间安装专门的硬件进行负载均衡的工作,F5便为其中的佼佼者。软件负载均衡则是通过在服务器上安装的特定的负载均衡软件或是自带...原创 2018-11-02 14:39:44 · 949 阅读 · 0 评论 -
go随聊-sync.WaitGroup
GO提供了sync包和channel来解决协程同步和通讯。新手对channel通道操作起来更容易产生死锁,如果时缓冲的channel还要考虑channel放入和取出数据的速率问题。sync.WaitGroup是等待一组协程结束,它实现了一个类似任务队列的结构,你可以向队列中加入任务,任务完成后就把任务从队列中移除,如果队列中的任务没有全部完成,队列就会触发阻塞以阻止程序继续运行。本...原创 2018-10-31 10:20:19 · 450 阅读 · 0 评论 -
go随聊-web框架gin
Gin Web Framework Gin 是一个 Golang 写的 web 框架,具有高性能的优点,基于 httprouter,它提供了类似martini但更好性能(路由性能约快40倍)的API服务。自身的net/http足够简单,Gin更像是一些常用函数或者工具的集合。借助Gin开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。https://g...原创 2018-10-31 18:45:38 · 1071 阅读 · 0 评论 -
go随聊-xml读取
XML的读取假设本地xml文件config.xml<?xml version="1.0" encoding="UTF-8"?><Message Version="1.0"> <Item key="Channel" value="gin"/> <Item key="Filter&quo原创 2018-10-30 19:23:42 · 259 阅读 · 0 评论 -
go随聊-strconv包
Package strconv strconv是golang用来做数据类型转换的一个库1.Append类型的方法func AppendInt(dst []byte, i int64, base int) []byteb1 := []byte("追加")b1 = strconv.AppendInt(b1, -17, 10) //17用10进制方式加到后面fmt.Println(...原创 2018-10-30 12:43:26 · 190 阅读 · 0 评论 -
go随聊-IP地址合法性判断
IP地址合法性判断判断IP地址是否是xxx.xxx.xxx.xxx:port代码package helperimport ( "net" "regexp" "strings")func HostAddrCheck(addr string) bool { items:=strings.Split(addr,":") if items==nil||len(items)...原创 2018-10-10 18:56:26 · 5202 阅读 · 0 评论 -
go随聊-随机数包fastrand
fastrandgo get github.com/NebulousLabs/fastrandfastrand implements a cryptographically secure pseudorandom number generator. The generator is seeded using the system's default entropy source, and...原创 2018-10-10 18:42:21 · 2149 阅读 · 0 评论 -
go随聊-uuid生成
本文介绍一个go 生成UUID的包UUID package for Go languageThis package provides pure Go implementation of Universally Unique Identifier (UUID). Supported both creation and parsing of UUIDs.Installationgo ...原创 2018-10-10 19:10:34 · 878 阅读 · 0 评论 -
go随聊-非常快的son解析包
A high-performance 100% compatible drop-in replacement of "encoding/json"吐槽一下,这么NB了一个logo都没有:)How to getgo get github.com/json-iterator/goUsage100% compatibility with standard lib和标准包完全兼容...原创 2018-10-31 10:49:51 · 2617 阅读 · 0 评论 -
go随聊-一个比较好用的json处理包(Jeffail/gabs)
本文介绍一个开源的json处理包Gabs is a small utility for dealing with dynamic or unknown JSON structures in golang. It's pretty much just a helpful wrapper around the golang json.Marshal/json.Unmarshal behavio...原创 2018-10-30 19:00:26 · 1402 阅读 · 0 评论 -
go随聊-临时对象池sync.Pool
sync.Pool 一个sync.Pool对象就是一组临时对象的集合。Pool是协程安全的。Pool用于存储那些被分配了但是没有被使用,而未来可能会使用的值,以减小垃圾回收的压力。我们可以把sync.Pool类型值看作是存放可被重复使用的值的容器。此类容器是自动伸缩的、高效的,同时也是并发安全的。Pool定义type Pool struct { func (p ...原创 2018-10-10 18:35:01 · 775 阅读 · 0 评论 -
go随聊-闭包
什么是闭包 闭包就是一个匿名函数和一个外部变量(成员变量)组成的一个整体 ,通俗的讲就是一个匿名函数中引用了其外部函数内的一个变量而这个变量和这个匿名函数的组合就叫闭包。如下代码所示:func inner() func() int { count:=0 return func() int { count++ return count }}inner函数中...原创 2018-10-26 16:59:19 · 202 阅读 · 0 评论