Go语言基础 | 青训营笔记

118 阅读4分钟

GO语言的介绍

包括以下八个特性,针对c++和python对比分析:

  1. 高性能、高并发
  2. 语法简单、学习曲线平缓:学习到开发快
  3. 丰富的标准库:像python一样有丰富可靠的标准库可以使用
  4. 完善的工具链
  5. 静态链接:所有编译结果都是静态的,部署快捷
  6. 快速编译:编译时间是几乎所有语言中最快的
  7. 跨平台:可以在windows、linux等多种不同设备上使用,不需配置交叉编译环境等
  8. 垃圾回收:不需要考虑内存的分配和释放

c++不适合web业务。

GO语言的基础语法

环境配置按CSDN的方法来就行,1.16版本之后会自动配置环境变量,一定要记得把工作区放到D盘!不然就会发现你的代码文件存不到C盘里,就无法运行GO语言的代码。本人开发环境使用的VScode。

基础结构

Go 语言的基础组成有以下几个部分:

  • 包声明
  • 引入包
  • 函数
  • 变量
  • 语句 & 表达式
  • 注释

Go语言的基本结构如下(当然还是Hello World):

package main
import "fmt"
func main(){
    fmt.Println("Hello world")
}

for循环

Go 语言的 For 循环有 3 种形式,只有其中的一种使用分号,和 C 语言的 for 类似:

for init; condition; post { }

比如说,我们输出十次Hello world可以这样写:

package main  
import "fmt" 
func main() {  
      for i := 0; i <= 10; i++ {  
         fmt.Println("Hello world")
      } 
}

for语句执行过程如下:

  • 1、先对表达式 1 赋初值;

  • 2、判别赋值表达式 init 是否满足给定条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行 post,进入第二次循环,再判别 condition;否则判断 condition 的值为假,不满足条件,就终止for循环,执行循环体外语句。

数组

数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。

数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。

切片

Go 语言切片是对数组的抽象。

Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

Map

Map 是一种无序的键值对的集合。

Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,遍历 Map 时返回的键值对的顺序是不确定的。

在获取 Map 的值时,如果键不存在,返回该类型的零值,例如 int 类型的零值是 0,string 类型的零值是 ""。

Map 是引用类型,如果将一个 Map 传递给一个函数或赋值给另一个变量,它们都指向同一个底层数据结构,因此对 Map 的修改会影响到所有引用它的变量。

错误处理

error 类型是一个接口类型,使用样例如下:

1.webp

随机数生成问题

Go生成随机数也是需要设置随机种子的,这一点跟python比较类似。

如果不设置随机种子会导致什么问题?——每次随机生成的数字都是同一个。

如何设置随机种子?——可以使用时间戳设置随机种子,如下:

package main
import (
    "fmt
    "math/rand"
    "time"
)
func main() {
    maxNum := 100
    rand.Seed(time.Now().UnixNano())
    secretNumber := rand.Intn(maxNum)
    fmt.PrintIn("The secret number is ", secretNumber)
}

也可以设置其他数值来设置时间戳,但是如果随机种子一直不变,生成出来的随机数也会是一样的。