Go语言编程笔记
1.第1章 初识Go语言
- 介绍了好多工具,我这里使用sublime text3 + window的go1.4进行学习。
需要安装gosublime插件,都很简单,不再赘述.
2. 第二章 顺序编程
- 多重赋值可以交换变量的值 的
i,j = j,i
- Go语言的预定义常量: ture , false 和iota 。
const (
c0 = iota //0
c1 //1
c2 //2
)
3.go里的数组只能传值,不能传值。 数组切片(slice)能实现动态数组和传址,它特别像一个指向数组的指针, 当然他有自己的数据结构。
-
基于数组创建slice:
var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
//基于 myArray 的所有元素创建数组切片:
mySlice = myArray[:]
//基于 myArray 的前5个元素创建数组切片:
mySlice = myArray[:5]
//基于从第5个元素开始的所有元素创建数组切片:
mySlice = myArray[5:] -
直接创建(使用make)
//创建一个初始元素个数为5的数组切片,元素初始值为0,并预留10个元素的存储空间:
mySlice2 := make([]int, 5, 10) -
slice数组的遍历和正常的数组遍历一样
for i, v := range mySlice{
fmt.Printfln("mySlice[", i, "] = ", v)
} -
增加数组的元素
fmt.Println("len(mySlice):", len(mySlice)) //计算mySlice数组切片中当前所存储的元素个数
fmt.Println("cap(mySlice):", cap(mySlice)) //计算mySlice数组切片分配的空间大小
mySlice = append(mySlice, 1, 2, 3) //追加三个元素
mySlice = append(mySlice, mySlice2...) //打散追加mySlice2的元素,注意...不可以去掉copy(slice2, slice1) // 只会复制slice1的前3个元素到slice2中
copy(slice1, slice2) // 只会复制slice2的3个元素到slice1的前3个位置
-
map语句
package main
import "fmt"
// PersonInfo是一个包含个人详细信息的类型
type PersonInfo struct {
ID string
Name string
Address string
}
func main() {
var personDB map[string] PersonInfo
personDB = make(map[string] PersonInfo)
// 往这个map里插入几条数据
personDB["12345"] = PersonInfo{"12345", "Tom", "Room 203,..."}
personDB["1"] = PersonInfo{"1", "Jack", "Room 101,..."}
// 从这个map查找键为"1234"的信息
person, ok := personDB["1234"]
// ok是一个返回的bool型,返回true表示找到了对应的数据
if ok {
fmt.Println("Found person", person.Name, "with ID 1234.")
} else {
fmt.Println("Did not find person with ID 1234.")
}
} -
变参函数的语法糖
func Printf(format string, args ...interface{}) {
// ...
}
形如 ...type 格式的类型只能作为函数的参数类型存在,并且必须是最后一个参数。它是一个语法糖(syntactic sugar) ,即这种语法对语言的功能并没有影响,但是更方便程序员使用。
如果没有语法糖,将这么写:
func myfunc2(args []int) {
for _, arg := range args {
fmt.Println(arg)
}
则调用方比如构造一个数组切片来处理:myfunc2([]int{1, 3, 7, 13})
-
触发错误处理panic和recover的处理
defer func(){
if r: = recover(); r != nil{
log.Printf("Runtime error caught: %v", r)
}
}()foo()
无论foo()是否触发了错误处理流程,该匿名defer函数