go语言基础初体验 | 青训营笔记

102 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。

什么是go语言

  • 高性能、高并发
  • 静态链接
  • 快速编译
  • 跨平台
  • 垃圾回收

基础语法

switch

func main() {

   a := 2
   switch a {
   case 1:
      fmt.Println("one")
   case 2:
      fmt.Println("two")
   case 3:
      fmt.Println("three")
   case 4, 5:
      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.Println("It's after noon")
   }
}

switch 后面加不加条件,在case后面加条件的话,可以替代if else 嵌套分支,使代码更清晰

切片

声明切片

s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2])   // c
fmt.Println("len:", len(s)) // 3

s = append(s, "d")
s = append(s, "e", "f")
fmt.Println(s) // [a b c d e f]

用append追加元素,需要扩容,最后赋值给原切片

map

m := make(map[string]int)
m["one"] = 1
m["two"] = 2
fmt.Println(m)           // map[one:1 two:2]
fmt.Println(len(m))      // 2
fmt.Println(m["one"])    // 1
fmt.Println(m["unknow"]) // 0

r, ok := m["unknow"]
fmt.Println(r, ok) // 0 false

delete(m, "one")

m2 := map[string]int{"one": 1, "two": 2}
var m3 = map[string]int{"one": 1, "two": 2}
fmt.Println(m2, m3)

多种方式创建

未赋值就是0,ok可以判断有无该键

delete 根据键删除元素,输出的内容顺序完全是随机的

range

快速遍历 若是切片则返回 下标和元素 若书map,则是 k-v对 range是值的拷贝

struct

结构体是带类型的字段的集合

只声明但未赋值就是空值(0,或者空字符串)

函数里面传入结构体指针的话可以修改值并且减少大结构体拷贝的开销

结构体方法

相当于类成员函数,初始化结构体后直接.一下皆可以调用

  • 不带指针:一般就是判断一些东西
  • 带指针:可以对结构体进行修改

json处理

  • 用 json.Marshal 序列化为byte数组
  • 用 json.Unmarshal 反序列化到对应空的结构体

数字解析

strconv包下

func main() {
   f, _ := strconv.ParseFloat("1.234", 64)
   fmt.Println(f) // 1.234

   n, _ := strconv.ParseInt("111", 10, 64)
   fmt.Println(n) // 111

   n, _ = strconv.ParseInt("0x1000", 0, 64)
   fmt.Println(n) // 4096

   n2, _ := strconv.Atoi("123")
   fmt.Println(n2) // 123

   n2, err := strconv.Atoi("AAA")
   fmt.Println(n2, err) // 0 strconv.Atoi: parsing "AAA": invalid syntax
}

进程信息

func main() {
   // go run example/20-env/main.go a b c d
   fmt.Println(os.Args)           // [/var/folders/8p/n34xxfnx38dg8bv_x8l62t_m0000gn/T/go-build3406981276/b001/exe/main a b c d]
   fmt.Println(os.Getenv("PATH")) // /usr/local/go/bin...
   fmt.Println(os.Setenv("AA", "BB"))

   buf, err := exec.Command("grep", "127.0.0.1", "/etc/hosts").CombinedOutput()
   if err != nil {
      panic(err)
   }
   fmt.Println(string(buf)) // 127.0.0.1       localhost
}

实战笔记

ppt的链接

基础语言ppt:bytedance.feishu.cn/file/boxcnQ…

课后作业的链接

基础语言:juejin.cn/post/709445…