1.第1章 初識(shí)Go語(yǔ)言
- 介紹了好多工具,我這里使用sublime text3 + window的go1.4進(jìn)行學(xué)習(xí)。
需要安裝gosublime插件,都很簡(jiǎn)單,不再贅述.
2. 第二章 順序編程
- 多重賦值可以交換變量的值 的
i,j = j,i - Go語(yǔ)言的預(yù)定義常量: ture , false 和iota 。
const (
c0 = iota //0
c1 //1
c2 //2
)
3.go里的數(shù)組只能傳值,不能傳值。 數(shù)組切片(slice)能實(shí)現(xiàn)動(dòng)態(tài)數(shù)組和傳址,它特別像一個(gè)指向數(shù)組的指針, 當(dāng)然他有自己的數(shù)據(jù)結(jié)構(gòu)。
基于數(shù)組創(chuàng)建slice:
var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
//基于 myArray 的所有元素創(chuàng)建數(shù)組切片:
mySlice = myArray[:]
//基于 myArray 的前5個(gè)元素創(chuàng)建數(shù)組切片:
mySlice = myArray[:5]
//基于從第5個(gè)元素開(kāi)始的所有元素創(chuàng)建數(shù)組切片:
mySlice = myArray[5:]直接創(chuàng)建(使用make)
//創(chuàng)建一個(gè)初始元素個(gè)數(shù)為5的數(shù)組切片,元素初始值為0,并預(yù)留10個(gè)元素的存儲(chǔ)空間:
mySlice2 := make([]int, 5, 10)slice數(shù)組的遍歷和正常的數(shù)組遍歷一樣
for i, v := range mySlice{
fmt.Printfln("mySlice[", i, "] = ", v)
}-
增加數(shù)組的元素
fmt.Println("len(mySlice):", len(mySlice)) //計(jì)算mySlice數(shù)組切片中當(dāng)前所存儲(chǔ)的元素個(gè)數(shù)
fmt.Println("cap(mySlice):", cap(mySlice)) //計(jì)算mySlice數(shù)組切片分配的空間大小
mySlice = append(mySlice, 1, 2, 3) //追加三個(gè)元素
mySlice = append(mySlice, mySlice2...) //打散追加mySlice2的元素,注意...不可以去掉copy(slice2, slice1) // 只會(huì)復(fù)制slice1的前3個(gè)元素到slice2中
copy(slice1, slice2) // 只會(huì)復(fù)制slice2的3個(gè)元素到slice1的前3個(gè)位置
map語(yǔ)句
package main
import "fmt"
// PersonInfo是一個(gè)包含個(gè)人詳細(xì)信息的類型
type PersonInfo struct {
ID string
Name string
Address string
}
func main() {
var personDB map[string] PersonInfo
personDB = make(map[string] PersonInfo)
// 往這個(gè)map里插入幾條數(shù)據(jù)
personDB["12345"] = PersonInfo{"12345", "Tom", "Room 203,..."}
personDB["1"] = PersonInfo{"1", "Jack", "Room 101,..."}
// 從這個(gè)map查找鍵為"1234"的信息
person, ok := personDB["1234"]
// ok是一個(gè)返回的bool型,返回true表示找到了對(duì)應(yīng)的數(shù)據(jù)
if ok {
fmt.Println("Found person", person.Name, "with ID 1234.")
} else {
fmt.Println("Did not find person with ID 1234.")
}
}變參函數(shù)的語(yǔ)法糖
func Printf(format string, args ...interface{}) {
// ...
}
形如 ...type 格式的類型只能作為函數(shù)的參數(shù)類型存在,并且必須是最后一個(gè)參數(shù)。它是一個(gè)語(yǔ)法糖(syntactic sugar) ,即這種語(yǔ)法對(duì)語(yǔ)言的功能并沒(méi)有影響,但是更方便程序員使用。
如果沒(méi)有語(yǔ)法糖,將這么寫(xiě):
func myfunc2(args []int) {
for _, arg := range args {
fmt.Println(arg)
}
則調(diào)用方比如構(gòu)造一個(gè)數(shù)組切片來(lái)處理:myfunc2([]int{1, 3, 7, 13})-
觸發(fā)錯(cuò)誤處理panic和recover的處理
defer func(){
if r: = recover(); r != nil{
log.Printf("Runtime error caught: %v", r)
}
}()foo()無(wú)論foo()是否觸發(fā)了錯(cuò)誤處理流程,該匿名defer函數(shù)