1.开发环境搭建与IDE(LiteIDE)
Windows下搭建go语言开发环境 以及 开发IDE (附下载链接):http://studygolang.com/articles/17
golang和LiteIDE都可以使用解压绿色版本。
golang安装后,设置环境变量:path(bin目录)、GOROOT(go安装目录)、GOPATH(本地工程目录)。
win:GOARCH=386 GOOS=windows
android可执行程序:GOARCH=arm GOOS=linux
LiteIDE中均可修改这些环境变量。
1.2 消除go编译器的错误:“imported and not used”、”declared and not used“。
方案:修改源码,重新编译compile编译器。步骤:1)修改目录D:/go/src/cmd/compile/internal/gc下两文件的两处代码:main.go 892行:if name == "" || elem == name {//yyerrorl(lineno, "imported and not used: %q", path)adderr(lineno, "#W imported and not used: %q", path)} else {//yyerrorl(lineno, "imported and not used: %q as %s", path, name)adderr(lineno, "#W imported and not used: %q as %s", path,下 name)}walk.go 53行://yyerror("%v declared and not used", ln.Sym)Warn("#W %v declared and not used", ln.Sym)defn.Left.Used = true // supPRess repeats} else {lineno = ln.Lineno//yyerror("%v declared and not used", ln.Sym)Warn("#W %v declared and not used", ln.Sym)}2)进入目录D:/go/src/cmd/compile/internal/gc,编译静态库gc.a,执行:go build -buildmode=archive -o gc.a3)将生成的gc.a拷贝替换到目录D:/go/pkg/windows_386/cmd/compile/internal/4)进入目录D:/go/src/cmd/compile,编译出编译器compile.exe,执行:go build5)将生成的compile.exe拷贝替换到目录D:/go/pkg/tool/windows_386。
2.golang语言
Go语言极速入门手册.go :http://blog.coderzh.com/2015/09/28/go-tips/?utm_source=tuicool&utm_medium=referral
Go 语言教程:http://www.shouce.ren/api/view/a/5581
Go语言教程:http://www.yiibai.com/go/
打印:fmt.Println()、fmt.Printf()、fmt.Sprintf()
2.1数据类型及类型转换
1)Go语言是个强类型语言。也就是说Go对类型要求严格,不同类型不能进行赋值操作。指针也是具有明确类型的对象,进行严格类型检查。
Go各种类型转换及函数的高级用法:http://blog.csdn.net/kenkao/article/details/47857839
new 的作用是初始化一个指向类型的指针(*T),make 的作用是为 slice,map 或 chan 初始化并返回引用(T)。定长和变长。
rbuf := make([]byte, 128) //引用。slice,map等pbuf := new(bytes.Buffer) //指针.或者 pbuf := bytes.NewBuffer([]byte{})//pbuf[0] = 100 //errorpbuf.Write([]byte{100, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0}) //pbuf.String()pbuf.Read(rbuf) //给rbuf赋值2)go语言,很多数据类型转换无法转换,也没有C那种便捷的指针内存操作。如果确实有类型转换需要(比如网络消息传输),怎么办呢?
可通过字节序列化操作完成:binary.Write、binary.Read、binary.Size (import "encoding/binary")。如结构体转二进制数组:
type MsgAPI struct { HeadFlag int32 //不能是int类型 CmdType int32}
buf := new(bytes.Buffer)err = binary.Write(buf,binary.LittleEndian,struA)err = binary.Read(buf,binary.LittleEndian,&struB) //buf长度必须大于struB大小
Golang中的字节序列化操作:http://www.mamicode.com/info-detail-156122.html
2.2 正则表达式
Golang学习 - regexp 包 :http://www.VEVb.com/golove/p/3270918.html
基础知识 - Golang 中的正则表达式: http://www.VEVb.com/golove/p/3269099.html
pat := `(((abc.)def.)ghi)(//d+)`reg := regexp.MustCompile(pat)src := []byte(`abc-def-ghi abc+def+ghi+123456`)// 查找第一个匹配结果fmt.Printf("%s/n", reg.Find(src)) // abc-def-ghi// 查找第一个匹配结果及其分组字符串first := reg.FindSubmatch(src)for i := 0; i < len(first); i++ {fmt.Printf("%d: %s/n", i, first[i])}
新闻热点
疑难解答