Go起步Tips

备注

本文面向小白(我)的随手记,比较杂乱

Go是静态类型语言,也就是编译时即确定变量类型,变量类型不可错误使用,否则编译时报错。

变量类型

reflect 包提供了 TypeOf 函数可以返回参数类型:

使用 reflect.TypeOf 获取类型
package main

import (
    "fmt"
    "reflect"
)

func main() {
    fmt.Println(reflect.TypeOf(42))
    fmt.Println(reflect.TypeOf(3.1415))
    fmt.Println(reflect.TypeOf(true))
    fmt.Println(reflect.TypeOf("Hello, Go!"))
}

=:= 区别

  • = 表示赋值

  • := 表示声明变量并赋值,并且系统自动推断类型,不需要var关键字

使用 := 声明变量并赋值
// = 使用必须使用先var声明例如:
var a
a=100
//或
var b = 100
//或
var c int = 100

// := 是声明并赋值,并且系统自动推断类型,不需要var关键字
d := 100

for 循环 range (键值)

for ... range 是Go语言特有的迭代结构,可以遍历数组、切片、字符串、map以及通道(channel)。非常类似于其他语言的 foreache 语句:

for key, val := range coll {
    ...
}

注意:

  • val 始终为集合中对应索引的值拷贝,因此它一般只具有只读性质,对它所做的任何修改都不会影响到集合中原有的值

  • 通过 for range 遍历的返回值具有一定的规律:

    • 数组、切片、字符串返回索引和值

    • map返回键和值

    • 通道(channel) 只返回通道内的值

举例:

for...range 获得map的键和值
package main

import "fmt"

func main() {

    m := make(map[string]int)
    m["hello"] = 100
    m["world"] = 200

    for key, value := range m {
        fmt.Println(key, value)
    }
}

参考