golang
yangxiaodong88
让编程更简单,用好轮子,创造轮子。
展开
-
golang 平时遇到问题 积累
通道有无缓冲区 的应用场景 以及理解无缓冲 实现同步package mainimport "fmt"func main() { t := make(chan int) fmt.Println("waiting") go func() { fmt.Println("some") }() //t <- 100 // 明白了 任何一个操作都会阻塞到这里 只有消费掉才可...原创 2020-02-29 12:50:43 · 336 阅读 · 0 评论 -
golang 接口
接口一组method 签名的组合 通过interface 来定义对象的一组行为interface 就是一组抽象方法的集合interface 类型interface 类型定义了一组方法, 如果某个对象实现了某个接口中的方法, 则此对象就实现了此接口interface 值如果定义了一个interface 变量, 那么这个变量里面可以存实现这个interface的任意类型的对象。空int...原创 2020-02-27 18:08:07 · 396 阅读 · 0 评论 -
Golang 下划线语义
丢弃返回值_,err := Test()用在变量接口断言 用来判断对象是否实现了接口package mainimport ( "fmt" "yangxd/te")var _ Foo = Dog{} // 如果没有实现 则 会编译失败 用来判断Dog 对象是否实现了Foo 接口func main() { fmt.Println("主要") fmt.Println("...原创 2020-01-08 14:41:35 · 353 阅读 · 0 评论 -
socket 通信 封装 协议 基础
Big Endian && Little Endianendian 字节存储次序 端模式Big Endian 是低端地址存放最高有效字节(MSB)Little Endian 低端地址存放最低有效字节(LSB)以数字 0x12345678 不同字节CPU 中的存储顺序Big Endian低地址 ...原创 2020-01-02 15:39:39 · 665 阅读 · 0 评论 -
redis分布式锁的实现 golang
代码获得锁 释放锁分布式锁可用必须满足一下四个条件互斥性 在任意时刻 只有一个客户端能获取到锁不会发生死锁 即使有一个客户端 在持有锁的期间奔溃而没有主动解锁, 也能保证后续客户端能解锁具有容错性 只要大部分的redis 节点正常运行, 客户端就可以加锁和解锁解锁加锁同一个客户端。 加锁和解锁必须是同一个客户端,客户端不能把别人加的锁给解除了。package main...原创 2019-12-16 12:50:28 · 903 阅读 · 0 评论 -
golang redigo 发布订阅使用
redigo 对 发布订阅的使用redigo 对redis 的发布订阅机制放在pubsub.go 中订阅主题后 通过Receive() 函数接受发布订阅主题的消息// Receive returns a pushed message as a Subscription, Message, Pong or error.// The return value is intended to be...原创 2019-07-16 16:32:32 · 1478 阅读 · 1 评论 -
go语言协程 并发
协程目前比较流行的并发模式多进程 资源开销最大 好处 进程间 互不影响。 系统开销大 所有进程都是由内核管理的。多线程 多线程在大部分操作系统上面都属于系统层面的并发模式。 比多进程的开销小, 但是总体开销大基于 回调的非阻塞 异步IO协程 本质是用户态线程 不需要操作系统来进行抢占式调度, 且是在真正 的实现中寄存于线程中。因此线程开销很小, 有效的提高线程任务的并发性, 而避免多...原创 2019-07-23 17:22:01 · 548 阅读 · 0 评论 -
golang time.Duration() 问题
问题package mainimport "time"func main(){ connectTimeout := 10 time.Sleep(time.Second*connectTimeout)}这样使用会报错int and time.Duration are different types. You need to convert the int to a ti...原创 2019-07-17 13:36:15 · 4807 阅读 · 0 评论 -
golang sync.WaitGroup 用法
执行一个简单协程package mainimport ( "fmt" "time")func main(){ for i := 0; i < 100 ; i++{ go fmt.Println(i) } time.Sleep(time.Second)}分析:为什么会有sleep 呢, 主线程为了等待goroutine...原创 2019-07-17 16:57:06 · 3881 阅读 · 0 评论 -
golang Timer Tricker
Timer Tricker 代码package mainimport ( "fmt" "sync" "time")/***ticker只要定义完成,从此刻开始计时,不需要任何其他的操作,每隔固定时间都会触发。*timer定时器,是到固定时间后会执行一次*如果timer定时器要每隔间隔的时间执行,实现ticker的效果,使用 func (t *Timer) Reset(d D...原创 2019-07-17 17:43:17 · 724 阅读 · 0 评论 -
golang 疑问知识点总结
函数作为值 作为类型在go 中函数也是一种变量, 我们可以通过type 来定义它, 他的类型就是所有拥有相同的参数, 相同的返回值的一种类型。type typeName func(input1 inputType1 , input2 inputType2 [, ...]) (result1 resultType1 [, ...])函数作为类型的好处:可以把这个函数当作类型来传递函数 当作...原创 2019-07-16 15:57:27 · 304 阅读 · 0 评论 -
golang int int64 之间的转化 string
1、string 转intint,err := strconv.Atoi(string)2、 string 转int64int64Obj , err := strconv.Parselnt(string, 10, 64)3、int 转strings, err := strconv.itoa(int)4、int64 转成strings , err := strconv.Forma...原创 2019-07-04 14:48:14 · 8630 阅读 · 2 评论 -
golang使用sqlx 操作 mysql
sqlx 官方文档https://github.com/jmoiron/sqlx文档甚好, 基本的 连接和使用都有 , 除了 insert 外最经常使用到的就是 select one 这些比 原生的sql api 好用太多 封装了 连接 建立关闭 等操作package mainimport ( "database/sql" "fmt" "log" ...原创 2019-06-01 18:23:45 · 7695 阅读 · 0 评论 -
Golang iris API文档生成器
官方文档https://github.com/betacraft/yaag这里有各个 框架的 使用方式安装使用1、 下载YAAG 中间件go get github.com/betacraft/yaag/...2、引入对应的包Import github.com/betacraft/yaag/yaagImport github.com/betacraft/yaag/irisyaag...原创 2019-03-24 14:37:02 · 5108 阅读 · 1 评论 -
golang闭包递归研究
闭包理解闭包:闭包是指延伸了作用域的函数, 其中包含函数定义体中引用、但是不在定义体中定义的非全局变量。函数是不是匿名没有关系, 关键是他能访问定义体之外定义的非全局变量。闭包基本概念:闭包是可以包含自由(未绑定到特定对象)变量的代码块, 这个变量不在这个代码块内或者任何全局上下文中定义,而是在定义代码块的环境中定义。要执行的代码块(由于自由变量包含在代码块中, 所以这些自由变量以及他们引...原创 2019-05-08 15:15:31 · 1531 阅读 · 0 评论 -
govendor 使用文档
GO管理工具 govendor主页:github.com/kardianos/govendor快速安装使用:go get -u github.com/kardianos/govendor安装之后,会在 GOPATH/bin目录下面。 (工作目录下)流程# 1、创建项目,在GOPATH目录下,# 2、使用 govendor init 初始化项目,生成vendor 文件夹和 vend...原创 2019-05-14 18:24:32 · 395 阅读 · 0 评论 -
golang 环境安装
GoGo:国外: https://golang.org/下载地址:国外: https://golang.org/ 需要翻墙。国内: https://studygolang.com/dl配置GOPATH与GOROOT:# Windows GOPATH = E:\GoProject GOROOT = D:\Go\ # Linux export GOPATH = /...原创 2019-05-14 18:27:48 · 341 阅读 · 0 评论 -
golang 集成logrus 到项目中
github 官网https://github.com/sirupsen/logrus代码package main/**依赖网址https://github.com/Sirupsen/logrushttps://github.com/onrik/logrushttps://github.com/keepeye/logrus-filename高级实用https://juej...原创 2019-05-24 19:04:14 · 933 阅读 · 0 评论 -
golang yaml使用
config.yaml 文件mysql: host: 192.168.1.300redis: database: 10mongo: host: 192.168.1.300config.gopackage yamlDemoimport ( "gopkg.in/yaml.v2" "io/ioutil" "log" "os" "path/filepath" "...原创 2019-05-24 19:08:30 · 894 阅读 · 1 评论 -
mgo 并发
官方权威https://www.mongodb.com/blog/post/running-mongodb-queries-concurrently-with-go代码package mainimport ( "fmt" "github.com/globalsign/mgo" "github.com/globalsign/mgo/bson")// mgo 并发处理 https...原创 2019-05-27 18:15:31 · 697 阅读 · 0 评论 -
mgo基本使用
添加db.getCollection('opinion').find({"_id":ObjectId("5cebad9dfd86550001f72c29")})err = c.Insert(&User{ Id_: bson.NewObjectId(), Name: "yang", Age: 12, JoinedAt: ...原创 2019-05-27 19:51:32 · 946 阅读 · 0 评论 -
golang redigo 基本使用
序列化 反序列化为了 获得的数据能是我们想要的数据 类型需要对数据进行 序列化 和反序列化序列化在redis 存值的时候需要否则 有 slice 的可能就无法解析func Serialization(value interface{}) ([]byte, error) { if bytes, ok := value.([]byte); ok { return bytes, nil...原创 2019-06-01 16:27:01 · 4426 阅读 · 1 评论 -
go windows 下载安装 配置环境变量
下载地址https://pan.baidu.com/s/1eS2Exkm?errno=0&errmsg=Auth%20Login%20Sucess&&bduss=&ssnerror=0&traceid=安装1 直接点击安装 下一步下一步 默认安装 C:\Go\ 里面就可以默认的挺好的 Go 语言需要配置 GOROOT 和 Path 两...原创 2018-03-21 13:24:28 · 3137 阅读 · 0 评论