golang
archer.wu
当你的才华还撑不起你的野心的时候,就应该静下心来学习;当你的能力还驾驭不了你的目标时,就应该沉下心来,历练;梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想要怎样的人生,静心学习,耐心沉淀,送给自己,共勉。
展开
-
golang--sort比较大小
在golang中比较一个数据中结构体的大小,可以使用如下的方式:实现Swap Len Less三个方法即可。下面直接上货:type T []tttype tt struct { roomId int64 score float64 gameMin float64}func (t T) Swap(i, j int) { t[i], t[j] = t...原创 2020-01-13 17:18:55 · 2304 阅读 · 0 评论 -
golang 定时器封装——支持超时和函数自定义
如标题,封装一个golang的定时器,能够设置超时时间和定时器的interval。开启定时器后使用一个新的goroutine进行倒计时操作。好,下面上货。package commonimport ( "context" "fmt" "github.com/google/uuid" "go.uber.org/atomic" "time")const ( STOP ...原创 2020-01-07 12:15:34 · 1355 阅读 · 0 评论 -
golang定时器实现
golang定时器,需求是能够在指定时间后停止。或某种条件出发停止。https://golang.google.cn/pkg/time/#example_Tick好,下面上货。package mainimport ( "context" "fmt" "sync" "time")func main() { fmt.Println(123) go goClock...原创 2020-01-07 10:52:49 · 874 阅读 · 0 评论 -
golang引用自定义模块(类似java的maven)——github版
在golang中,可以通过 go mod的mod文件中添加依赖,依赖其他模块。这些模块既可以是来自第三方的模块,也可以是来自自己的模块。例如:下面代码的含义是 模块foolDealer 依赖模块 github.com/google/wire 和 github.com/wild46cat/golibmodule foolDealergo 1.13require github...原创 2019-12-25 16:42:53 · 3548 阅读 · 0 评论 -
gin 跨域问题
在使用gin框架的时候需要处理跨域问题。下面是具体的解决方案。func main() { r := gin.Default() r.Use(Cors())}func Cors() gin.HandlerFunc { return func(c *gin.Context) { method := c.Request.Method //请求方法...原创 2019-12-19 11:02:46 · 1588 阅读 · 0 评论 -
go配置文件参数被执行shell命令覆盖
经常会有这样的需求,就是在执行shell脚本构建程序的时候,希望能够在shell中指定某些配置文件的值。也就是说,shell命令中的优先级要高于配置文件的优先级。configor(https://github.com/jinzhu/configor)也只支持的,看下面的脚本cd ../srcgo build -o ../maincd ../CONFIGOR_ENV=test ...原创 2019-12-16 23:25:06 · 339 阅读 · 0 评论 -
go配置文件区分环境信息
继续上一篇文章介绍的https://github.com/jinzhu/configor,我们现在讨论如何隔离各个环境的配置文件。简单的说,我们在开发环境,生产环境和测试环境使用的配置文件应该是不同的。那么configor是如何处理这个问题呢?好,下面上货。1、如果本地执行(使用ide时)使用指定文件例如配置文件是config.yml 那么,会读取config.yml...原创 2019-12-16 23:20:50 · 2978 阅读 · 0 评论 -
go-configor配置文件支持热加载
在编写go程序的时候我们加载配置有多中方式,比较常用的还是配置文件。我们需要配置文件能够热加载(当配置发生变化后)不用重新启动程序,就能够使配置生效。我们采用的是开源的配置文件方式https://github.com/jinzhu/configor好,下面上货。package configimport ( "fmt" "github.com/jinzhu/confi...原创 2019-12-16 23:15:10 · 1073 阅读 · 0 评论 -
golang中context使用——WithTimeout和WithDeadline
程序和上一篇的withCancel是类似的,只是创建子context的方式不同,这里使用的是withTimeout和WithDeadline的方式。下面,上代码:package mainimport ( "context" "errors" "fmt" "time")var c = 1func doSome(i int) error { c++ fmt.Prin...原创 2019-12-07 03:12:42 · 5362 阅读 · 2 评论 -
golang中context基本使用withcancel
用一个简单的程序介绍一下withcancel的context,我们一般写goroutine的时候会在里面做一个for{},同时在for的里面还会做一个select{}判断接收当前的chan,不同的chan做不同的动作。context也是利用了这样的结构,context提供了取消函数,cancelFunc可以随时终止goroutine。方式goroutine中的for循环一直循环下去。p...原创 2019-12-07 03:03:47 · 9335 阅读 · 0 评论 -
golang中context的简介
本文主要参考官方介绍https://blog.golang.org/context实用的例子http://www.gorillatoolkit.org/pkg/context说明文章https://www.cnblogs.com/qcrao-2018/p/11007503.html其中我认为context需要注意的是下面的内容:在官方博客里,对于使用 context...原创 2019-12-07 02:43:30 · 223 阅读 · 0 评论 -
golang struct转化成map
常见的struct转化可以通过json先转换成字符串,然后再转换成map对象。现在介绍的反射的方式,其中需要注意的是,反射不能够获取struct中没有被暴露出的变量(小写开头的变量)。好,下面上货。package demoimport ( "fmt" "reflect" "testing" "time")type CommonObj struct { Name ...原创 2019-11-22 01:02:48 · 3802 阅读 · 0 评论 -
golang继承——接口父类子类
从面向对象的角度上看,总会有一些使用子类不想做,希望父类去做的事情,在java这样的纯面向对象的语言中,方法就是使用父类和子类,子类通过继承父类的方法,实现子类自己的属性,如果没有某个方法没有经过子类重写,那么这个方法通过子类调用时,就会调用父类的方法。在go中也有这样的机制。下面是具体的实现代码。简单的说就子类能够按照父类的方法框架来设计,同时父类还把一些子类自身的个性化的方法进行了抽象...原创 2019-11-21 02:58:36 · 5432 阅读 · 0 评论 -
golang kafka客户端实现
最近在弄golang框架的事情,连接kafka,目前采用的是sarama进行连接,开发测试是ok的,但是考虑到在生产环境中使用。sarama还是有些问题的,问题出在它的consumer上,不能够直接使用,需要进行简单的处理,首先是处理topic和groupid的问题。我们知道在kafka消费的时候,在同一个消费者组中是共同消费topic的,也就是说,后端服务能够共享的去消费topic中的内容,...原创 2019-11-21 02:32:14 · 2008 阅读 · 0 评论 -
golang反射——执行函数
在写golang框架的时候,免不了需要处理类似方法执行的问题,由于框架层对业务层的具体方法是不清楚了,只提供了基本的输入和输出格式,所以就需要使用一种方式,适配业务层的函数调用。golang提供了反射,其中最终要的两个内容是Type和Value。通过反射,我们可以new一个struct,或者实现赋值等操作。可以简单理解为使用另一种方式实现对程序的处理。说了这么多,本篇文章着重介绍如何使用g...原创 2019-11-12 22:28:01 · 2550 阅读 · 0 评论 -
golang依赖注入——wire
最近在做golang的框架,发现golang同样需要类似java中spring一样的ioc依赖注入框架。如果项目规模小的情况下,是否有依赖注入框架问题不大,但是当项目变大之后,有一个合适的依赖注入框架是十分必要的。通过调研,了解到的golang中常用的依赖注入框架主要有 inject dig等等。但是今天要介绍的是wire,一个编译期实现依赖注入的框架。好,下面上货。首先添加依赖...原创 2019-11-12 22:18:40 · 5318 阅读 · 0 评论 -
golang接口和多态的基本使用
首先简单的描述一下golang中的struct interface的作用。简单来说struct代表的是一种结构,比如user有name和age,那么这两个属性就在struct中。而一个struct拥有什么样的行为需要有对应的方法来支持。type user struct{ Name string Age int}比如上面的user结构体,如果想让user有其他的行为需...原创 2019-11-06 23:06:34 · 551 阅读 · 0 评论 -
vgo的基本使用
1、新建文件夹go mod init test2、查看一下文件夹中多的内容,文件夹中会多出一个go.mod的文件module testgo 1.123、编写程序测试一下依赖,首先需要配置vgo的依赖4、修改go.mod,添加一个protobuf的第三方库依赖module testrequire ( github.com/gogo/protobuf...原创 2019-11-03 17:03:22 · 807 阅读 · 0 评论