zshuangyan / blog

我的个人博客
2 stars 0 forks source link

Go语言学习基础篇 #15

Open zshuangyan opened 6 years ago

zshuangyan commented 6 years ago

简单数据结构

整数 int[8,16,32,64] 无符号整数 uint[8,16,32,64] 浮点数 float[32, 64] 布尔数 bool 字符串 string 常量 const 字节 byte (alias for uint8)

字符串

字符串是由byte组成的不可变的序列。 len(s)返回s中包含的字节数,这个字节数并不一定等于字符串中的字符个数(考虑unicode) s[i]返回第i个byte的值,s[i:j]返回从i个byte开始,直到第j个(不包含第j个)byte的新字符串 多个字符串可以通过+连接起来,返回新的字符串

使用双引号包围的字符串,可以使用转译符号来包含特殊字符 使用`...` (backquotes)包围的字符串,不执行转义的操作,可以支持多行字符串

组合数据结构

Array 数组

存储同一种类型的一个或者多个元素,且长度不可变 var a [3]int //声明 a[0] //通过索引访问元素

// 打印索引和元素
for i, v := range a {
    fmt.Printf("%d %d\n", i, v)
}
// 只打印元素
for _, v := range a {
    fmt.Printf("%d\n", v)
}

Slice 切片

存储同一种类型的一个或者多个元素,且长度可变 var a []int //声明

// reverse reverses a slice of ints in place.
func reverse(s []int) {
    for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
        s[i], s[j] = s[j], s[i]
    }
} 

append函数

var runes []rune
for _, r := range "Hello, BF" {
    runes = append(runes, r)
}
fmt.Printf("%q\n", runes) // "['H' 'e' 'l' 'l' 'o' ',''''B' 'F']"

Map 字典

字典所有的键为同一类型,所有的值也为同一类型,但是键和值不必为同一类型。

字典需要初始化了才能使用,下面这种做法在运行的时候会报错 image

assignment to entry in nil map
/usr/local/go/src/runtime/panic.go:505 (0x42ac68)
        gopanic: reflectcall(nil, unsafe.Pointer(d.fn), deferArgs(d), uint32(d.siz), uint32(d.siz))
/usr/local/go/src/runtime/hashmap_fast.go:696 (0x40d2f6)
        mapassign_faststr: panic(plainError("assignment to entry in nil map"))
/home/zsy/go/src/github.com/open-falcon/falcon-plus/modules/api/app/controller/graph/god_graph.go:40 (0x8e71da)
        QueryGodGraph: filters["hostname"] = append(filters["hostname"], filter)
ages := make(map[string]int) // mapping from strings to ints

通过键值对在创建字典的时候给它赋值
ages := map[string]int{
    "alice": 31,
    "charlie": 34,
}

遍历字典

for name, age := range ages {
    fmt.Printf("%s\t%d\n", name, age)
}

Struct 结构体
JSON