初探Golang | 青训营笔记

61 阅读3分钟

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


本堂课重点内容

  • Go语言学习背景

  • Go语言基础,包括

    • 开发环境搭建
    • 基础语法介绍
    • 标准库介绍
  • Go语言实战,包括三个小项目

    • 猜谜游戏
    • 命令行词典
    • SOCK5代理

学习背景

Golang相较于其他语言有其优势:

  • 部署简单:

    • Golang可以直接编译成机器码运行,跨平台兼容性强
    • 同时不依赖其他库运行
  • 静态类型:

    Golang属于静态类型语言,在编译的时候即可检查出隐藏的大多数问题

  • 标准库强大:

    • 高效的垃圾回收机制
    • 具有丰富的标准库
  • 并发支持:

    Golang在语言层面支持并发,可以充分发挥多核机器的性能

  • go build ./test.go编译

    go run ./test.go直接运行

语言基础

  • 在学习每一门语言的时候都会介绍的Hello World程序:

    package main
    ​
    import "fmt"func main() {
        fmt.Println("Hello World")
    }
    
  • 以上面的程序为例,说几个细节

    • golang中的表达式,结尾可以加;,但一般都不加

    • 函数体的左花括号{要和函数名在同一行,否则会报错

    • 上面程序的第一行是为我们程序定义的包名

      package main

    • import "fmt"导入了fmt

      补充其余的导包方式

      • import "./main"

        导入同一目录下的main包

      • import t "time"

        导入time包,并使用别名t

      • import . "time"

        导入time包中的所有内容,这样就可以直接使用time包的内容,不用再加time.

      • import _ "time"

        ⽆法使⽤该包的函数,但是会执行该包的init函数

  • 变量的声明

    以int类型的声明为例

    • var a int

      注意变量名在变量类型前面,这种方式下默认值为0

    • var b int = 1

      声明后初始化为1

    • var c = 2

      省略数据类型,根据值来推导数据类型为int

      (golang中int占据空间:32位机器占4个Byte,64位机器占8个Byte,我们一般用int32和int64)

    • d := "test"

      省去类型关键字和var关键字

      这种方法不适用于全局变量的声明,前三种全局变量和局部变量均可使用

    var换为const即可声明常量

  • 逻辑语句

    • if-else

      要注意的就是条件判断语句不需要加括号

      同时if-else后强制使用花括号

    • 循环

      golang中没有while循环和do-while循环,只有for循环

      for循环后可以带C style的三个表达式中的任意几段

      同样也支持breakcontinue

    • switch

      golang中switch一个分支的结束不需要加break

      golang中switch判断的变量可以是任意类型

  • 数组(用的比较少)

    声明方式

    var myArray [3]int

    myArray := [3]int{1,2,3}

  • 切片slice

    也被称为动态数组,声明方式:

    myArray := []int{1,2,3,4}

    myArray := make([]int, 4),长度为4个int的切片

    使用append()来添加新的元素,append()返回得到的新切片,要将返回值赋给原切片

    myArray = append(myArray, 66)

  • map

    声明:

    • var myMap map[string]int

      声明了一个key的类型是string,value的类型是int的map

    • 在声明的同时赋值

          myMap := map[string]int{
              "one":   1,
              "two":   2,
              "three": 3,
          }
      
    • myMap := make(map[string]int,5)

      声明的同时直接开辟空间

    在使用map前,若未分配空间,则要使用make给map分配空间

    myMap = make(map[string]int,5)

    赋值:

    myMap["a"]=1

    myMap["b"]=2

  • Golang中的面向对象特性见后续笔记

参考