Sublime Text 2使用ctags实现函数跳转

关于ctags的介绍,在这里就不介绍了,大家可以搜索了解下。(Ubuntu下测试通过,其他环境并未测试) 1. 安装ctags,如下: curl -O http://prdownloads.sourceforge.net/ctags/ctags-5.8.tar.gz tar xzvf ctags-5.8.tar.gz cd ctags-5.8 ./configure make sudo make install 2. 添加 ~/.ctags文件,内容如下: –langdef=Go –langma...阅读全文

Rhino 的博客 2013年1月10日 Rhino(犀牛)

GDB调试Go程序若干问题备忘

1. 很早之前写过GDB调试简单Go程序的文章,没有带命令行参数,最近再看一个开源项目需要用到带命令行参数的调试。 如下: 查看帮助得到如下: gdb [options] --args executable-file [inferior-arguments ...] 例如: gdb --args revel run github.com/yourihua/console 2. 载入 Go Runtime: source /home/yourihua/go/src/pkg/runtime/runt...阅读全文

Rhino 的博客 2013年1月10日 Rhino(犀牛)

Go简单排序

写代码的时候发现需要对map[int64]int64排序,golang中sort包来解决这个问题,下面是从网上找的2个例子,备忘下。 例子一: package main import ( "fmt" "sort" ) func main() { m := map[string]string{"b": "15", "z": "123123", "x": "sdf", "a": "12"} mk := make([]string, len(m)) i := 0 for k, _ := range m...阅读全文

Rhino 的博客 2013年1月8日 Rhino(犀牛)

Revel命令行工具编译使用

上一篇,简单介绍了下Revel,这一篇我们看下 github.com/robfig/revel/cmd 这个命令行工具。 文档:http://robfig.github.com/revel/manual/tool.html 首先,编译Revel命令行工具,如下: go build -o bin/revel github.com/robfig/revel/cmd 接着运行帮助,如下: yourihua@ubuntu:~/workplace/rhino/bin$ revel help ~ ~ rev...阅读全文

Rhino 的博客 2013年1月6日 Rhino(犀牛)

Revel框架简介

简介:A high-productivity web framework for the Go language, modeled on Play! Framework. 上图是Revel的logo,它是一个以Java的Play!框架为蓝本编写的高效的Go语言Web框架。 项目地址:http://robfig.github.com/revel/ 源码地址:https://github.com/robfig/revel 特点:热编译,简单可选,同步(每个请求都创建自己的goroutine来处理)。...阅读全文

Rhino 的博客 2012年12月26日 Rhino(犀牛)

goprotobuf基本使用

如果你对Google Protocol Buffer不了解,可以先看下我这篇文章里收集的中文资料:关于Google Protocol Buffer的中文资料 源码地址:https://code.google.com/p/goprotobuf/ 详细的介绍:https://code.google.com/p/goprotobuf/source/browse/README 介绍: This software has two parts: a ‘protocol compiler plugin’ th...阅读全文

Rhino 的博客 2012年12月9日 Rhino(犀牛)

关于Google Protocol Buffer的中文资料

最近打算写一篇关于goprotobuf的使用教程,先了解了Google Protocol Buffer相关的知识点。下面是谷歌到的不错的资料,故记录下来方便以后查找。 Google Protocol Buffer 的使用和原理:http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/index.html Google Protocol Buffers浅析系列:http://www.cnblogs.com/royenhome/archive/2010...阅读全文

Rhino 的博客 2012年12月9日 Rhino(犀牛)

使用SublimeGDB调试Go程序

大家好,好久没有跟新博客了,今天给大家带来一篇Sublime Text 2的插件SublimeGDB的使用教程。 在很早之前,写过一篇关于Sublime Text 2配置Go语言开发环境的文章,如果您还没有看过,可以先看看这一篇文章,地址:http://golanger.cn/?p=32,还写过一篇关于Go使用GDB断点调试的文章,大家也可以看下,地址:http://golanger.cn/?p=91。 接下来我们看下SublimeGDB的安装以及使用: 一,安装SublimeGDB插件:打开P...阅读全文

Rhino 的博客 2012年12月7日 Rhino(犀牛)

Ubuntu下使用GDB断点Go程序

大家好,今天为大家带来Ubuntu下,使用GDB断点调试Go程序。由于之前没有接触过GDB调试,而Go语言本身内置也没有什么调试工具,不像 Eralng,有Debugger可以使用,我从网上搜索了下,也没有相关的中文教程,所以这边自己研究了下,给新手带来一篇关于GDB简单调试Go程序 的文章。(关于GDB的文章还是不少的) 首先,编写测试代码,如下: package main import ( "fmt" ) func main() { fmt.Printf("%sn", "hello, wor...阅读全文

Rhino 的博客 2012年12月7日 Rhino(犀牛)

Ubuntu下使用Sublime Text 2搭建Go开发环境

大家好,这几天捣鼓了下 golang 的环境,今天跟大家分享下心得。 Go is an open source programming environment that makes it easy to build simple, reliable, and efficient software. 摘自 golang.org 首页的介绍。 Go是Google开发的一种编译型,并发型,并具有垃圾回收功能的编程语言。 罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike...阅读全文

Rhino 的博客 2012年12月7日 Rhino(犀牛)

[翻译]编译器(4)-语言设计

原文在此。另外推荐阅读王大师的“设计和开发 Yin 语言”,你会看到另一个完全不同的语言设计思路。 ————翻译分隔线———— 编译器(4)-语言设计 第一部分:介绍 第二部分:编译、转译和解释 第三部分:编译器设计概览 在第一部分概述了这一系列文章将介绍的内容。在第二、三部分粗略的浏览了计算机语言编译的各个步骤。 在本文中,将会比上几篇概述介绍的内容略微详细一些。我将讨论语言的规格说明书。 语言设计概述 我刚刚是不是说我将不再进行太多的概述?一转身,我就变成了一个卑鄙无耻的骗子。 为了让我们更...阅读全文

mikespook 的博客 2014/05/10 mikespook

[翻译]编译器(5)-语言规格说明书

原文在此。 ————翻译分隔线———— 编译器(5)-语言规格说明书 第一部分:介绍 第二部分:编译、转译和解释 第三部分:编译器设计概览 第四部分:语言设计概述 这是最后一部分关于 Calc 的设计规格! 设计语言 我希望尽量让语言保持简单。我管这个语言叫 Calc。很明了,就是用于计算器(calculator)。聪明吗,聪明吗?好,嗯,继续! 我还希望有一个单一的基础类型。我决定做一些与这个语言名字一样聪明的事情,就叫它 Integer(整数)。我知道,聪明绝顶。你的赞赏将被载入史册。为了简...阅读全文

mikespook 的博客 2014/05/11 mikespook

[翻译]编译器(6)-标识符

原文在此。 ————翻译分隔线———— 编译器(6)-标识符 第一部分:介绍 第二部分:编译、转译和解释 第三部分:编译器设计概览 第四部分:语言设计概述 第五部分:Calc 1 语言规格说明书 在本文中,我们终于可以开始沉浸在代码中去了! 标识符 在之前的内容里,我们已经讨论了语法和需要扫描的标识符的集合。我们定义了表达式、数字和运算符。同时还明确期望有成对的括号。还应当让解析器知道,扫描器什么时候到达文件结尾。 在开始扫描之前,为了让扫描器能够工作之前,需要将代码中的标识符格式化。在编译器所...阅读全文

mikespook 的博客 2014/05/12 mikespook

[翻译]编译器(7)-扫描

原文在此。 ————翻译分隔线———— 编译器(7)-扫描 第一部分:介绍 第二部分:编译、转译和解释 第三部分:编译器设计概览 第四部分:语言设计概述 第五部分:Calc 1 语言规格说明书 第六部分:标识符 现在终于可以开始在扫描器上工作了。 词法分析 那么,从哪里开始呢? 这是最难的一部分,对我来说,扫描看起来应该挺简单的,但是很快我就迷失在细节里。有许多种实现扫描器的方法,我只会向你展示其中的一种。这里是 Rob Pike 在一次演讲中的演示文稿,是关于另外一种很酷的方法:在 Go 中的...阅读全文

mikespook 的博客 2014/05/13 mikespook

[翻译]编译器(8)-抽象语法树

原文在此。 ————翻译分隔线———— 编译器(8)-抽象语法树 第一部分:介绍 第二部分:编译、转译和解释 第三部分:编译器设计概览 第四部分:语言设计概述 第五部分:Calc 1 语言规格说明书 第六部分:标识符 第七部分:扫描 在构建解析器之前,首先应当谈谈如何处理目标数据。 需要用某种抽象数据类型来保存所有需要解析的数据。树形数据结构很好的满足了我们的需求。这个树描述了编程语言的语法结构,它被很恰当的叫做抽象语法树(AST)。 AST 树形数据结构总是从一个根开始,我们的也是一样。通常,...阅读全文

mikespook 的博客 2014/05/14 mikespook

[翻译]编译器(9)-解析

原文在此。 ————翻译分隔线———— 编译器(9)-解析 第一部分:介绍 第二部分:编译、转译和解释 第三部分:编译器设计概览 第四部分:语言设计概述 第五部分:Calc 1 语言规格说明书 第六部分:标识符 第七部分:扫描 第八部分:抽象语法树 长征已经走了很远。我们概览了扫描和抽象语法树的基本概念。现在终于可以向着解析前进。 如果你已经开始与概念点不停的斗争,那么我需要警告你,从现在开始会变得越来越难。解析可能是你脑袋里已有的概念中最难的部分。我们将处理扫描器发现的词素,给它们提供一个含义...阅读全文

mikespook 的博客 2014/05/20 mikespook

[翻译]编译器(10)-编译到 C

原文在此。 ————翻译分隔线———— 编译器(10)-编译到 C 第一部分:介绍 第二部分:编译、转译和解释 第三部分:编译器设计概览 第四部分:语言设计概述 第五部分:Calc 1 语言规格说明书 第六部分:标识符 第七部分:扫描 第八部分:抽象语法树 第九部分:解析 终于到最后一个步骤了! 我们的语言规格说明书如此简单,其实可以跳过 C 直接输出汇编。我有两个不这么做的原因。首先,移植性。在这个指引中,我无须编写任何特定架构的 C 代码。C 已经被移植到各种不同的系统中去了,因此可以让 C...阅读全文

mikespook 的博客 2014/05/27 mikespook

[翻译]冰激淋制造商和数据竞态

Dave 总是会给我们带来这种很浅显有趣,又意义深刻的文章。原文在此:Ice cream makers and data races。 ————翻译分隔线———— 冰激淋制造商和数据竞态 Dave Cheney 这是一篇关于数据竞态的文章。本文的相关代码在 Github 上:github.com/davecheney/benandjerry。 这个例子模拟了两个冰激淋制造商 Ben 和 Jerry 随机接待他们的客户。 package main import "fmt" type IceCrea...阅读全文

mikespook 的博客 2014/06/27 mikespook

[翻译]十条有用的 Go 技术

原文在此,实用总结。 ————翻译分隔线———— 十条有用的 Go 技术 这里是我过去几年中编写的大量 Go 代码的经验总结而来的自己的最佳实践。我相信它们具有弹性的。这里的弹性是指: 某个应用需要适配一个灵活的环境。你不希望每过 3 到 4 个月就不得不将它们全部重构一遍。添加新的特性应当很容易。许多人参与开发该应用,它应当可以被理解,且维护简单。许多人使用该应用,bug 应该容易被发现并且可以快速的修复。我用了很长的时间学到了这些事情。其中的一些很微小,但对于许多事情都会有影响。所有这些都仅...阅读全文

mikespook 的博客 2014/07/24 mikespook