GO语言的介绍
包括以下八个特性,针对c++和python对比分析:
- 高性能、高并发
- 语法简单、学习曲线平缓:学习到开发快
- 丰富的标准库:像python一样有丰富可靠的标准库可以使用
- 完善的工具链
- 静态链接:所有编译结果都是静态的,部署快捷
- 快速编译:编译时间是几乎所有语言中最快的
- 跨平台:可以在windows、linux等多种不同设备上使用,不需配置交叉编译环境等
- 垃圾回收:不需要考虑内存的分配和释放
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 类型是一个接口类型,使用样例如下:
随机数生成问题
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)
}
也可以设置其他数值来设置时间戳,但是如果随机种子一直不变,生成出来的随机数也会是一样的。