5.17笔记

67 阅读2分钟

Golang中的map

在别的语言中,map一般被叫做哈希或者字典,在实际开发中使用最频繁的数据结构。

m := make(map[string]int)
m["one"] = 1
m["two"] = 2
fmt.Println(m) //map[one :1, two :2]
​
fmr.Println(len(m)) //2
fmt.Println("one") //1
​
r, ok := m["unknow"] //利用 ok 语句可以查询 map 中是否具有某个元素。
fmt.Println(r, ok) //0 falsedelete(m, "one") //删除map中指定的元素//另一种定义的方法
m2 := map[string]int{"one": 1, "two": 2}
fmt.Println(m2) //注意,打印map的输出时是完全随机的!

Golang中的range

我们可以利用range来循环遍历Golang中的map和数组。

nums := []int{2, 3, 4}
​
sum := 0
for i, num := range nums {
    sum += num
    if num == 2 {
        fmt.Println("index:", i,"num", num) //index: 0,num:2
    }
}
fmt.Println(sum) // 9
​
m := map[string]string{"a": "A", "b": "B"}
for k, v := range m {
    fmt.Println(k, v) // b B a A
}
​
for k := range m {
    fmt.Println("key", k) //key a; key b
}

Golang中的函数

Golang中的函数传入值的类型确认是后置的,同时也支持返回多个值,一个是真正的返回结果,另一个是错误信息。

func add(a int, b int) int { //后面的int是确认返回值类型
    return a + b
}
​
func add2(a, b int) int { //也可以这样定义 
    return a + b
}
​
func exists (m map[string]string, k string) (v string, ok bool){
    v, ok = m[k]
    return v, ok // xx true/false
}//这里就返回了一个变量和一个bool值

Golang中的指针

Golang中的指针用法没有C++那么多,最常用于修改传入函数中参数的值。

func add2(n int) {
    n += 2
}
​
func add2ptr(n *int) {
    *n += 2
}
//在调用时 指针传参要用&当前缀
n := 5
add2(n)
fmt.Println(n) //5
addptr(&n) 
fmt.Println(n) //7

Go 具有足够少的关键字,内置并发机制,没有特定的线程库(Java 的 Thread,PHP 的 thread 扩展),开启一个线程只需要一个关键字 go,即可享受多线程带来的高性能,内置了 CAS 特性的 atomic 库,以及常规的锁机制 sync 包,Go 主张 通过通信来共享内存,而不是通过共享内存来通信,通过 chan 这种数据结构来进行线程之间通信,共享内存资源。Go 开发并不需要特别关心内存的使用,因为其自身自带了垃圾回收器,帮助我们很好的管理了内存的使用。