什么是Go语言
包括以下八个特性,针对c++和python对比分析的:
- 高性能、高并发
- 语法简单、学习曲线平缓:学习到开发快
- 丰富的标准库:像python一样有丰富可靠的标准库可以使用
- 完善的工具链
- 静态链接:所有编译结果都是静态的,部署快捷
- 快速编译:编译时间是几乎所有语言中最快的
- 跨平台:可以在windows、linux等多种不同设备上使用,不需配置交叉编译环境等
- 垃圾回收:不需要考虑内存的分配和释放
c++不适合web业务。
哪些公司在使用Go语言
字节、谷歌、美团、腾讯、百度、滴滴等
了解哪些公司在使用也方便以后招聘的时候有的放矢。
Go语言的基础语法
环境配置比较麻烦,省略。本人开发环境使用的VScode。以下仅记录部分对我来说比较难的语法,一些我比较熟悉的就没记了,方便以后复习。
基础结构
Go 语言的基础组成有以下几个部分:
- 包声明
- 引入包
- 函数
- 变量
- 语句 & 表达式
- 注释
Go语言的基本结构如下:
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 的修改会影响到所有引用它的变量。
错误处理
Go 语言通过内置的错误接口提供了错误处理机制。
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)
}
也可以设置其他数值来设置时间戳的,但是如果随机种子一直不变,生成出来的随机数也会是一样的。
实战下一次记录~~~