课程笔记-走进GO语言基础语法-1 | 青训营笔记

104 阅读2分钟

这是我参与「青训营 x 字节后端训练营」笔记创作活动的第1天。这是我在《走进GO语言基础》课程的第1篇笔记。

大佬请退出阅读

1. Go语言的特点

  • 高性能、高并发
  • 语法简单(类似C,但进行了一定的简化)、学习曲线平缓、易上手!
  • 丰富的标准库(还可享受更新迭代)
  • 完善的工具链(单元测试、性能测试等等等等)
  • 静态链接(部署方便,程序文件简单)
  • 快速编译(修改后可以快速得到编译结果)
  • 跨很多常见和不常见的平台(编写、编译、程序运行)
  • 带垃圾回收
  • 越来越多的公司开始使用Go并投入资源进行维护建设

2. Go入门

2.1 Go入门

  • 集成开发环境可以使用VS Code(需安装插件)、GoLand(收费,在校可免费试用)等

  • 必不可少的hello world:

package main

import (
    "fmt"
)

func main( ) {
    fmt.Println("hello world")
}
  • 变量:类似C/C++,注意声明方式、字符串运用等;常量会根据使用上下文自动确定类型
package main
import (
    "fmt"
    "math"
)
func main() {
    var a = "bianliang" //自动推导变量类型
    var b, c int = 1, 2
    var e float64
    f := float32(e)
    g := a + "foo"
    fmt.Println(a, math.Sin(b), c)
    const h = 50000000
    const i = 3e20 / h
}
  • if else:与C很类似,但if后面的条件没有括号,且其后必须直接接大括号
  • 循环:没有while/do while,只有for循环,格式同if;可以用continue、break
  • switch:不用加break!同时case后可以使用任意的变量类型(e.g.字符串、结构体)——如果switch后不加变量名,可以在case处直接写条件式子,取代if else
  • 数组:长度固定 var a [5]int
  • 切片:s := make([]srting, 4);可以用s = append(s, "d")来追加元素、拓展长度;还有len(s),copy(new, origin) //new 需先定义, s[2:5],s[:2]等(不同于python,不支持负数索引)
  • map(“字典”,遍历时无序):
package main
import (
    "fmt"
)
func main() {
    s := make(map[string]int)
    //string: type of the key; int: value
    m["one"] = 1
    fmt.Println(m)
    fmt.Println(m["one"])
    fmt.Println(m["undefined"]) //0
    fmt.Println(len(m))
    delete(m, "one")
    
    r, ok := m["undefined"]
    fmt.Println(r, ok) //0 false,获取有没有这个key存在
    //另外的定义方式:
    m2 := map[string]int{"one": 1, "two": 2}
    var m3 = map[string]int{"one": 1, "two": 2}
    fmt.Println(m2,m3)
}