Golang你所不知道的技巧
文章平均质量分 72
介绍golang开发中独有的开发技巧,有的仅仅使代码更简洁,有的则能够提高性能优化内存,有的则使开发更快捷。
kingeasternsun
向linus致敬!
展开
-
golang cache 源码学习
github源码地址func newCacheWithJanitor(de time.Duration, ci time.Duration, m map[string]*Item) *Cache { c := newCache(de, m) // This trick ensures that the janitor goroutine (which--granted it原创 2017-03-03 14:43:24 · 993 阅读 · 0 评论 -
《Manning.Go.Web.Programming.2016.7》笔记之文件服务器FileServer和cookie
CookieFileServer原创 2017-03-15 10:11:34 · 585 阅读 · 0 评论 -
《Manning.Go.Web.Programming.2016.7》之gob
具体参见 https://golang.org/pkg/encoding/gob/#Decoder.DecodeValue基本用法结构体中的成员要时可导出的,也就是说首字母时大写。编码的时候gob.NewEncoder定义一个编码器,然后使用.Encode方法对数据进行编码,传入Encode的参数为结构体的值或地址。解码的时候,gob.NewDecoder得到解码器,然后调用.Decode对数据进行原创 2017-03-18 15:33:49 · 971 阅读 · 0 评论 -
《Manning.Go.Web.Programming.2016.7.pdf》之form
HTML forms and GoPOST请求发送的键值对数据的格式是由HMTL form的content type指定的。在html中通过enctype指定如下:<form action="/process" method="post" enctype="application/x-www-form-urlencoded"><input type="text" name="first_name原创 2017-03-20 14:36:24 · 639 阅读 · 0 评论 -
《Go in Action 2015.11.pdf》之Go’s type system
InterfaceType embedding原创 2017-03-25 14:33:25 · 889 阅读 · 0 评论 -
《Packt.Mastering.Go.Web.Services.2015.4.pdf》之Handling our API versions
利用gorillamux区分数据类型利用jas特性路径中添加id获取请求的值利用gorilla/mux区分数据类型"github.com/gorilla/mux"func handleVersion(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "hi, this is an http verison")原创 2017-03-27 14:13:23 · 676 阅读 · 0 评论 -
gorilla/sessions 学习笔记
简单样例多session的处理复杂结构数据key的更换原创 2017-03-29 09:53:35 · 4039 阅读 · 0 评论 -
《Go in Action 2015.11.pdf》之6.4.1 Atomic functions
利用atomic递增ChannelsUnbuffered channels原创 2017-03-29 18:13:18 · 621 阅读 · 0 评论 -
《Go in Action 2015.11.pdf》之Conncurrency patterns
channelsignalgolang原创 2017-03-30 10:41:07 · 727 阅读 · 0 评论 -
go-kit 上手之example stringsvc2 添加日志和监控
日志添加instrument对于Histograms和Summary的区别主函数错误总结用logMiddleware和instrumentingMiddleware对svc进行封装label misss errorinconsistent label cardinality查看metrics结果结果分析thread数count接口返回结果的统计接口uppercase 和cou原创 2017-10-20 13:07:30 · 3098 阅读 · 1 评论 -
go-kit 上手之example stringsvc3 通过代理实现分布式处理
使用的包main运行结果代理中间件stringsvc3没有完全按照官网中stringsvc3的写法,而是在stringsvc2的基础上增加了proxy.go 主要就是给uppercase增加了代理中间件,主要步骤分三步: 1)向特定地址代理服务器发送请求的client的编码和解码函数。 2)生成向特定地址代理服务器发送请求的client。 3)用client配合load原创 2017-10-30 08:52:16 · 3535 阅读 · 0 评论 -
golang 正则匹配regexp接口实战学习
总览如果不熟悉正则表达式的语法的话,可以执行下面命令:go doc regexp/syntax联系代码package mainimport ( "fmt" "regexp")func expandTest() { pat := `(((abc.)def.)ghi)` reg := regexp.MustCompile(pat) fmt.Println(reg原创 2017-10-12 08:55:09 · 8469 阅读 · 0 评论 -
golang web开发 Handler测试利器httptest
test是golang语言的一部分,golang提供了非常强大的测试方法。单元测试,压力测试可以参见 golang 1.7之后高级测试方法之子测试,子基准测试(subtest sub-benchmarks)我们用go开发一个Web Server后,打算单元测试写的handler函数,在不知道httptest之前,使用比较笨的方法 就是编译运行该Web Server后,再用go编写一个客户端程...原创 2017-10-16 11:43:23 · 7903 阅读 · 0 评论 -
golang 1.7之后高级测试方法之子测试,子基准测试(subtest sub-benchmarks)
介绍在go1.7之后,testing包T和B的引入了一个Run方法,用于创建subtests 和 sub-benchmarks. subtests 和 sub-benchmarks可以让开发者更好的处理测试中的失败,更好的控制运行哪个测试用例,控制并行测试操作,测试代码更加简洁和可维护性更强。Table-driven tests 基础首先我们先讨论下Go中常见的测试代码编写方式。一系列相关的测试校验原创 2017-10-12 08:57:47 · 4112 阅读 · 0 评论 -
Go 编程学习路线
安装IEDvscode atom subl 插件安装错误总结入门 go by example the way to go go web 编程 豆瓣 提升书籍《The.Go.Programming.Language.2015.11.pdf》 豆瓣9.1《Go in Action》 豆瓣7.2《Manning.Go.in.Practice.2016.8.pd原创 2016-09-12 17:05:38 · 4550 阅读 · 1 评论 -
《The.Go.Programming.Language.2015.11》之 reflect
判断reflectValue类型并提取数据 addressable 获取结构体方法的名称原创 2016-09-18 11:00:07 · 585 阅读 · 0 评论 -
《The.Go.Programming.Language.2015.11》之Goroutines
并行处理图片并等待全部图片处理结束限定并发数量复用select互斥锁syncOnce解决的方法1使用互斥锁解决方法二 使用读写锁解决方法三 使用syncOnce并行处理图片并等待全部图片处理结束func原创 2016-09-19 09:00:10 · 631 阅读 · 0 评论 -
Go开发环境插件安装提示错误总结
ATOMATOM 安装运行ATOM 提示gocode安装失败ATOM 提示open dlv安装失败ATOM 提示 GOPATH not setATOM 插件atom-ctagsVSCODE提示GOPATH not set提示GOPATH entry is relative错误guruATOMATOM 安装运行配置ATOM Go开发环境 安装script插件,可以直接在ATOM运行原创 2016-09-19 11:11:23 · 25155 阅读 · 0 评论 -
《The.Go.Programming.Language.2015.11.pdf》之函数缓存实现
串行的实现 利用go并行执行 添加互斥锁 最终方法1使用指针标记 最终方法2使用客户端服务器模型原创 2016-09-23 08:42:36 · 911 阅读 · 0 评论 -
xorm常用编程方法总结
官方文档Get方法1 根据Id来获得单条数据2 根据Where来获得单条数据3 根据user结构体中已有的非空数据来获得单条数据Find方法1 传入Slice用于返回数据2 传入Map用户返回数据map必须为mapint64Userinfo的形式map的key为id因此对于复合主键无法使用这种方式3 也可以加入各种条件Count方法执行SQL命令原创 2016-09-28 09:26:29 · 8968 阅读 · 0 评论 -
ubuntu /elementary os下vscode 配置go开发环境
安装go配置环境变量设置权限设置GOPATH安装vscode go安装delve原创 2016-10-13 09:12:18 · 5658 阅读 · 0 评论 -
《The.Go.Programming.Language.2015.11.pdf》之数组和切片
1数组数组的声明和初始化数组成员的访问数组的比较数组作为函数参数2切片append函数利用append实现特殊函数原创 2016-10-26 16:21:01 · 933 阅读 · 0 评论 -
《The Way To Go : A Thorough Introduction To The Go Programming Language》之数组切片
数组声明和初始化切片函数将切片作为参数make创建切片for rangeappend copystring 切片改变string中的字符apped实现的操作数组声明和初始化声明数组时使用的长度必须是一个常量。var identifier [len]type数组中保存的数据类型必须一致,如果要用数组保存不同类型的数据类型,要使用interface{},然后在访问每一个成员时使用类型原创 2016-10-27 10:24:24 · 642 阅读 · 0 评论 -
《The.Go.Programming.Language.2015.11.pdf》之map和结构体
map在go语言中,map是一个hash 表的引用。 map的声明 ages := make(map[string]int) // mapping from strings to ints ages := map[string]int{ "alice": 31, "charlie": 34, }元素的访问 ages["alice"]原创 2016-11-11 09:48:49 · 666 阅读 · 1 评论 -
golang通道中传递slice数据的入坑经验
背景错误代码原因分析修改方案1修改方案2原创 2017-06-05 09:51:13 · 3913 阅读 · 1 评论 -
golang.org/x/time/rate 使用说明
type Limiterfunc NewLimiterfunc Limiter Allowfunc Limiter AllowNfunc Limiter Reservefunc Limiter ReserveNfunc Limiter Waitfunc Limiter WaitN测试 AllowN原创 2017-06-28 16:39:03 · 6547 阅读 · 1 评论 -
服务器开发利器golang context用法详解
背景Context结构继承的ContextBackGroundWithCancelwithDeadline withTimeout搜索测试程序WithValuego doc中的信息后记原创 2017-06-29 17:12:52 · 3876 阅读 · 0 评论 -
gRPC golang开发指南
为什么使用gRPC样例代码和环境的建立样例测试服务定义生成客户端和服务端代码创建服务端实现RouteGuideSimple RPCServer-side streaming RPCClient-side streaming RPCBidirectional streaming RPCStarting the serverCreating the client创建客户端Ca原创 2017-07-03 16:02:21 · 4734 阅读 · 0 评论 -
你可能不知道的关于golang 的10件事情
匿名结构体命令行 go doc在同一个channel上进行读写操作利用close来向其他goroutine广播利用nil通道的特性后记原创 2017-07-06 15:05:17 · 1399 阅读 · 0 评论