![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
goalng
雪东~
这个作者很懒,什么都没留下…
展开
-
mongodb for go driver
还是给自己看,单纯记录/*@Time : 2020/9/2 14:37@Author : xd@File : main@Software: GoLand*/package mainimport ( "context" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/.原创 2020-09-02 16:40:20 · 295 阅读 · 0 评论 -
最简单mqtt协议客户端实现
懒得写介绍了,直接放代码,给自己看的!/*@Time : 2020/8/24 13:48@Author : xd@File : main.go@Software: GoLand*/package mainimport ( "fmt" MQTT "github.com/eclipse/paho.mqtt.golang" "github.com/gogf/gf/os/glog" "github.com/gogf/gf/os/gtime" "time")func main()原创 2020-08-25 09:39:28 · 808 阅读 · 0 评论 -
超轻量级golang的Goroutine池
本文是阅读GoFrame内grpool包的理解大致理解// 这是个Goroutine的 pooltype Pool struct { limit int //池子中最大数量 count *gtype.Int // 当前运行的任务计数器,并发安全,郭大nb list *glist.List //异步工作的队列 closed *gtype.Bool // 是否关闭的状态}两种工作方式,一种是链式操作,另一种非链式操作,这里只讲链式操作第一步初始化一个池子,可.原创 2020-07-01 15:58:59 · 768 阅读 · 0 评论 -
goKit微服务系列文章二:增加log中间件
再系列文章一的基础上 增加 loggings.go文件/*@Time : 2020/6/22 14:04@Author : zhb@File : loggings@Software: GoLand*/package mainimport ( "github.com/go-kit/kit/log" "time")type loggingMiddleware struct { Server logger log.Logger}//日志功能的中间件结构体func Logg原创 2020-06-22 15:34:44 · 847 阅读 · 0 评论 -
goKit微服务系列文章一:http rest
本文主要为个人记录,首先实现的是一个简单的基于HTTP的微服务实例,将以REST形式对外暴露,具体要求如下:使用gokit构建REST接口;URL格式为:/calculate/{type}/{a}/{b},请求方法为POST;server.go 文件/*@Time : 2020/6/20 10:20@Author : zhb@File : server@Software: GoLand*/package mainimport "errors"type Server inte.原创 2020-06-20 13:03:44 · 431 阅读 · 0 评论 -
golang操作excel
Excelize安装go get github.com/360EntSecGroup-Skylar/excelize如果您使用 Go Modules 管理软件包,请使用下面的命令来安装最新版本。go get github.com/360EntSecGroup-Skylar/excelize/v2创建 Excel 文档下面是一个创建 Excel 文档的简单例子:package mainimport ( "fmt" "github.com/360EntSecGroup原创 2020-06-19 14:31:41 · 6743 阅读 · 0 评论 -
golang监听文件变动
废话不多说,直接上抄袭来的demopackage mainimport ( "log" "github.com/fsnotify/fsnotify")func main() { watcher, err := fsnotify.NewWatcher() if err != nil { log.Fatal(err) } defer watcher.Close() done := make(chan bool) go func() { for { select .原创 2020-06-19 13:28:38 · 3469 阅读 · 0 评论 -
livego介绍以及最全使用方法介绍
昨天用nginx搭建了一套rtmp的服务器,心血来潮找到了用go语言写的livego,官方提供的使用手册不全,自己看源码琢磨出来的使用方式,先放一波官方介绍!简单高效的直播服务器:安装和使用非常简单;纯 Golang 编写,性能高,跨平台;支持常用的传输协议、文件格式、编码格式;支持的传输协议RTMPAMFHLSHTTP-FLV支持的容器格式FLVTS支持的编码格式H264AACMP3安装直接下载编译好的二进制文件后,在命令行中执行。从 Docker.原创 2020-06-11 10:42:56 · 37193 阅读 · 14 评论 -
grpc同时支持rpc以及http服务
假定我们有一个项目需求,希望用Rpc作为内部API的通讯,同时也想对外提供Restful Api,写两套又太繁琐不符合于是我们想到了Grpc以及Grpc Gateway,这就是我们所需要的准备环境假设以及安装好go环境以及grpc所需的组件GolangGrpcProtoc PluginProtocol BuffersGrpc-gateway准备构建所需组件// +build toolspackage toolsimport ( _ "github.com/grp原创 2020-06-08 11:02:56 · 2626 阅读 · 1 评论 -
OpenTracing语义标准
语义惯例OpenTracing标准 描述的语言无关的数据模型,以及OpenTracing API的使用方法。在此数据模型中,包含了两个相关的概念 Span Tag 和 (结构化的) Log Field,尽管在标准中,已经明确了这些操作,但没有定义Span的tag和logging操作时,key的使用规范。这些语义习惯通过这篇文档进行描述。这篇文档包括两个部分:一. 通过表格罗列出所有的tag和logging操作时,标准的key值。二.描述在特定的典型场景中,如何组合使用这些标准的key值,进行建模。版本转载 2020-06-03 09:44:39 · 395 阅读 · 0 评论 -
Sentinel 的golang版本简单使用以及介绍
开始对 Sentinel 进行相关配置并进行初始化埋点(定义资源)配置规则对 Sentinel 进行相关配置并进行初始化使用 Sentinel 时需要在应用启动时对 Sentinel 进行相关配置并触发初始化。 api包下提供如下函数: InitDefault():从环境变量中读取相应配置来初始化 Sentinel,若环境变量不存在则使用默认值 Init(configPath string):从给定的 YAML 文件中读取相应配置来初始化 Sentinel。日志目录配置会从环境变量读取或原创 2020-06-02 17:08:27 · 3598 阅读 · 0 评论 -
以太坊智能合约
pragma solidity ^0.4.8;contract Token{ // token总量,默认会为public变量生成一个getter函数接口,名称为totalSupply(). uint256 public totalSupply; /// 获取账户_owner拥有token的数量 function balanceOf(address _owner) constant returns (uint256 balance); //从消息发送者账户中原创 2020-05-13 16:06:16 · 207 阅读 · 0 评论 -
以太坊的 ChainId 与 NetworkId
只简单介绍这两个玩意是干啥的什么是 ChainIdChainId 是 EIP-155 引入的一个用来区分不同 EVM 链的一个标识。如下图所示,主要作用就是避免一个交易在签名之后被重复在不同的链上提交。最开始主要是为了防止以太坊交易在以太经典网络上重放或者以太经典交易在以太坊网络上重放。在以太坊网络上是从 2675000 这个区块通过 Spurious Dragon 这个硬分叉升级激活。引入 ChainId 后,带来了哪些影响呢?1.创建新的 EVM 链时,需要在 genesis 文件中指定 C.原创 2020-05-13 12:01:32 · 4951 阅读 · 2 评论 -
goland解决 No usages found in All Places问题
今天突然遇到了一个神奇的问题如下图,很多代码显示为灰色的未引用代码,但是确实该代码都有被引用。就很难受解决办法File -> Invalidate Caches/Restart点击第一个选项重启即可解决...原创 2020-05-07 14:41:22 · 6806 阅读 · 0 评论 -
golang 如何让程序优雅退出
最近公司交易所的撮合系统遇到了一个非常极端的bug,程序在匹配完买卖订单并且操作完redis内的数据之后,准备发送kafka的时候程序被意外kill掉了数据丢失,导致盘口信息更改完了,结果后续的程序无法处理!最终结果变相的解决了//就不写mian函数了,直接写我内部处理的func StartMatching() { //获取所有交易市场 MarketList := v1.GetAll...原创 2019-12-13 09:39:30 · 1726 阅读 · 0 评论 -
解决kafka在小内存的linux服务器上无法启动以及卡死服务器的问题
首先的一个说明几个排除问题的点就是需要java环境,版本不要太低安装java命令yum install -y java-1.11.0-openjdk*第二点,zookeeper默认的缓存目录是/tmp/zookeeper默认可能创建不成功,手动创建,或者是修改一下!修改启动内存占用过高,此方法只能解决一时,不能解决很久,只是能解决掉你kafka启动卡死服务器的问题//找到这块代...原创 2019-11-11 17:26:27 · 1361 阅读 · 0 评论 -
一种low版一键启动多服务,一键kill多服务的解决办法
首先介绍大体私聊,就是服务启动的时候获取pid并写入一个文件记录,保证文件可以重新覆盖即可大致三个shell例子启动脚本#!/bin/shnohup ./CapitalUpdate >> logs/CapitalUpdate.log &nohup ./changeOrderexec >> logs/changeOrderexec.log &noh...原创 2019-11-11 16:14:43 · 230 阅读 · 0 评论 -
golang报错 import cycle not allowed
golang不允许循环导包,如果检测到import cycle,会在编译时报错,通常是因为循环调用的问题,简单的说就是a包中调用了b中的方法或者是其他的,然后b中也调用了a的某个方法或者是其他的,这是golang不允许的,仔细检查一下代码吧,...原创 2019-11-06 09:39:22 · 728 阅读 · 0 评论 -
golang的指针的一些理解
Go指针理解Go 有指针,但是没有指针运算。你不能用指针变量遍历字符串的各个字节。在 Go 中调用函数的时候,得记得变量是值传递的。通过类型作为前缀来定义一个指针’ * ’:var p * int。现在 p 是一个指向整数值的指针。所有新定义的变量都被赋值为其类型的零值,而指针也一样。一个新定义的或者没有任何指向的指针,有值 nil。在其他语言中,这经常被叫做空(NULL)指针,在 Go 中就...原创 2019-08-31 13:41:13 · 383 阅读 · 0 评论 -
golang beego框架orm使用连接池记录
beego的orm默认是设置不了超时时间的package modelsimport ( "errors" "fmt" "github.com/astaxie/beego" "github.com/astaxie/beego/orm" "net/url" "os" "reflect" "strings" //"database/sql" _ "github.com/go...原创 2019-07-22 17:54:33 · 1751 阅读 · 0 评论 -
深入Golang Runtime之Golang GC的过去,当前与未来
对于学习Java的开发来说, GC并不陌生, 实际上Go的GC流程与Java的CMS实现上不尽相同, 但是流程基本类似. 而对于公司大部分C/C++的开发者来说, 习惯了尽量使用栈对象, 手动管理内存,尽量少new, 对GC的一些术语, 流程可能就有点陌生了, 或许可能对GC有一些些怀疑(实际上20世纪90年代后诞生的, 得到广泛应用的语言, 只有VB没有自动内存管理).如果从手动管理内存, ...转载 2019-09-17 15:52:45 · 7672 阅读 · 0 评论 -
Golang出于性能考虑建议
原文出自GO入门指南!尽可能的使用:=去初始化声明一个变量(在函数内部)尽可能的使用字符代替字符串尽可能的使用切片代替数组尽可能的使用数组和切片代替映射(map集合)如果只想获取切片中某项值,不需要值的索引,尽可能的使用for range去遍历切片,这比必须查询切片中的每个元素要快一些当数组元素是稀疏的(例如有很多0值或者空值nil),使用映射(map集合)会降低内存消耗初始化映射...原创 2019-09-15 10:08:44 · 204 阅读 · 0 评论 -
golang一个比基础json包更快的包json-iterator
下载go get github.com/json-iterator/go初始使用方法 import "github.com/json-iterator/go" var json = jsoniter.ConfigCompatibleWithStandardLibrary json.Marshal(&data) //使用基本上和原生百...原创 2019-07-23 09:58:32 · 1279 阅读 · 0 评论 -
golang MySQL十秒插入一百万条雪花算法生成的不重复的订单id
主要用了ants连接池以及beego踩坑一开始用的是beego提供的orm中的高级查询中的PrepareInsert,结果我只能说我去!这个鬼东西性能实在是太低了,一百万条数据在插入几万条之后,就因为连接太多了数据库崩了!!!后来仔细翻看beego的文档发现了下面这个东东InsertMulti同时插入多个对象类似sql语句 insert into table (name...原创 2019-07-31 18:06:40 · 6350 阅读 · 0 评论 -
golang 格式化时间与时间戳的互相转换优化版小demo
更简易的使用,根据参数的类型进行判断需要转换的结果type TimeS struct { timeStr string option string num int64}//时间戳与时间的互相转换//@param interface int64与string格式的数据 前者转换格式化时间 后者转换时间戳//@param ...原创 2019-07-26 17:21:01 · 1951 阅读 · 0 评论 -
golang goroutine 限不限制并发量
问题func main() { userCount := math.MaxInt64 for i := 0; i < userCount; i++ { go func(i int) { // 做一些各种各样的业务逻辑处理 fmt.Printf("go func: %d\n", i) ...转载 2019-07-26 16:15:22 · 897 阅读 · 0 评论 -
日常代码记录 golang用协诚进行计算以及乱七八糟的代码
goalng代码func add(i,len int, ch chan int) { count := 0 for i:=i; i<len; i++{ count = count + i } ch <- count}func (u *UserController) Index() { t1 := time.Now() fmt.Printf("开始时间:%...原创 2019-07-22 17:49:06 · 252 阅读 · 0 评论 -
golang框架beego 类似PHP 构造函数 __construct 的方法
用到了这个Prepare()函数。这个函数主要是为了用户扩展用的,这个函数会在下面定义的这些 Method 方法之前执行,可以重写这个函数实现类似用户验证之类。下面是个全局的小demo全局公共引用的控制器package controllersimport ( "fmt" "github.com/astaxie/beego")type BaseControlle...原创 2019-08-03 15:59:55 · 2430 阅读 · 0 评论 -
goalng 时间转换时间戳 记录
记录一下自己写的方法,如果有错误请指出//时间转换时间戳//@param num 时间//@param option 时间戳转换的格式//@return args 格式化时间func GetFormatToStamp(timeStr, option string) int6...原创 2019-07-25 11:22:22 · 243 阅读 · 0 评论 -
golang 记录time包的小方法
获取今天星期几//获取今天星期几func GetWeek() string { t := time.Now() week := t.Weekday().String() switch week { case "Monday": return "星期一" case "Tuesday": return "星期二" case "Wednesday": return "星期...原创 2019-07-24 18:03:52 · 222 阅读 · 0 评论 -
ETCD 简介 + 使用
随着CoreOS和Kubernetes等项目在开源社区日益火热,它们项目中都用到的etcd组件作为一个高可用强一致性的服务发现存储仓库,渐渐为开发人员所关注。在云计算时代,如何让服务快速透明地接入到计算集群中,如何让共享配置信息快速被集群中的所有机器发现,更为重要的是,如何构建这样一套高可用、安全、易于部署以及响应快速的服务集群,已经成为了迫切需要解决的问题。etcd为解决这类问题带来了福音,本文...转载 2019-08-05 09:37:40 · 298 阅读 · 0 评论 -
golang 实现 二分查找 差值差值 红黑树查找算法
这几个查找算法其实放在一根文件里面都可以但是为了可读性比较高一些我就分别放了lookup.go 入口文件package helper//二分查找 有序查找func binarySearch4(arr []int, k int) int { low := 0 high := len(arr) - 1 for low <= high { /** 利用位与(&)...转载 2019-08-06 14:34:48 · 257 阅读 · 0 评论 -
golang定时器
//golang 定时器,启动的时候执行一次,以后每天晚上12点执行func startTimer(f func()) { go func() { for { f() now := time.Now() // 计算下一个零点 ne...原创 2019-09-09 17:24:20 · 259 阅读 · 0 评论 -
微服务的一些知识点梳理
摘要:大概解释了什么是rpc以及rpc的注意事项,还有各个rpc框架RPC(Remote Procedure Call),远程过程调用。在先介绍远程过程调用之前,先介绍一下什么是本地调用,形象点说,就是你想次饭,然后自己去厨房做了个饭,远程过程调用就是你打开饿了么,订了个外卖,厨师去厨房给你做了个饭,这么说,是不是很容易理解。个人理解,rpc的起源为分布式,是分布式促使了rpc的诞生。...原创 2019-09-07 12:37:06 · 3328 阅读 · 0 评论 -
golang设计模式之 简单工厂
go语言中没有构造函数,只能是通过其他方法来实现简单工厂模式package mainimport "fmt"type Dump interface { Say(name string) string}func NewDump(t int) Dump { if t == 1 { return &hiDump{} } else if t == 2 { re...原创 2019-09-06 16:45:45 · 258 阅读 · 0 评论 -
ethereum扫描区块,获取区块内的交易记录
初始化客户端⽤Go初始化以太坊客户端是和区块链交互所需的基本步骤。⾸先,导⼊go-etherem的 ethclient 包并通过调⽤接收区块链服务提供者URL的 Dial 来初始化它。若没有现有以太坊客户端,可以连接到官方提供的一个节点client, err := ethclient.Dial("https://mainnet.infura.io")完整代码package main...原创 2019-09-03 16:20:46 · 10146 阅读 · 0 评论 -
golang 基础包文档地址记录
php中文网的golang手册地址原创 2019-08-27 14:04:49 · 178 阅读 · 0 评论 -
windows10 下golang压测redis分布式锁动态端口耗尽解决办法
摘要,一开始的时候我把redis丢在docker里面运行然后本机调用docker内的redis进行测试,基本上一次压测也就是一万左右连接就会出现极少数的端口耗尽的报错,然后一直苦苦寻找解决办法,后来突发想起了docker内部使用了虚拟网关可以帮助我们创建爱网关把golang的二进制文件丢进docker里面运行第一步先吧golang打包成linux二进制文件 配置个环境变量就行 GOOS=li...原创 2019-08-16 17:22:14 · 1930 阅读 · 0 评论 -
golang redis连接池式分布式锁小小的封装
摘要:把redis加锁方法单独抽离出去放入一个公共方法,暂未做数据类型断言helper redisLock 文件package helperimport ( "fmt" "github.com/garyburd/redigo/redis" "github.com/prometheus/common/log")type Lock struct { resource stri...原创 2019-08-14 16:14:09 · 628 阅读 · 0 评论 -
golang rpcx记录一次解决 context deadline exceeded的问题
测试同时并发一万个应用去调用另一个微服务应用结果出现了上下文切换超时的问题解决也很简单把超时时间调大一点 以前设置的是一秒 现在调成五秒ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second)err := xclient.Call(ctx, "Mul", args, reply)if err !...原创 2019-08-09 14:18:40 · 33222 阅读 · 0 评论