Go的List操作上的一个小“坑”
一直想不清楚一个问题,简单设计的东西到底是“坑多”还是“坑少”呢? 复杂的设计,考虑的太全面,使用起来更麻烦,使用者容易陷入乱,落入自身的陷阱;而简单的设计呢,在许多方面上又顾及不周,如果使用者对其“设计”没仔细研究,或者其实现本身又是一个黑盒子,也容易掉入到设计本身遗留下来的“陷阱”。下面是我刚开始使用Go写代码时碰到的一个小“坑”,这个“坑”的原因我归结为后者。 这个“小坑”来自于go的container/list package的使用上。导致“坑”的代码大概如下所示: 1 2 3 4 5 ...阅读全文
golang基础知识
/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; 今天说一些golang的基础知识,还有你们学习会遇到的问题,先讲解hello word [php] package main import "fmt" func main() { fmt.Println("你好,微度网络"); } [/php] package name 包机制,每一个独立的go程序都需要有一个package main的申明,主要是要为下边入口函数main()做申明的,import...阅读全文
Golang学习(8)——io 包
Golang学习 - io 包--------------------先说一下接口,Go 语言中的接口很简单,在 Go 语言的 io 包中有这样一个函数:func ReadFull(r Reader, buf []byte) (n int, err error)这个函数可以把对象 r 中的数据读出来,然后存入一个缓冲区 buf 中,以便其它代码可以处理 buf 中的数据。这里有个问题,ReadFull 函数究竟可以读取哪些对象的数据?可以读文件中的数据吗?可以读网络中的数据吗?可以读数据库中的数...阅读全文
Plan 9安装Go
I、安装python和mercurial(hg) 首先是在term中输入9fs sources, 然后cd到/n/sources/contrib下,参照Plan 9的contrib index,找到"From fgb's contrib"的python用户名。 % 9fs sources % /n/sources/contrib/fgb/root/rc/bin/contrib/install fgb/contrib % contrib/install -f bichued/python % co...阅读全文
剖析Go1.3新特性:sync.Pool
Go 1.3 的sync包中加入一个新特性:Pool。官方文档可以看这里http://golang.org/pkg/sync/#Pool 这个类设计的目的是用来保存和复用临时对象,以减少内存分配,降低CG压力。 type Pool func (p *Pool) Get() interface{} func (p *Pool) Put(x interface{}) New func() interface{} Get返回Pool中的任意一个对象。如果Pool为空,则调用New返回一个新创建的对象。...阅读全文
Golang学习(7)——sync包
Golang学习 - sync 包--------------------临时对象池 Pool 用于存储临时对象,它将使用完毕的对象存入对象池中,在需要的时候取出来重复使用,目的是为了避免重复创建相同的对象造成 GC 负担过重。其中存放的临时对象随时可能被 GC 回收掉(如果该对象不再被其它变量引用)。 从 Pool 中取出对象时,如果 Pool 中没有对象,将返回 nil,但是如果给 Pool.New 字段指定了一个函数的话,Pool 将使用该函数创建一个新对象返回。Pool 可以安全的在...阅读全文
Golang学习(6)——sort包
Golang学习 - sort 包--------------------// 满足 Interface 接口的类型可以被本包的函数进行排序。type Interface interface { // Len 方法返回集合中的元素个数 Len() int // Less 方法报告索引 i 的元素是否比索引 j 的元素小 Less(i, j int) bool // Swap 方法交换索引 i 和 j 的两个元素的位置 Swap(i, j int)}// 对 data 进行排序(不保证相等元素的相...阅读全文
在windows下配置GO编译环境
1、下载安装包 大家可以从Go lang主页上找到各个平台下的安装方法: 主页:http://golang.org/# 安装文档:http://golang.org/doc/install Go source: http://code.google.com/p/go/ windows 下载包:http://code.google.com/p/go/downloads/list?q=OpSys-Windows+Type%3DInstaller 我自己下载的是msi包,这个不要设置环境变量,安装完成...阅读全文
Go是如何用组合实现继承的
Go提供了很赞的并发支持,但是Go并不支持完全的面向对象。这并不代表Go不支持面向对象,而且Go的OO系统做的非常轻量,学习成本压到了最小。尽管为了做到这种轻量级的面向对象让Go失去了一些OO的方便特性,但是更高的效率和多返回值多少弥补了这一点。 那些完全支持面向对象的语言一般都具有继承的功能。继承有很棒的优点,最简单了讲,就是可以少写代码。当然,继承并不仅仅是让你省了敲几下键盘的功夫,它还能更好的抽象程序中各种类型之间的关系。 Go的OO系统不支持继承,但是可以使用Go中一种叫做"组合"的方法...阅读全文
进一步认识golang中的并发
如果你成天与编程为伍,那么并发这个名词对你而言一定特别耳熟。需要并发的场景太多了,例如一个聊天程序,如果你想让这个聊天程序能够同时接收信息和发送信息,就一定会用到并发,无论那是什么样的并发。 并发的意义就是:让一个程序同时做多件事情! 理解这一点非常重要,是的,并发的目的只是为了能让程序同时做另一件事情而已,并发的目的并不是让程序运行的更快(如果是多核处理器,而且任务可以分成相互独立的部分,那么并发确实可以让事情解决的更快)。记得我学C++那时候开始接触并发,还以为每开一个线程程序就会加速一倍呢...阅读全文
Golang学习(5)——strconv包
Golang学习 - strconv 包--------------------// 将布尔值转换为字符串 true 或 falsefunc FormatBool(b bool) string// 将字符串转换为布尔值// 它接受真值:1, t, T, TRUE, true, True// 它接受假值:0, f, F, FALSE, false, False// 其它任何值都返回一个错误。func ParseBool(str string) (bool, error)--------------...阅读全文
Golang中如何模拟C语言中的if(scanf(…)==EOF)来控制输入的终止
相信很多从C/C++转到Golang的朋友们都经常会对Go中的输入控制感到头疼。。。尤其是如果要在Go中模拟C语言中的如下代码会遇到不小困惑: char input[100]; while (1) { if (scanf("%s", input) == EOF) { printf("输入结束\n"); break; } } 上面这段代码在控制台中输入一个Ctrl+Z(EOF) 就可以终止输入了: C语言中的 int scanf() 函数返回的是一个int类型,它的值只有三种情况: (1) 如果一...阅读全文
Go中error类型的nil值和nil
先看C语言中的类似问题:空字符串。 const char* empty_str0 = ""; const char* empty_str1 = "\0empty"; const char* empty_str2 = NULL; 以上3个字符串并不相等,但是从某种角度看,它们都是对应空的字符串。 empty_str0 指向一个空的字符串,但是empty_str0本身的值是有效的。 empty_str1 指向一个非空的字符串,但是字符串的第一个字符是'\0'。 empty_str2 本身是一个空的指...阅读全文
golang指针与C指针的异同
总结一下golang中的指针与C语言的指针的用法。 总体一致: C的代码: ? 1 2 3 4 int *number; number = (int *) malloc(sizeof(int)); *number = 3; printf("%d\n", *number); golang的代码: ? 1 2 3 4 var pointer *int; pointer = new(int); *pointer = 3; fmt.Println(*pointer); 多重指针情况: C的代码: ? 1...阅读全文
GO语解惑:从源码分析GO程序的入口
起因 最近几天学完了GO语言,但是教材里给出的信息太少,不能满足需要。于是在网上看了许多博文,这就发现其中有许多冲突之处,使人越发迷惑。为了解惑,我深入分析了一下GO语言而小有心得,想把其中的一些分享给大家,希望能提高大家的学习效率。 GO语言的真正入口 GO语言的runtime.Caller方法会提供当前goroutine的栈上的函数调用信息,主要有当前的PC值和调用的文件和行号。若无法获得信息,第四个返回的值为false。当我们在main.main里使用这个函数(本函数为转载): func ...阅读全文
【干货】Gisp 解释器 Golang 辅助开发工具
Gisp 是一个提供给 golang 使用的 Lisp 类 DSL 解释器。在 Lisp 的基本语法基础上,针对 go 环境稍作了一点语法糖。主要目标是提供一个尽可能便于与 golang 互操作的微型DSL工具。 简介 Gisp用go语言编写,是一个DSL 解释器,这个 DSL 基本上就是 LIsp 的基础语法,针对go程序的互操作需要稍微做了一点扩展。它的主要设计目标是尽可能方便的在 go 程序中调用 gisp 解释器,执行 dsl。 我们的项目,目前后台主要用 golang 开发。开发过程中...阅读全文
go学习(四)简单的网站
一、写在之前: 这几天闻听go出了1.1版。网上传其性能是原来的两倍。当然有好多反对声音。不过了作为一个一心想弄go的人就在想。我怎么升级了。怎么升级了? win不用说直接重新下载。 linux了: $ cd go/src $ hg pull $ hg update release $ ./all.bash 哈就这么简单! 二、开始web 代码很简单啊。真没想到这么简单!: package main import ( "io" "net/http" "log" ) // hello world,...阅读全文
go programming language(2)
http://tour.golang.org/#1一个很方便学习go的网站 今天看了一下go的流程和面向对象,印象比较深的有 1 go的var的定义格式和c相反 2 go可以多个参数一起赋值 3 go的函数可以有多个返回数值 4 go的语法糖,给任意类型添加函数 5 大小写来区别package函数的private和public 大体感觉go就是一个比较时髦的C, 下一步的学习并行和网络编程,还有一本effective Go的书。 http://go.tuna.tsinghua.edu.cn/do...阅读全文
Golang学习(4)——strings包
Golang学习 - strings 包--------------------strings 包与 bytes 包中的函数用法基本一样,不再赘述。 只对 Replacer 进行说明。// 转换func ToUpper(s string) stringfunc ToLower(s string) stringfunc ToTitle(s string) stringfunc ToUpperSpecial(_case unicode.SpecialCase, s string) stringfun...阅读全文