mac上安装go语言
我将在mac os x的开发机器上安装go语言的开发环境。 go语言运行包下载地址:http://code.google.com/p/go/downloads/list 这里我选择安装 go1.0.3.darwin-amd64.pkg 在mac上点击安装,运行包自动安装到/usr/local/go中,这样在命令终端就可以运行go命令了 这里,我把go编辑器安装到我的xcode应用程序中,由于我的xcode装的是4.x以上 在/usr/local/go/misc中,可以看到有很多编辑器版本,这里找...阅读全文
[golang]让golang支持泛型编程的一个方案实现
本博客原创博文版权所有 @Ally vipally@gmail.com 仅供交流学习使用用于商业用途请联系原作者 转载请注明出处:http://blog.sina.com.cn/ally2014 总所周知,golang现在不支持泛型编程,对于习惯了C++泛型编程思想的程序员来说无疑是一个硬伤。 虽然golang interface{}多少可以满足一些泛型需求,但是无论在效率和编程手法上,都无法达到C++ template那样的灵活性。出于对编译器效率的考虑,官方暂时还没有golang支持泛型的方...阅读全文
go语言的init函数
go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性, 有下面的特征: 1 init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等 2 每个包可以拥有多个init函数 3 包的每个源文件也可以拥有多个init函数 4 同一个包中多个init函数的执行顺序go语言没有明确的定义(说明) 5 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序 6 init函数不能被其他函数调用,而是在main函数执行之前,自动被调用 下面这个示例摘自...阅读全文
让go语言调用外部程序时支持管道符
有一个需求是用go语言程序调用外部命令时,允许使用管道符,如 ls | wc -l Go语言对外部命令的调用进行了一定的封装,下面来试一下: package main import ( "os" "os/exec" ) func main() { run1() } func run1() { cmd := exec.Command("ls", "|", "wc", "-l") cmd.Stdout ...阅读全文
阅读go语言源代码1
前面大概说过bison与yacc的语法,那么其实go也是用bison来实现的,下面来说说怎么阅读go语言源代码。要看代码首先得找到代码的入口,怎么找呢?你可能首先想到grep main是的,一般来说这是一个没有争议的办法,但是对于go语言来说,这个办法对,也不对。怎么说呢?我们用gdb来进行debug就会看到所有的go语言程序的入口居然都在src/lib9/main.c里的main函数。 #include <u.h> #define NOPLAN9DEFINES #include <libc.h...阅读全文
对比C, java, go 递归计算fibonacci(40) 的性能
// fibonacci.c #include <stdio.h> int main() { printf("%d", fibonacci(40)); } int fibonacci(int n) { if (n < 2) { return 1; } return fibonacci(n - 2) + fibonacci(n - 1); } 编译: CFLAGS="-march=corei7...阅读全文
go语言中的defer、panic、recover处理异常
go语言中的defer就像c++中的析构函数,但是go语言中defer的对象是函数(或者对象的方法),defer能保证在函数结束最后执行该方法(函数),但是有例外:如果在定义的方法中defer定义的方法如果在panic后面,defer定义的方法就无法执行到。 panic 是用来表示非常严重的不可恢复的错误的。在Go语言中这是一个内置函数,接收一个interface{}类型的值作为参数。panic 的作用就像我们平常接触的异常。不过Go可没有try…catch,所以,panic一般会导致程序...阅读全文
学习记录:go语言中读写文件的小练习
package main import ( "os" "fmt" "bufio" "strings" "strconv" ) func main() { f, _:=os.OpenFile("a.txt", os.O_RDONLY, 0666) defer f.Close() m:=bufio.NewReader(f) char:=0 words:=0 lines:=0 for{ s, ok:=m.ReadString('\n') fmt.Println(s)...阅读全文
msgpack在java/c和go中序列化的区别-解决
既然已经知道msgpack-java/msgpack-c里,默认情况下把class pack成类似json-array 而msgpack-go,默认情况下把class pack成类似json-map 顺着这个,翻看msgpack-Go的代码,找到了MsgpackHandle 。。。。中间过程省略 最后找到答案,其实msgpack-go已经提供好api package main import ( "fmt" "github.com/ugorji/go/codec" ) type ...阅读全文
go语言入门-安装-编写-运行
一、安装 把下载的GO语言解压后放到C盘。 二、进行变量设定。 在环增变量-系统变量中我们共增加了五个全局变量,具体名字是 1、变量名:GOBIN变量值:c:\go\bin它的意思就是GO的编译目录在c:\go\bin这个文件夹里。 2、变量名:GOROOT变量值:c:\go它的意思就是GO的主目录在c:\go这个文件夹里. 3、变量名:GOOS变量值:mingw如果你下载的是第二个地址的话,这个变量值应当是windows.这是为什么呢,因为我们C:\go\pkg目录下有个文件夹名...阅读全文
windows下 sublime text2 跳转查看go源码
1.下载ctags 网站被墙,点此下载 下载后的exe文件随便放在哪个目录,将目录添加到 环境变量 path中.然后 cmd,输入ctags --help,显示一堆帮助文字,说明就可以了。 3. 在sublime text 2中安装CTAGS, ctrl + shift + p输入CTAGS回车就行了,不知道怎么安装包的请百度。 4. 在sublime text 2打开$GOROOT下src\pkg目录(例如 D:\go\src\pkg),在左侧边栏pkg文件夹上右击 ...阅读全文
go语言25个关键字总结
var和const :变量和常量的声明 var varName type 或者 varName : = value package and import: 导入 func: 用于定义函数和方法 return :用于从函数返回 defer someCode :在函数退出之前执行 go : 用于并行 select 用于选择不同类型的通讯 interface 用于定义接口 struct 用于定义抽象数据类型 break、...阅读全文
[go语言]避免过度重构
golang-nuts上有人提了一个问题[1],询问怎么样把减少两个类似数据结构和算法的重复代码。简而言之,有两个struct:QuickFindSet和QuickUnionSet,它们各有Count, IsConnected, Find, Union等方法。他发现这两个struct的一些函数的实现是一样的,因此他希望能消除这些重复代码。 ? www.usr.cc 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 0...阅读全文