go
harderc111
精通是相对的,无知是绝对的,道阻且长
展开
-
【转】Go语言和Windows服务
地址:https://chai2010.cn/post/2018/window-service/Windows服务使您能够创建在后台Windows会话中可长时间运行的可执行应用程序。Windows服务可以在计算机启动时自动启动,管理员也可以临时暂停和重新启动服务。Windows服务非常适合运行一些需要长时间在后台运行的服务器程序,例如Web服务器等应用。Go语言的官方扩展包golang.o...转载 2018-10-21 21:29:34 · 4292 阅读 · 0 评论 -
编译时向 go 程序写入 git 版本信息
本文地址: http://mengqi.info/html/2015/201502171941-build-go-program-with-git-version.html如何在 go 程序中记录版本信息?最简单的办法就是手工输入。下面是一个例子。程序 myproject.go 代码:package mainimport "fmt"import "flag"var _转载 2017-11-10 15:43:09 · 2909 阅读 · 0 评论 -
Golang服务器的网络层实现--总结对比常用epoll模型
原文:点击打开链接由于最近有接触到一些长连接的服务器实现,对网络模型有所学习。对基于C/C++的网络模型实现和基于GoLang的实现对比下来,发现Golang的网络模型编程难度大大降低,这得益于Golang的goroutine,可以在编程的时候肆无忌惮的创建并发”线程”,当服务器能为每一个客户端都开启若干”线程”的话,编程变的简单很多。传统语言的网络层处理服务需要同时服转载 2017-08-12 13:17:55 · 8304 阅读 · 0 评论 -
go mongodb Iter迭代器示例
func (this *Mongodb) StoreRecords(dbName, collection, storeDbName, tmpCollection string, queryMap, selecter bson.M) (err error) { session := this.GetSession() defer session.Close() iter := session.原创 2017-02-07 16:34:48 · 2669 阅读 · 0 评论 -
Golang日志库源码分析:Glog
Glog是著名google开源C++日志库glog的golang版本,具有轻量级、简单、稳定和高效等特性。 目前被用在大型的容器云开源项目Kubernetes中。CategoryOverviewUsageSource Code Readingflag.Parse()困境ReferenceOverviewGlog主要有以下特点:支持四种日志等级INFO 每转载 2017-07-30 17:01:38 · 5159 阅读 · 0 评论 -
优化Go的模式
最近在优化Go项目,学习了一下Golang的调优相关内容。发现了一篇很不错的文章,翻译出来分享给大家。之前写过一篇文章《为什么SignalFx metric proxy通过Go语言开发》,这篇文章将会关注以我们的ingest服务为例,来讲述我们是如何优化Go代码的。SingalFx基于流分析和时间报警序列,例如应用程序指标,可以为时间序列数据的现代应用开发的高级监控平台(“我的应用程序转载 2017-07-09 15:05:44 · 1409 阅读 · 1 评论 -
Golang 优化之路——临时对象池
带垃圾回收的语言,虽然对于刚刚上手的程序员是友好的,但是后期随着项目变得越来越巨大,维护的内存问题也会逐渐暴露出来。今天讲一种优化内存申请的方法——临时对象池。写在前面堆还是栈?内存碎片化临时对象池结论写在前面在高并发的情况下,如果每次请求都需要申请一块用于计算的内存,比如:make([]int64, 0, len(ids))将会是一件成本很高的事情。转载 2017-07-09 02:20:48 · 776 阅读 · 0 评论 -
Golang 优化之路——HTTP长连接
压测发现有长连接问题,深入学习了一下。写在前面TCP 相关HTTP 包如何使用 TCP 长连接?我们的程序为啥长连接失效?如何解决问题?后续参考文献写在前面压测的是否发现服务端TIME_WAIT状态的连接很多。netstat -nat | grep :8080 | grep TIME_WAIT | wc -l 17731TIME_WAIT状态多,转载 2017-07-09 01:54:59 · 2366 阅读 · 0 评论 -
go的临时对象池--sync.Pool
一个sync.Pool对象就是一组临时对象的集合。Pool是协程安全的。Pool用于存储那些被分配了但是没有被使用,而未来可能会使用的值,以减小垃圾回收的压力。一个比较好的例子是fmt包,fmt包总是需要使用一些[]byte之类的对象,golang建立了一个临时对象池,存放着这些对象,如果需要使用一个[]byte,就去Pool里面拿,如果拿不到就分配一份。这比起不停生成新的[]byte,用转载 2017-07-08 16:01:38 · 530 阅读 · 0 评论 -
Go语言实战--并发示例-Pool
这篇文章演示使用有缓冲的通道实现一个资源池,这个资源池可以管理在任意多个goroutine之间共享的资源,比如网络连接、数据库连接等,我们在数据库操作的时候,比较常见的就是数据连接池,也可以基于我们实现的资源池来实现。可以看出,资源池也是一种非常流畅性的模式,这种模式一般适用于在多个goroutine之间共享资源,每个goroutine可以从资源池里申请资源,使用完之后再放回资源池里,以便转载 2017-07-08 16:00:06 · 677 阅读 · 0 评论 -
交叉编译Go程序
Go 1.5以前,交叉编译程序还是有一点麻烦的,你需要massive scripts t来编译和宿主机器不同的程序。正如 comes with support for all architectures built in文章中介绍的, Go 1.5可就简单的多了,你只需设置 GOOS 和 GOARCH 两个环境变量就能生成所需平台的Go程序。比如使用下面的代码测试:转载 2017-11-10 15:58:27 · 641 阅读 · 0 评论 -
如何得到goroutine 的 id?
在Go中,系统是不提供goroutine的id给外界的,丫的认为这事情不应该提供给用户来使用。可有时候,实在是觉得这个东西必须得有呀,比方说后台开了个goroutine进行http请求的处理,这个免不了要打个日志什么的, 当并发量稍微大点的时候,就会发现这些信息的输出就交叉错乱在一起了。怎么区分。一种方案是在http请求的时候,生成一个context的东西,里面有个值来表示是这个gorou转载 2017-11-10 16:21:19 · 1604 阅读 · 0 评论 -
Go最佳实践
来自NSQ转载 2017-12-18 20:04:45 · 1539 阅读 · 0 评论 -
Go包管理的前世今生
原文地址:点击这里 说实话,Golang对一个新人真的挺不友善的,因为一上手要了解的概念。你看人家Java,上来一个项目mvn install一下就完事了,干净利落。但是Golang就麻烦了,你得先了解什么是GOPATH。我当年刚接触Golang真正开始做项目的时候,只知道按要求配置环境变量,对GOPATH真正理解可能都是好几个月以后的事情了。说白了,还是因为懒。真正做项目的人,有多少有耐心砍转载 2017-11-28 11:57:41 · 675 阅读 · 0 评论 -
go net/http Client使用——长连接客户端的使用
go net/http Client使用总结Client数据结构// A Client is an HTTP client. Its zero value (DefaultClient) is a// usable client that uses DefaultTransport.//// The Client's Transport typically has inte转载 2017-12-06 15:46:40 · 22683 阅读 · 0 评论 -
Golang分布式ID生成服务
分布式ID生成转载 2017-11-22 21:35:30 · 3963 阅读 · 1 评论 -
Golang 如何优雅关闭 channel
Golang 内建的 close 方法可以关闭 channel,如果往已经关闭的 channel 发送数据,则会报错:panic: close of closed channel.转载 2017-11-22 21:33:06 · 11985 阅读 · 0 评论 -
go-代码收集-net/http客户端长连接
net/http客户端长连接 新建一个http client,后面复用这个client,借助go的高度集成包,来复用连接。 client.gopackage mainimport ( "crypto/tls" "io/ioutil" "log" "net/http" "sync")func main() { tr := &http.Tran原创 2017-12-10 20:50:54 · 1822 阅读 · 0 评论 -
[译]Go net/http 超时机制完全手册
目录 [−]SetDeadline服务器端超时设置http.ListenAndServe 的错误关于流客户端超时设置Cancel 和 Context英文原始出处: The complete guide to Go net/http timeouts, 作者: Filippo Valsorda当用Go写HTTP的服务转载 2017-12-08 16:53:22 · 450 阅读 · 0 评论 -
Go net/http 超时机制完全手册
原文链接:http://colobu.com/2016/07/01/the-complete-guide-to-golang-net-http-timeouts/英文原始出处: The complete guide to Go net/http timeouts , 作者: Filippo Valsorda当用Go写HTTP的服务器和客户端的时候,超时处理总是最易犯错和转载 2017-11-10 21:03:13 · 12347 阅读 · 1 评论 -
获取Goroutine Id的最佳实践
大神的地址:http://www.jianshu.com/p/85a08d8e7af3序言在C/C++/Java等语言中,我们可以直接获取Thread Id,然后通过映射Thread Id和二级调度Task Id的关系,可以在日志中打印当前的TaskId,即用户不感知Task Id的打印,适配层统一封装,这使得多线程并发的日志的查看或过滤变得非常容易。Goroutine是Golang中转载 2017-11-10 18:00:54 · 606 阅读 · 0 评论 -
Go语言实战-- 并发示例-Runner
这篇通过一个例子,演示使用通道来监控程序的执行时间,生命周期,甚至终止程序等。我们这个程序叫runner,我们可以称之为执行者,它可以在后台执行任何任务,而且我们还可以控制这个执行者,比如强制终止它等。现在开始吧,运用我们前面十几篇连载的知识,来构建我们的Runner,使用一个结构体类型就可以。123456789//一个执行者,可以执行任何任务,但是这些任务转载 2017-07-08 13:56:18 · 597 阅读 · 1 评论 -
积累go获取本地ip地址
func getLocalIp() { addrSlice, err := net.InterfaceAddrs() if nil != err { log.Error("Get local IP addr failed!!!") IpAddr = "localhost" return } for _, addr := range addrSlice { if ipnet,原创 2017-06-13 15:09:41 · 5835 阅读 · 0 评论 -
go map slice积累
关于appen如果切片底层的数组没有足够的可用容量,append函数会创建一个新的底层数组,将被引用的现有的值复制到新的数组里面,再追加新的值原创 2017-05-17 23:28:06 · 733 阅读 · 0 评论 -
Golang 优化之路——空结构
写在前面开发 hashset 常用的套路:map[int]int8map[int]bool我们一般只用 map 的键来保存数据,值是没有用的。所以来缓存集合数据会造成内存浪费。空对象空对象是个神奇的东西。它指的是没有字段的结构类型。type Q struct{}它牛逼的地方在于:可以和普通结构一样操作var a = []struct转载 2017-04-22 15:45:50 · 1783 阅读 · 0 评论 -
go 使用mgo驱动示例
package modelimport ( // "fmt" "errors" "infrastructure/collnamegenerator" "infrastructure/log" "time" "strings" "infrastructure/github.com/ripple" "infrastructure/gopkg.in/mgo.v2" "infra原创 2017-04-20 20:24:49 · 3648 阅读 · 0 评论 -
Golang中的正则表达式
Golang中的正则表达式------------------------------------------------------------用法:------------------------------单一: . 匹配任意一个字符,如果设置 s = true,则可以匹配换行符 [字符类]转载 2017-04-12 14:30:50 · 5924 阅读 · 0 评论 -
linux下自用简单go app编译脚本
#!/bin/bash#默认$GOROOT 已经存在,并为/usr/local/go/#log文件目录LOG_DIR=./log#DAYS=15代表删除15天前的log文件DAYS=15#删除15天前的log文件find $LOG_DIR/ -mtime +$DAYS -name "*.txt" -deleteecho "delete log $DAYS ago原创 2017-03-07 19:38:55 · 2057 阅读 · 0 评论 -
go 快排实现示例
package modelimport ( "sort" "infrastructure/gopkg.in/mgo.v2/bson")type BsonMString struct { MapList []bson.M FieldName string}func (this BsonMString) SortBsonMByString() { sort.Sort(t原创 2017-02-14 18:54:34 · 448 阅读 · 0 评论 -
go crontab
1、cron 表达式的基本格式 用过 Linux 的应该对 cron 有所了解。linux 中可以通过 crontab -e 来配置定时任务。不过,linux 中的 cron 只能精确到分钟。而我们这里要讨论的 Go实现的 cron 可以精确到秒,除了这点比较大的区别外,cron 表达式的基本语法是类似的。(如果使用过 Java 中的 Quartz,对 cron 表达式应该比较了解,而转载 2017-02-07 16:59:16 · 581 阅读 · 0 评论 -
go map深度拷贝
func DeepCopy(value interface{}) interface{} { if valueMap, ok := value.(map[string]interface{}); ok { newMap := make(map[string]interface{}) for k, v := range valueMap { newMap[k] = DeepCopy(原创 2017-01-23 16:39:31 · 6916 阅读 · 0 评论 -
自定义go微服务build脚本
#!/bin/bash#默认$GOROOT 已经存在,并为/usr/local/go/app=***jobserviePath=`pwd`export GOPATH=$(dirname $serviePath)cd $appp=$(pidof $serviePath/$app/$app )if [ $p ]then echo "kill $app pid $p"原创 2016-11-17 09:20:09 · 879 阅读 · 0 评论 -
go实现访问百度地图api实现经纬度逆解析出地理位置收集
package crontabimport ( . "domain/model" "encoding/json" "infrastructure/log" "io/ioutil" "net/http" "regexp" "strconv" "strings" "time" "infrastructure/gopkg.in/mgo.v2/bson")type Loca原创 2017-06-29 08:27:53 · 3290 阅读 · 0 评论 -
go通过代理访问百度地图api实现GPS角坐标转换
package crontabimport ( . "domain/model" "encoding/json" "infrastructure/log" "io/ioutil" "net/http" "strconv" "strings" "time" "infrastructure/gopkg.in/mgo.v2/bson")type Coordinate str原创 2017-06-29 08:23:19 · 1032 阅读 · 0 评论 -
go 自用编译程序代码
// study project main.gopackage mainimport ( "fmt" "os" "os/exec" "path/filepath")type buildObj struct { gopath string //GOPATH appdir string //微服务main函数所在目原创 2017-06-04 19:11:20 · 1213 阅读 · 0 评论 -
Go语言实战-- 通道
上一篇我们讲的原子函数和互斥锁,都可以保证共享数据的读写,但是呢,它们还是有点复杂,而且影响性能,对此,Go又为我们提供了一种工具,这就是通道。所以在多个goroutine并发中,我们不仅可以通过原子函数和互斥锁保证对共享资源的安全访问,消除竞争的状态,还可以通过使用通道,在多个goroutine发送和接受共享的数据,达到数据同步的目的。通道,他有点像在两个routine之间架设的转载 2017-07-03 22:20:15 · 2873 阅读 · 0 评论 -
go拾遗--使用竞争检测器标志来编译程序
go build -race **.go //使用竞争检测器标志来编译程序./example //运行程序原创 2017-07-03 21:25:36 · 291 阅读 · 0 评论 -
本文主要讲述golang的gui库andlabs/ui使用
本文主要讲述golang的gui库andlabs/ui使用。目前该库还不是很完善。环境说明:系统:Win10 64Go:1.7.5 (ui库规定需要>=1.6)注意:不支持win Xp系统mingw64版本要5.0以上下载安装MSYS2下载地址:github 或 官网我下载的是: http://repo.msys2.org/distrib/x转载 2017-06-11 16:27:46 · 4359 阅读 · 0 评论 -
golang配置文件热更新
配置文件热更新是服务器程序的一个基本功能,通过热更新可以不停机调整程序的配置,特别是在生产环境可以提供极大的便利,比如发现log打得太多了可以动态调高日志等级,业务逻辑参数变化,甚至某个功能模块的开关等都可以动态调整。每种语言都有自己的热更新实现方式,在golang里面我看到了有人采用了一种错误的实现方式,如下:type Config struct { Test1 string转载 2017-07-02 23:23:24 · 4353 阅读 · 1 评论 -
Go RPC
什么是RPC?RPC是Remote Procedure Call的缩写,从字面意思理解就是远程过程调用,具体可以见维基百科的解释,如果你英文足够好可以看这里wikipedia,我的理解可以简单的用一句话来描述:RPC就是一个本地程序可以通过网络调用远程的一个子程序。Go RPCGo的RPC中如果客户端是Go语言编写的则将用Go特有的Gob序列化,同时可以选择rpc/转载 2017-06-21 23:54:59 · 195 阅读 · 0 评论