GO基础语法 | 青训营笔记

84 阅读2分钟
  1. 导包使用import ("fmt" "math")
  2. 变量声明:一种是通过 var name string = ""可以不必要写变量类型;另一种是使用变量 冒号:= 等于值。常量的话就是把 var 改成const,值在一提的是o语言里面的常量,它没有确定的类型,会根据使用的上下文来自动确定类型。
  3. if-else:if后面没有括号且必须要有大括号 if i==5 {}
  4. 循环: 只有for循环同时也可以没有括号但必须有大括号
  5. switch:go中的switch不需要break;switch后面的变量名,并不是要括号。
a := 2
switch a {
case 1:
    fmt.PrintIn("one")
case 2:
    fmt .Println("two")
case 3:
    fmt .Printin("three")
case 45:
    fmt.Println("four or five")
default:
    fmt.Println("other")
}

t := time.Now()
switch {
case t.Hour() < 12:
    fmt.Println("It's before noon")
default :
    fmt .PrintIn("It's after noon")
}
  1. 数组:var a [5]int b := [5]int{1,2,3,4,5}
  2. 切片: make 一个切片s := make([]string, 3) 可以用append追加元素 s = append(s, "a")
  3. map:
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
fmt.PrintIn(m)
fmt.PrintIn(len(m))
fmt.PrintIn(m["one"])
fmt.PrintIn(m["unknow"]) 

r, ok := m["unknow"]
fmt.Println(r, ok)
delete(m,"one")

m2 := map[string]int{"one": 1,“two": 2}
var m3 = map[string]int{"one": 1,"two": 2}
fmt .Println(m2, m3)
  1. range: 于一个slice或一个map的话,用range来遍历,代码能够更加简洁;对于数组会返回两值,第一是索引,二个是对应位置的值
nums := []int{234]
sum := 0
for i, num := range nums {
    sum += num
    if num == 2 {
        fmt.PrintIn("index:", i, "num:", num)
    }
}

m := map[string]string{"a":"A""b":"B"}
for k, v := range m {
    fmt.Println(k, v)
}
for k := range m {
    fmt.Printiln("key", k)
}
  1. 函数:变量类型后置 且返回两个值,第一个为真正结果,第二个返回错误信息
  2. 指针:支持指针但操作有限
  3. 结构体:
type user struct{
    name      string
    password  string
}
  1. 结构体方法:
image.png
  1. 错误处理: 在 go 语言习惯使用一个单独的返回值来传递错误信息。能够很清晰地知道哪个函数返回了错误,并且能用简单的 if else 来处理错误.在函数里面,我们可以在那个函数的返回值类型里面,后面加一个 error,就代表这个函数可能会返回错误那么在函数实现的时候,retum 需要同时 retur 两个值,要么就是如果出现错误的话,那么可以 retun nil和一个 error,如果没有的话,那么返回原本的结果和nil.
image.png
  1. JSON: GO中JS0N很简单,对于一个已经有的结构体,只要保证每个字段的第一个字母是大写,也就是公开字段,该结构体就能用 JSON.marshaler去序列化,JSON.unmarshaler进行反序列化。这样默认序列化出来的字符串的话,它的风格是大写字母开头,而不是下划线,我们可以在后面用 json tag 等语法来去修改输出JSON 结果里面的字段名。
  2. 进程信息: 在 go里面,我们能够用 os.argy 来得到程序执行的时候的指定的命令行参数。 比如我们编译的一个二进制文件,command。后面接 abcd 来启动,输出就是 os.argy会是一个长度为 5 的 slice,第一个成员代表二进制自身的名字.我们可以用 so.getenv来读取环境变量。
image.png