Go 语言基础 | 青训营笔记

55 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

1. Go 语言基础

Go语言是一个高性能、高并发,语法简单、学习曲线平缓的语言。其有着丰富的标准库,完善的工具链,遵循静态链接,快速编译,可跨平台以及具备垃圾回收等功能。

  • 编写运行程序

    1. go run XXX.go
    2. go build XXX.go ; ./XXX
    
  • 变量

    var a = "XXX" // 自动推导变量类型
    var a int = 1
    g := a + "XXXX"
    const s string = "constant" // 常量根据上下文给出类型
    
  • 数组

    var a [5]int 
    var twoD [2][3]int
    b := [5]int{1, 2, 3, 4, 5}
    
  • 切片:

    和python类似可利用冒号":"进行切片

    s:= make([]string, 3) // 创建

    s = append(s, "e", "f") //利用append进行添加

  • map: 遍历是完全无序的

    m := make(map[string]int) // make(map[KEY]VALUE)
    m2 := map[string]int{"one": 1, "two": 2}
    delete(m, "one")
    
    // 遍历
    for k, v := range m {
       fmt.Println(k, v) // b 8; a A
    }
    
  • 结构体

    type user struct {
       name     string
       password string
    }
    func (u user) checkPassword(password string) bool {
       return u.password == password
    }
    a.checkPassword("2048")
    
  • 循环

    for n:=0; n <5;n++ {
       (break/continue)
    }
    
  • if: 条件内没有括号,且加上大括号,执行不要写在同一行。

  • switch / case, switch后可跟任何结构或者不跟

  • 函数func: 原生支持返回多个值

  • 指针: 只针对对变量进行修改

     func add2ptr(n *int) {
        *n += 2
     }
     add2ptr(&n)
    
  • 错误处理:error / nil / errors.New( "XXX")

  • 依赖管理

    go mode init [moudule name]
    
    go mode build ./... //当前目录下的所有子文件中的go文件
    
    go get
    
    go mode tidy
    

2. 课后题

    1. 修改猜谜游戏的最终代码,用fmt.scanf来简化
    用法和C类似
    fmt.Scanf("%s", &name)     
    fmt.Scanf("%d", &alphabet_count)  
    fmt.Scanf("%g", &float_value)     
    fmt.Scanf("%t", &bool_value)
    
    1. 修改第二个例子命令行字典中的最终代码,增加另外一种翻译引擎。
    依葫芦画瓢就好了。
    1. 增加效率
    使用 goroutine 和 channel 来实现同时请求两个网站,并在一个请求完成时结束另一个函数。 主要函数可总结为,抛出两个goroutine来查询网站,在两个函数内用channel查询是否完成请求。随后用select开判定哪个用结构。