golang internals
中文的go语言内部细节的资料几乎没有,所以自己研究了一下 声明:本文内容主要来自本人对源代码的研究,以及网上找到的一些资料的整理,不保证完全正确性 ------------------------------------------------------- 函数调用协议 go语言中使用的是非连续栈。原因是需要支持goroutine。 假设调用 go func(1,2,3) ,func函数会在一个新的go线程中运行,显然新的goroutine不能和当前go线程用同一个栈,否则会相互覆盖。 所以对...阅读全文
学习正则 - golang实现
元字符: 表1.常用的元字符 代码说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 字符转义: 如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.和\*。当然,要查找\本身...阅读全文
win下 golang 跨平台编译
mac 下编译其他平台的执行文件方式请参看这篇文章,http://www.cnblogs.com/ghj1976/archive/2013/04/19/3030703.html 本篇文章是win下的跨平台编译。 安装GCC编译器(MinGW) 我们需要GCC编译环境,这里我选择的是:MinGW。 mac 下安装了Xcode自动就带了GCC,win下没有,所以我们用MinGW这个最小化安装的GCC。 MinGW官网提供了一种自动在线下载安装的gui小程序,http://sourcefo...阅读全文
golang安装和部署
安装golang GOROOT 理论上只要定义这一个环境变量就可以玩了,go编译的时候会首先在安装目录下寻找包 GOBIN 如果不定义的话,默认是$GOROOT/bin 如果想不切换目录执行go的命令的话.需要将$GOBIN 加入到PATH目录中.这个你懂的 GOPATH 一般是你的开发目录,可以有多个.多个目录的时候Windows是分号,Linux系统是冒号,当有多个GOPATH时,默认会将go get的内容放在第一个目录下 $GOPATH 目录约定有三个子目录: src 存放源代码...阅读全文
golang--使用channel来同步goroutine
在golang中同步goroutine有2种方法,要么使用channel,要么使用sync.WaitGroup,本文就是介绍如何通过channel来同步goroutine。先看代码。 1 package main 2 3 import ( 4 "os" 5 "os/signal" 6 "runtime" 7 "log" 8 "syscall" 9 ) 10 11 const NUM_OF_QUIT int = 100 12 13 ...阅读全文
golang中的检验hash
1.对字符串进行hash 大家可以看一下, SHA1 Hashes Go by Example写道: The pattern for generating a hash is sha1.New(), sha1.Write(bytes), then sha1.Sum([]byte{}). 附上golang代码 package main import ( "crypto/sha1" "fmt" ) func main() { s := "...阅读全文
http超时设置 golang
golang提供的http get、post请求是没有设置超时的,但实现生产环境一般都需要设置超时时间。 网上搜索,可以查询到通过设置http.Client中Transport的Dail函数,在自定义的Dail函数里面设置建立连接超时时长和发送接收数据超时: c := http.Client{ Transport: &http.Transport{ Dial: func(netw, addr string) (net.Conn, error) { ...阅读全文
mac下配置gdb调试golang
xcode自带的gdb是6,golang需要的gdb是7,因此,homebrew之 brew install https://raw.github.com/Homebrew/homebrew-dupes/master/gdb.rb 添加证书 钥匙串访问,证书助理,选第二个,证书助理,创建证书,名字为gdb-cert,勾选覆盖默认值,有效期可以改的长一点,一步步下去,注意一定要选择代码签名,安装一定要到系统里面。 配置证书,全部改成信任模式,和goagent的配置方式一样 签名 ...阅读全文
go的隐藏字段的方法
虽然go的编译器会给receiver为值的方法自动实现一个receiver为指针的同名方法,但go的编译器并没有足够聪明 对于包含隐藏字段的某类型,其指针调用隐藏字段的方法是,只会考虑隐藏字段的类型(值/方法),是类似语法糖的东东,它不会因为你是用指针调用的,就选择指针的方法。 package main type A int func (a A) add() { a+=1 } func (a *A) inc() { *a+=1 } type B struct{ A b ...阅读全文
golang文件传输服务
续上篇,本篇介绍一个完整的golang文件传输服务器。 完整的代码可以看服务器,客户端 网络使用的框架如上篇介绍,这里就不再复述. 首先定义3个命令码: const ( request_file = 1 file_size = 2 transfering = 3 ) request_file用于请求文件传输,附带的命令参数是文件key. file_size用于通告客户端文件的大小. transfering用于传输文件内容,附带参数是文件内容的二进制数据. 服务器的文件...阅读全文
golang中赋值string到array
常州程序员交流QQ群:123957473 要把一个string赋值给一个array,哥哥遇到一个纠结的困难,研究一番,发现主要原因是array和slice在golang里不是一个东西,本文提供两种解决方案。 在网络编程中network packet transfer,经常要定义固定的字节长度,如下面的f1: package main import "fmt" type T1 struct { f1 [5]byte // I use fixed size here for file...阅读全文
go语言 看代码,学strings包
package main import ( "fmt" "strings" //"unicode/utf8" ) func main() { fmt.Println("查找子串是否在指定的字符串中") fmt.Println(" Contains 函数的用法") fmt.Println(strings.Contains("seafood", "foo")) //true fmt.Println(strings.Contains("sea...阅读全文
golang些许数据类型
工作之余,每天拿出点时间学习一门新技术,不求精通,但求了解其思想。通过下面途径学习的: http://weiki.tk/Go_Web_Program/preface.html 从java转到golang的我,对于golang的变量定义确实不适应。golang的定义有些像javascript,用var 来定义变量。和java区别在于类型放到了后面。 bool var isActive bool 其实这些都还是可以接受的,对我来讲,初次印象最别扭到地方是类型到名称。bool是布尔值,Go...阅读全文
C?Go?Cgo![翻译]
原文: http://golang.org/doc/articles/c_go_cgo.html 中文: http://zh-golang.appsp0t.com/doc/articles/c_go_cgo.html Cgo允许在Go包中调用C代码。如果Go代码含有特殊的cgo语法,可以通过cgo生成相应的Go和C文件,它们可以被编译到一个Go包中。 以一个例子开始,下面的Go包提供了 Random 和 Seed 两个函数,它们是基于C语言的 random 和 srandom 函数的...阅读全文
Go语言 goroutine背后的系统知识
Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总有些与事实不符的技术描述。希望这篇文章能为比较缺少系统编程背景的Web开发人员介绍一下goroutine背后的系统知识。 1. 操作系统与运行库 2. 并发与并行 (Concurrency and Parallelism) 3. 线程的调度 4. 并发编程框架 5. goroutine 1. 操作系统与运...阅读全文