Go 语言中Select与for结合使用时可能会遇到的坑

作为一个刚接触go编程的新鸟,是不是被它的某些新特性给吓到,尤其是之前已经习惯了C++的编程。对于Go语言,网上褒贬不一,有极力推崇的,如七牛的许式伟,其对go的评价极高,并预言Go的市场占有率会一直逐步上升,取代java,成为第一。也有极力贬低的,他们一般会网络上有各种博客帖子,详细的剖析了go的不妥之处。而我接触go这段时间之后,不得不说,它真的是一门很有意思的语言,为什么用有意思形容呢,借用一句装逼的话,存在即合理。go能够慢慢被国内国外的各大互联网公司用于服务器架构,它自有它的闪光之处,...阅读全文

2015-04-03 09:01 u010511236
阅读:20209 评论:7

Go语言HTTP测试及程序性能调优

这篇要讲的东西,主要是HTTP,WebSocket的测试及如何调优Go程序的一些方法. 分下面几个内容: 一.httptest测试包 二.性能测试 三.怎么利用参数分析和调优程序 四.在运行中实时监控调优 一.httptest测试包 对于HTTP和WebSocket测试,Go标准库有一个HTTP测试框架.在"http/httptest"包下. go1.5.1\go\src\net\http\httptest 怎么用可以在源码目录看例子,也可以上官网看看这个例子: https://golang.o...阅读全文

2015-11-22 19:11 xcltapestry
阅读:3511 评论:0

golang中的race检测

golang中的race检测 由于golang中的go是非常方便的,加上函数又非常容易隐藏go。 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题。 所以在本质上说,goroutine的使用增加了函数的危险系数论go语言中goroutine的使用。比如一个全局变量,如果没有加上锁,我们写一个比较庞大的项目下来,就根本不知道这个变量是不是会引起多个goroutine竞争。 官网的文章Introducing the Go Race Detector给出的例子...阅读全文

阅读:7090 评论:1

Go高性能编程技巧

1.在高并发队列任务分发的场景中Ring Buffer比Channel的性能更好 2.defer功能不是静态编译时提供的,而是运行时提供的,所以使用defer会产生一些额外的性能开销(了解就好,该用还是得用) 3.encoding/json序列化是通过反射机制实现的,性能很差,可以使用ffjson生成encode/decode代码来提升性能。如果可能,使用MsgPack替代JSON,因为MsgPack性能更好。 4.在栈中创建对象比在堆中创建对象性能高,所以少用new来创建对象。需要创建大量临时...阅读全文

2016-04-20 18:01 shijingxiang
阅读:12675 评论:0

golang命令行库cobra的使用

简介 Cobra既是一个用来创建强大的现代CLI命令行的golang库,也是一个生成程序应用和命令行文件的程序。下面是Cobra使用的一个演示: Cobra提供的功能 简易的子命令行模式,如 app server, app fetch等等 完全兼容posix命令行模式 嵌套子命令subcommand 支持全局,局部,串联flags 使用Cobra很容易的生成应用程序和命令,使用cobra create appname和cobra add cmdname 如果命令输入错误,将提供智能建议,如 ap...阅读全文

阅读:29209 评论:0

关于Golang中database/sql包的学习笔记(转载)

概述 sql.DB不是一个连接,它是数据库的抽象接口。它可以根据driver打开关闭数据库连接,管理连接池。正在使用的连接被标记为繁忙,用完后回到连接池等待下次使用。所以,如果你没有把连接释放回连接池,会导致过多连接使系统资源耗尽。 使用DB 导入driver 这里使用的是MySQL drivers import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) 连接DB func main() { db, err := sql.Open...阅读全文

阅读:2107 评论:0

Golang依赖管理工具:glide从入门到精通使用

介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题。Java有牛逼轰轰的Maven和Gradle。 Golang亦有godep、govendor、glide、gvt、gopack等等,本文主要给大家介绍gilde。 glide是Golang的包管理工具,是为了解决Golang依赖问题的。 为什么需要glide? 原因很简单,Go 语言原生包管理的缺陷。罗列一下golang的 get 子命令管理依赖有很多大缺陷: 能拉取源码的平台很有限,绝大多数依赖的是 github....阅读全文

2017-07-22 13:33:09 梦朝思夕
阅读:17649 评论:11

golang日志框架logrus

golang自带日志框架功能比较简单,仅提供print、panic、fatal三个方法,对于常规的日志切割等功能并未提供支持。 这里推荐使用sirupsen/logrus日志库。 logrus feature 结构化、可插拔的日志模块 完全兼容官方log库接口 Field机制 可扩展的HOOK机制 TEXT与JSON两种可选格式 简单使用示例 std Logger 与官方log类似,logrus也提供了一个名为std的标准logger,对外导出的各类方法直接使用std记录日志,一般可按如下方式使...阅读全文

2017.07.31 19:59 yiduyangyi
阅读:20661 评论:4

golang进阶(一)——glide的使用手册

+++ title=”golang进阶(一)——glide的使用手册” date=”2017-10-10” tags=[“golang”,”glide”,”docker”] categories=[“资源管理”] description=”golang也有包管理,类似maven,gradle,npm,bower之类的” featured=true image=”img/201710/fengjing1.jpeg” +++ golang的包管理软件有很多,我选择了glide,由于深中docker之...阅读全文

2017年10月09日 19:12:57 lastsweetop
阅读:1691 评论:0

golang进阶(二)——cobra更实用的命令行

+++ title=”golang进阶(二)——cobra更实用的命令行” date=”2017-10-11” tags=[“golang”,”glide”,”docker”] categories=[“资源管理”] description=”golang自身带的命令行包,各种case,有代码洁癖的人看着就令人头大” +++ cobra是个非常不错的命令行包,docker,hugo都在使用 基命令 首先创建一个基命令 package cmd import ( "github.com/spf13/...阅读全文

2017年10月11日 10:59:23 lastsweetop
阅读:3545 评论:0

golang进阶(三)——后台进程的启动和停止

+++ title=”golang进阶(三)——后台进程的启动和停止” date=”2017-10-12” tags=[“golang”,”cobra”] categories=[“资源管理”] description=”不想再像java或者其他语言那样为了操作后台程序写各种脚本的话,这篇文章值得你一看” featured=true image=”img/201710/fengjing2.jpg” +++ 不想再像java或者其他语言那样为了操作后台程序写各种脚本的话,这篇文章值得你一看 启动命...阅读全文

2017年10月12日 10:23:20 lastsweetop
阅读:5363 评论:1

golang进阶(四)——路由mux的最佳实践

前言 为了让golang的路由更加清晰,让路由的代码可读性更好,我们采用mux包去实现路由,并且在原有功能上做了精简 该系列文章所有代码放在这里 开始 所需的包github.com/gorilla/mux 我们在启动http服务时设置一下路由的配置方法 func startHttp() { if err := http.ListenAndServe(":9090", api.NewAPIMux()); err != nil { log.Fatal("ListenAndServe: ", err)...阅读全文

2017年10月30日 17:17:32 lastsweetop
阅读:4238 评论:0

golang进阶(五)——restful开发的json处理

前言 restful开发时,对象转json,json转对象是非常频繁的操作,怎么样才能少些重复的代码呢,以这个为目的开启这篇文章 所有代码放在github上 简化数据结构 每次需要返回的数据有code,msg,data这些字段,每个类型都加这些字段太繁复了,这里有interface的方式,去代替任意类型,然后使用的时候data字段与其他类型任意的组合 package model type Resp struct { Code string `json:"code"` Msg string `js...阅读全文

2017年10月31日 16:47:47 lastsweetop
阅读:1525 评论:0

GO Logger 日志实践

分析一下用过的打印日志的log包 Go标准库自带log, 这个log的func比较少, 没有区分level, 但足够简单, 有prefix功能, 可以设置flag来控制时间格式, caller的文件名和行数, 其它的标准包如 net/http database/sql 等也用了此包. 对自带的log进行包装, 加入level, 颜色. 如ngaut/log, 这个log star数并不多, 还是从最近很火的一个项目pingcap/tidb里看到的, 有点小清新的感觉, 但这个log可能只是为ti...阅读全文

2017-05-19 00:00 hanjm
阅读:1976 评论:0

在Github中stars数最多的Go日志库集合

在Go语言世界中,日志库并不像Java世界那里有一个具有统治力的日志库。在做新项目技术选型的时候,难免会遇到日志库的选择问题,今天笔者就为大家介绍一下在Github中stars数最多的Go日志库。 logrus是我已知的Go语言日志库中在Github中stars数最多的日志库,功能强大,性能也不错。另外值得一提的是logrus的一个fork库gogap/logrus,可以配置输出到文件和graylog日志系统,基础的level、调用链、行号,文件切分都有,特色是结构化日志可以被统计和索引,借助g...阅读全文

2017-12-19 19:46:19 终于19岁
阅读:15161 评论:0

Golang Context

参考 Go语言实战笔记(二十)| Go Context Golang context初探 一、WaitGroup func main() { var wg sync.WaitGroup wg.Add(2) go func() { time.Sleep(2*time.Second) fmt.Println("1号完成") wg.Done() }() go func() { time.Sleep(2*time.Second) fmt.Println("2号完成") wg.Done() }() wg....阅读全文

阅读:777 评论:2