古老的榕树

Go bytes.Buffer 和 strings.Builder 性能比较

Go 语言里字符拼接是常用到的,而且只是进行少量的字符串拼接,这次专门根据这个场景进行做基准测试,具体代码如下,如果测试方法有什么欠妥的地方,还请读者提出来。本次测试力求测试的公平性。 测试目标方法代码: /** strbyt.go package src import("bytes""fmt""strings") func AppendWithAdd() { var s string for i: =0; i < ... 阅读全文
发表于 2018-03-18 21:36 阅读(3089) 评论(0) 赞(0)

优雅地关闭 Go HTTP 服务

Go 1.8 之后,http.Server 增加了 Shutdown 函数,类似于第三方的 graceful 插件一样,可以平滑的关闭自身 HTTP 服务了,我们看看代码: package main import ( "context" "github.com/urfave/negroni" "log" "net/http" "os" "os/signal" "time" ) func main(){ mux := http.NewServeMux() mux.HandleFunc("/", func(w http.Response ... 阅读全文
发表于 2018-01-11 11:51 阅读(2130) 评论(0) 赞(1)

Go 定时器 cron 表达式的使用

上次在《Go 定时器 cron 的使用》里说 cron 简单使用方法,如果想更灵活的使用定时,可能会涉及到更复杂的六位表达式的使用方法,如每半小时执行一次: 0 30 * * * * 六位的表达式看起来,有点费解,好比正则表达式一样,我们需要按步骤来理解; 理解六个作用域的意义 0 0 0 1 1 * 0 0 0 1 * * 0 0 0 * * 0 0 0 0 * * * 0 0 * * * * ... 阅读全文
发表于 2018-01-11 00:02 阅读(1229) 评论(0) 赞(1)

Go 定时器 cron 的使用

cron 是 robfig 开发的一个定时作业库,robfig 总是想的比别人早,给了我们这些 Gopher 不少急需的东西,想当年 revel 的出现也是这样的。看看 cron 的使用,还是一如既往的简洁明了,发现 Go 的世界里,有些产品还是有鲜明的个人特质的,那就是所谓的个人魅力吧?! 总之 robfig 开发的产品都是有一定超前性,比较有理论基础,使用起 ... 阅读全文
发表于 2018-01-10 23:57 阅读(1347) 评论(0) 赞(3)

Negroni 应用教程系列(二)

在介绍 Negroni 经典实例三大组件:日志 Logger,异常 Recovery,静态文件 Static 之前,需要说说它们采用的底层内幕,那就是中间件。Negroni 负责把一个个中间件链接起来,按照顺序逐一执行,形成一个中间件链。 Negroni 中间件实质是一个接口,名为 Handler,我们看看它的定义: type Handler interface { ServeHTTP(rw http.Respon ... 阅读全文
发表于 2018-01-10 23:52 阅读(1329) 评论(1) 赞(2)

Negroni 应用教程系列(一)

创建一个 Web 服务器 Negroni 本身和 Go 语言哲学是一脉相承的,这是作者的初衷。我们看看怎么创建一个 Web 服务器。 新建一个 server.go 文件,代码如下: package main import ( "fmt" "net/http" "github.com/urfave/negroni" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, req *ht ... 阅读全文
发表于 2018-01-10 23:48 阅读(1039) 评论(0) 赞(2)

Go 生成合法的 IP

利用 Go 语言,生成合法的 IP,代码如下: package util import ( "fmt" "math/rand" "time" ) // 随机生成合法 IP,如: 222.16.123.95 func RandomIp() string { // IP 范围二维数组 ranges := ipRange() idx := newRand().Intn(10) return numToIp(ranges[idx][0] + newRand().Intn(ranges[idx][1]-ranges[idx][0])) } // 随机生成 ... 阅读全文
发表于 2017-07-19 11:14 阅读(2676) 评论(0) 赞(1)

Go 发起 HTTP 请求及获取相关参数

Go 要请求远程网页,可以使用net/http包中的client提供的方法实现。查看了官方网站有一些示例,没有太全面的例子,于是自己整理了一下。 Get 请求 Get 请求可以直接 http.Get 方法,非常简单。 func httpGet() { resp, err := http.Get("http://www.01happy.com/demo/accept.php?id=1") if err != nil { // handle error } ... 阅读全文
转载于 2017-05-01 11:48 阅读(3402) 评论(0) 赞(0)

Go 查询数据库 Scan Null 字段报错解决办法

Go 语言基本类型都有默认值,比如整型,长整型,浮点型,字符串等等,都会有自己唯一的默认值 0,空字符串"",而不是nil, 这是它自身的特征,因为这个原因,Go 操作数据库,返回结果扫描填充结构体的时候,往往差强人意。当数据库字段是null值的时候,Goscan 数据填充结构体就出错了。 遇到这种情况,部分用户只能使用 sql.Null*** ... 阅读全文
发表于 2016-12-25 10:44 阅读(2412) 评论(0) 赞(1)

Go 时间中文个性化处理

现在有些时间比较个性化,比如:5年前,11月前,20天前,23小时前,59分钟前,59秒前,刚刚... 等等,Go 语言可没有这些函数处理,我相信多数语言也不会内置处理此类的东西的,现在自己写个方法,首先要算出当前时间和给定的时间差,就是秒差,有了这个秒差,再进一步人工处理。废话少说,贴上代码吧(代码只是瞬间的思路和随手写法, ... 阅读全文
发表于 2016-09-26 00:06 阅读(1744) 评论(0) 赞(4)

让 Go 代码自动加载

有时 Go 项目开发过程中,让新增、修改的代码智能编译重启,避免人为频繁 build 工作,是不错的事情。 然而 Go 是不会内置这些东西的, 目前 Go 领域,有哪些类似的库呢?我们可以使用第三方的库实现这种工作,但仅限于开发的阶段,正式服务环境,应该不是非常必要这么做。 第三方实现的类库有这两个,使用起来都很方便: gin https:/ ... 阅读全文
发表于 2016-04-16 15:14 阅读(3475) 评论(0) 赞(1)

Go 语言 json 的时间格式化

Go 语言开发 reset 的接口,结构体转成 json 的时间都是带时区信息的,这并不是我们想要的,例如: 结构体: type Article struct { WebSite string Title string Created time.Time } 结构体实例转成 json 后,结构: {"Created":"2016-03-20T20:44:25.371Z","Title":"测试标题5","WebSite":"5-wow.com"} 实际上我们需要这样的 json ... 阅读全文
发表于 2016-04-14 23:35 阅读(2644) 评论(0) 赞(1)

Go 语言的一个配置文件解析器

Go 语言里找一个配置文件解析器,无意间发现了 https://github.com/robfig/config 这个库是 robfig 从 https://github.com/miguel-branco/goconfig 里分支修改过来的。看了下时间,已有一年多没动过了,估计库已相当完善,够用了。 在 github 里很多优秀的库或人,已经尘封了很长的时间,不知道什么原因,让人挺感慨的,毕竟前人花费 ... 阅读全文
发表于 2016-04-14 22:27 阅读(3378) 评论(0) 赞(1)

Go 语言的包

包是函数和数据的集合。用 package 关键字定义一个包。文件名不需要与包名一致。包名的约定是使用小写字符。 Go 包可以由多个文件组成,但是使用相同的 package <name> 这一行。让我们在文件 even.go 中定义一个叫做 even 的包。 Listing 3.1. 一个小包 package even ← 开始自定义的包 func Even(i int) bool { ← 可导出函数 ... 阅读全文
发表于 2016-04-12 21:08 阅读(2001) 评论(0) 赞(1)

对 sqlx 误解的澄清

上次在《 Go 数据操作之 grop 和 sqlx 》上说,使用 sqlx 过程中,对它产生一些误会,其实当时是拿它与 gorp 做比较,本身 gorp 是一个半自动型的 orm 库,而 sqlx 并不是在 orm 范畴。便利性没有比拟性的。 sqlx 有它的应用场合,因为使用它连接数据库,很简单,不用配置 struct 实体关联到表,直接可以把执行 sql 的结果(结果集) ... 阅读全文
发表于 2016-02-17 15:51 阅读(2732) 评论(4) 赞(0)

Go 的表单绑定器

Go 做 Web 开发,也算成熟了,平时后台开发,需要一款得心应手的表单绑定器,表单绑定器能快捷把表单数据填充业务实体类,免去 request 里一个个获取数据,赋值给实体类,省去了大量的时间和代码。 目前发现两个比较好用的表单绑定器: binding: https://github.com/mholt/binding bind: https://github.com/robfig/bind 自己常用的 ... 阅读全文
发表于 2016-01-10 23:21 阅读(1978) 评论(0) 赞(0)

Go 用 Go 来开发后

Go 1.4 后开始计划自举,也就是Go 用 Go 开发和编译。很少听到一门语言这么做,感觉很新鲜。最初 Go 1.5 采用 Go 1.4 开发并编译出包,现在 Go 1.6 都准备出来了,回顾 2015 年 Go 发明者的自举做法,个人觉得非常成功。 为什么这么说呢,我发现 Go 1.5.2 的效能很不错,原先以为性能上估计会大打折扣的,结果自举后的版本和 C 开发的 ... 阅读全文
发表于 2016-01-02 19:31 阅读(1889) 评论(0) 赞(1)

myblog 博客采用的技术方案

自己学习 Go语言,只看一些语法,不实践,感觉有点缺点什么,所以干脆开发一个自己的博客,很普通很通用的那种,开源出来做个纪念,但有点苦恼, 一时想不到好的名字,暂时叫它 myblog 吧,后期放到 github 里。 myblog 这么一个简单的 web 项目,竟然花了好几天的时间,想想做程序的就是有点苦逼,东西改来改去的,看似小不点,花费 ... 阅读全文
发表于 2016-01-02 13:28 阅读(2988) 评论(3) 赞(3)

部署 Go 语言开发的 Web 项目

Go 语言开发的 Web项目部署也算简单, Go 语言内置有自己的服务器,这个有别于 Java ,Java 需要借助 一些容器,把项目放置到容器中执行,比如 Tomcat Jetty Jboss WildFlyGlassfish 等等很多成熟的容器。 我平时用得最多的算 Java,部署比起 脚本语言部署,来得简单直接一些,但比起 部署 Go 语言项目,那就不算最简单的了。 Go 语言 ... 阅读全文
发表于 2016-01-02 12:58 阅读(4973) 评论(2) 赞(4)

Ubuntu Debian 安装 Go 语言步骤

Ubuntu Debian 安装 Go 语言,其实算是超级简单的,之前不懂,自己下载了源码,安装 C 来编译,想想有点麻烦,如今一般用户不需如此,只需要下载 Go 语言压缩包,放置某个路径下(用户自行选): /usr/local/go 然后在某个路径下(用户自行选)新建一个 GOPATH 文件夹: cd /var/ mkdir GOPATH 最后配置一下,打开全局的 profile: nan ... 阅读全文
发表于 2016-01-02 12:33 阅读(1791) 评论(0) 赞(1)
第 2 页 共 3 页 上一页 下一页

关于作者

About Me

忘却理想,只为洒脱地活着!

文章数(90)

评论数(32)

访问数(173821)

最新评论