golang
qq_28710983
这个作者很懒,什么都没留下…
展开
-
排序之插入排序
插入排序(从小到大)原创 2022-08-07 12:09:06 · 109 阅读 · 0 评论 -
grpc验证字段
安装go get -u github.com/envoyproxy/protoc-gen-validate使用方法:float order_money = 4[(validate.rules).float.gt = 1];message OrderMain { int32 order_id = 1; string order_no = 2; int32...原创 2020-02-22 19:02:18 · 1366 阅读 · 0 评论 -
grpc-gateway
第三方库https://github.com/grpc-ecosystem/grpc-gateway安装步骤go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gatewaygo get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-s...原创 2020-02-22 18:59:46 · 877 阅读 · 0 评论 -
gprc-go插件安装
安装grpc-gogo get -u google.golang.org/grpc安装protoc下载对应版本的protoc添加环境变量(要重新添加protoc的bin目录环境变量不要复制到其他的环境变量)https://github.com/protocolbuffers/protobuf/releases安装protoc-gen-gogo get -u...原创 2020-02-22 18:56:22 · 324 阅读 · 0 评论 -
RabbitMq简单模式-工作模式
简单模式生产者的消息被负载均衡到各个消费者去,一条消息只会被一个消费者消费,不会产生一条消息重复消费的问题rabbitmq的数据源格式amqp://user:pass@IP:5672/VirtualHostRabbitMq结构体type RabbitMq struct { conn *amqp.Connection chan...原创 2019-07-04 11:24:02 · 353 阅读 · 0 评论 -
RabbitMq发布与订阅模式
发布与订阅模式生产者的消息会被所有的消费者获取发布订阅模式下创建RabbitMq实例发布订阅模式queueName必须为空,要传入交换机exChangeName的名称,routingkey为空func NewRabbitMqPubSub(exchangeName string) *RabbitMq { //创建mq实例 rabbitmq := NewRabbitMq("", ...原创 2019-07-04 11:37:11 · 514 阅读 · 0 评论 -
RabbitMq路由模式
路由模式路由模式下创建RabbitMq实例需要传入交换机exchange和routingkeyfunc NewRabbitMqRouting(exchange, routingKey string) *RabbitMq { //创建rabbitmq实例 rabbitmq := NewRabbitMq("", exchange, routingKey) return rabbitmq...原创 2019-07-04 11:57:18 · 384 阅读 · 0 评论 -
RabbitMq话题模式(topic)
话题模式话题模式主要使用routingKey来进行路由匹配,匹配规则如下,要注意key规则其中"*"用于匹配一个单词, "#"用于匹配多个单词(可以是零)匹配imooc.* 表示可以匹配 imooc.hello ,但是imooc.hello.one需要使用imooc.#才可以匹配到话题模式创建RabbitMq实例func NewRabbitMqTopic(exchang...原创 2019-07-04 12:10:34 · 1161 阅读 · 0 评论 -
json.RawMessage的使用
很多情况下我们需要判断json里面的一个字段,然后根据这个字段的类型,进行解析下面的字段类型,我们则使用json.RawMessagepackage mainimport ( "encoding/json" "fmt")type TestStruct struct { Type int Body json.RawMessage}type Person s...原创 2019-07-19 07:28:24 · 8004 阅读 · 0 评论 -
防止多次递交表单
不知道你是否曾经看到过一个论坛或者博客,在一个帖子或者文章后面出现多条重复的记录,这些大多数是因为用户重复递交了留言的表单引起的。由于种种原因,用户经常会重复递交表单。通常这只是鼠标的误操作,如双击了递交按钮,也可能是为了编辑或者再次核对填写过的信息,点击了浏览器的后退按钮,然后又再次点击了递交按钮而不是浏览器的前进按钮。当然,也可能是故意的——比如,在某项在线调查或者博彩活动中重复投票。那我们如...转载 2019-07-26 00:43:42 · 155 阅读 · 0 评论 -
go-xorm mysql锁测试
mysql数据库脚本DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `balance` decimal(10,2) NOT NULL DEFAULT '0.00', `v...原创 2019-09-15 20:56:57 · 1245 阅读 · 0 评论 -
grpcx框架分析二: client端分析
项目地址:https://github.com/yakaa/grpcxgrpc client常规使用方法func main() { conn, err := grpc.Dial("127.0.0.1:9000", grpc.WithInsecure()) if err != nil { log.Fatalf(" grpc.Dial %v", err) } defer conn...原创 2019-06-23 23:51:28 · 846 阅读 · 0 评论 -
grpc框架分析一 : Server分析
项目地址:https://github.com/yakaa/grpcxgrpc官网使用案例参考案例结合本框架分析:监听tcp端口 生成一个*grpc.Server对象, 把*grpc.Server对象和 实现UserServiceServer接口的实例绑定起来 启动grpc服务器func main() { lis, err := net.Listen("tcp",fmt.Sp...原创 2019-06-23 23:35:33 · 3774 阅读 · 0 评论 -
etcd服务负载均衡
负载均衡接口var ( ErrNotHaveNodes = errors.New("not have node"))type LoadBalance interface { Name() string Select(ctx context.Context, nodes []*registry.Node) (node *registry.Node, err error)}N...原创 2019-06-22 16:51:12 · 2742 阅读 · 0 评论 -
Go Modules 详解使用
转载:https://www.njphper.com/posts/8b58ea6d.htmlModule自从Go官方从去年推出 1.11 之后,增加新的依赖管理模块并且更加易于管理项目中所需要的模块。模块是存储在文件树中的 Go 包的集合,其根目录中包含 go.mod 文件。 go.mod 文件定义了模块的模块路径,它也是用于根目录的导入路径,以及它的依赖性要求。每个依赖性要求都被写为...转载 2019-05-17 11:10:16 · 3708 阅读 · 0 评论 -
docker部署golang应用
1、编写DockerfileFROM golangMAINTAINER 作者WORKDIR /app #程序运行的目录 COPY . . #把当前dockerfile目录内容全部复制到workdir目录EXPOSE 18081 #docker需要使用到的服务端口CMD ["./dockertest", ”-f“, "conf/config.json"] #启动...原创 2019-05-27 21:37:39 · 1362 阅读 · 0 评论 -
golang交叉编译
编译linuxCGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build编译windowsCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build编译macCGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go直接执行命令即可,go...原创 2019-05-27 21:42:27 · 297 阅读 · 0 评论 -
转载:Golang slice的误解(切片的坑)
slice的介绍:在Go语言的官方文档中,我们发现Golang除了有array的数据还有一个slice,而array和slice的区别在于1.array是固定长度,slice是可变长度2.array是值类型,slice是引用类型array和slice的声明:切片数组的声明slice的坑:在对于一个刚用golang开发项目的小白来说,经常会碰到一些坑和误解,接下写一些...转载 2019-05-27 22:20:00 · 1910 阅读 · 0 评论 -
leaf源码分析
https://blog.csdn.net/screscent/article/category/7598642转载 2019-06-08 11:40:59 · 376 阅读 · 0 评论 -
leaf protobuf通讯demo
https://blog.csdn.net/ouzhengai/article/details/81050692转载 2019-06-09 10:41:07 · 609 阅读 · 0 评论 -
golang制作一个斗地主游戏服务器
https://blog.csdn.net/warrially/article/details/88555720转载 2019-06-09 10:53:54 · 1544 阅读 · 0 评论 -
etcd服务注册一
EtcdRegistry初始化init函数调用pluginMgr的RegisterPlugin函数func init() { registry.RegisterPlugin(etcdRegistry) go etcdRegistry.run()}经过一次包装后实际是调用plugin模块的registerPlugin函数func RegisterPlugin(registry ...原创 2019-06-19 23:49:01 · 1307 阅读 · 1 评论 -
zinx框架分析
服务器流程1、首先调用Server模块的NewServer方法初始化一个Server方法2、在NewServer方法中会初始化Server模块的MsgHandler 和 ConnMgr, msgHandler是路由管理模块。ConnMgr是管理客户端连接的模块3、注册钩子函数,这两个函数分别是框架留给用户的接口方法,用户处理当有用户连接进来之后和当用户断开链接之前需...原创 2019-06-16 23:44:01 · 3478 阅读 · 0 评论 -
etcd服务发现
etcd注册模块是如何保证节点的信息都是正确的,如果某个节点出现故障,是如何发现的,在etcdRegistry模块的run函数中,有一个ticker 10秒钟执行一次,这个ticker的作用就是没10秒从etcd读取到新的节点信息,保存到allServiceInfo的map中func (er *EtcdRegistry) run() { ticker := time.NewTicker...原创 2019-06-22 16:00:40 · 1398 阅读 · 0 评论 -
Golang传值与传址
1、map是传址的testMap函数内的map的改变会影响main函数的map的值package mainimport ( "fmt")func main(){ m := make(map[int]string) m[1] = "1" m[2] = "2" m[3] = "3" fmt.Printf("%p\n",m) t...原创 2019-04-18 15:06:29 · 1282 阅读 · 0 评论