golang基础

5 篇文章 0 订阅
5 篇文章 0 订阅

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.a
3)将生成的gc.a拷贝替换到目录D:\go\pkg\windows_386\cmd\compile\internal\
4)进入目录D:\go\src\cmd\compile,编译出编译器compile.exe,执行:
go build
5)将生成的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等。var rbuf [128]byte,为数组类型。
pbuf := new(bytes.Buffer) //指针,io.Reader类型.可与byte数组类型进行转换。或者初始化 pbuf := bytes.NewBuffer([]byte{})
//pbuf[0] = 100  //error
pbuf.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)  //通过pbuf.Write()、pbuf.Read(),可与切片(或数组)进行转换
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

3)数组与切片

数组Arr:固定长度,且为值类型;作为函数形参不可改变内容。大小len(Arr)

切片Slice:可变长度,为引用类型;作为函数形参可改变内容。大小len(Slice)

s := arr[:] 初始化切片s时,是数组arr的引用,运算时同时改变其数组的内容。

数组也可灵活转换为切片类型,如作为函数形参,改变数组元素。如:SetParams(arr[:])等同于SetParams(s)

数组间赋值、数组与切片的元素赋值,特别是片段赋值,只能通过for遍历元素来赋值。(即:arr[0:6]、ps[1:8]等不能作为左值进行赋值)

golang笔记——数组与切片:http://www.cnblogs.com/tianyajuanke/p/5239813.html

老虞学GoLang笔记-数组和切片:http://www.cnblogs.com/howDo/archive/2013/04/25/GoLang-Array-Slice.html


2.2 正则表达式

Golang学习 - regexp 包 :http://www.cnblogs.com/golove/p/3270918.html

基础知识 - Golang 中的正则表达式: http://www.cnblogs.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])
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值