阅读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...阅读全文

ITEYE博客 2010-07-02 21:48 javatgo

对比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...阅读全文

开源中国博客 2014-06-21 18:52 ZhouJunhua

为何要用go语言

GO作为一门新兴语言,为什么会在众多新语言中脱颖而出?为什么曾一度出现在TIOBE排行榜上面,在本文中我们就来为大家解开其中的神秘面纱。 Go是一种根本性的反思本机语言,在很大程度上改善了C语言的不足地方并且保持了C的极简主义。已经有好多程序员都把Go语言描述为是一种所见即所得(WYSIWYG)的编程语言。这是说,代码要做的事和它在字面上表达的意思是完全一致的。 在这些新语言中,包含D,Go,Rust和Vala语言,Go曾一度出现在TIOBE的排行榜上面。与其他新语言相比,Go的魅力明显要大...阅读全文

博客园 2012-08-21 16:31 zbba

go语言中的defer、panic、recover处理异常

go语言中的defer就像c++中的析构函数,但是go语言中defer的对象是函数(或者对象的方法),defer能保证在函数结束最后执行该方法(函数),但是有例外:如果在定义的方法中defer定义的方法如果在panic后面,defer定义的方法就无法执行到。 panic 是用来表示非常严重的不可恢复的错误的。在Go语言中这是一个内置函数,接收一个interface{}类型的值作为参数。panic 的作用就像我们平常接触的异常。不过Go可没有try…catch,所以,panic一般会导致程序...阅读全文

开源中国博客 2013-06-14 10:58 DEC_LIU

go语言编程

package 指明源文件所在的包 func 用于定义函数 go里面除了for循环的初始化用到;,其他大部分都不需要 go中没有while循环,不过可以利用 for condition来模拟while   编译: go builde 编译的文件名 定义一个变量,比如字符串 var s string = "" go也自动推导出类型 var s = ""; 也可以 s:="" :=用在值声明并且初始化 05 package main 07 import ( 08 "os...阅读全文

博客园 2013-04-24 20:21 linyilong3

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 ...阅读全文

开源中国博客 2014-02-27 15:17 咖啡伴侣

go语言入门

go 语言下载地址: http://code.google.com/p/go/downloads/list 下载 轻量开发工具 http://code.google.com/p/liteide/   我为什么喜欢Go语言 使用CGO封装Windows API 用Go写Windows桌面应用 - 使用Form 用Go写Windows桌面应用 - 使用资源文件 用Go写Windows桌面应用 - 使用窗体设计器   http文件共享 // test project main.go package...阅读全文

博客园 2012-10-10 20:21 meetrice

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目录下有个文件夹名...阅读全文

ITEYE博客 2012-10-08 17:27 nanjingjiangbia 等

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文件夹上右击 ...阅读全文

开源中国博客 2013-04-18 12:42 阳光灿烂的日子

go语言25个关键字总结

var和const :变量和常量的声明 var varName type  或者 varName : = value package and import: 导入 func: 用于定义函数和方法 return :用于从函数返回 defer someCode :在函数退出之前执行 go : 用于并行 select 用于选择不同类型的通讯 interface 用于定义接口 struct 用于定义抽象数据类型 break、...阅读全文

开源中国博客 2013-07-10 16:54 T_star

go资料汇总

Go官方http://golang.org/Go代码http://code.google.com/p/go/http://code.google.com/p/gomingw/downloads/listGo 语言中文翻译项目http://code.google.com/p/golang-china/Go语言中文论坛http://bbs.golang-china.org/在线学习http://go-tour-zh.appsp0t.com/#1http://www.mikespook.com/lea...阅读全文

ITEYE博客 2012-11-13 14:51 afeifqh

[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...阅读全文

博客园 2013-03-25 20:53 deansinaean

[读书笔记] goroutine 与 erlang process 的区别

在传统的服务器编程模型中,我们会为每一个请求分配一个线程,请求结束后终止该线程,或者把线程放回线程池。 Java 的 Servlet 就属于这种模型的典型。对于 PHP, Ruby, Python 这些语言,要么对于多线程支持不好,要么在多线程下表现不好,通常我们会为每个请求分配一个进程,但整体模型都差不多。 通常我们的请求并不是一直在消耗CPU, 一个请求的大部分时间都花在等待磁盘,数据库,cache,其他服务返回上面,或者说等待一个事件发生(比如 web 版的 IM, 通常会建立一个 HTT...阅读全文

博客园 2011-10-07 00:31 lidaobing

学习go语言 我的习题答案 chapter3

这章节主要讲的是go中函数使用 在做习题过程中碰到的几个比较值得纪念的问题是 定义了命名返回函数 但是没有把它放在括号里面 结果一直编译通不过 但是一眼看过去还是不知道怎么错了A 还有一个给我深刻印象的就是go的强类型检查 以及变量的申明方式 和c/c++区别比较明显的就是定义array 之前好像看过c/c++中的指针定义 那个*放在哪里的问题 还有就是数组[]应该放在哪里比较合适 在go中数据类型全都后置 比如: var test_var int ...阅读全文

开源中国博客 2013-02-03 10:27 pengfei_xue

go 通过nginx代理后获取用户ip

go 如果使用自己的服务器,可以直接使用 net/http 来获取 func ip(w http.ResponseWriter, r *http.Request) {     fmt.Println(r.RemoteAddr) } 另外,在net包中也有  func (c *IPConn) RemoteAddr() Addr 以上是获取用户的ip,是与用户直连的ip,如果走代理,会是代理的ip 如果通过nginx代理,上边方法获得的是nginx的服务器的ip,所以这里要设置nginx代...阅读全文

开源中国博客 2014-08-14 19:22 zggsdy

[Golang]如何在golang程序中自动获取编译时间

在程序发布之后,经常需要识别程序的版本号,来确定一些问题是否因为程序未更新造成的,其中通过在程序启动日志中输出编译时间是最有效方法。 在golang中没有C语言__FILE__,__LINE__,__DATE__,__TIME__这些好用的编译期常量给我们使用,好在golang提供了强大的cgo在go代码中嵌入C代码的方法,可以实现这个需求。 废话不多说,直接上代码: package main /# const char* build_time(void) { static const char...阅读全文

新浪博客 (2014-01-02 23:03:04) ally2014