这是我参与「第五届青训营」伴学笔记创作活动的第1天
使用Go语言的公司
在视频中,老师列举了一些使用了Go语言的公司,其中包括有字节跳动、腾讯、美团、滴滴、百度、谷歌、脸书、七牛云、哔哩哔哩、PingCAP等公司
字节使用Go语言的原因
1、开始使用的Python性能比Go语言弱
2、C++不适合在线Web服务
3、早期团队没有Java背景
4、性能比较好
5、部署简单、学习成本低
6、内部RPC和HTTP框架的推广
开发环境
这里选用了Goland作为代码编辑器,在官网下载安装Go的安装包安装编译环境。
Hello World
课程以输出Hello World的示例程序来学习Go的基础语法
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
第一行指定包名,下面通过import引入要使用的api所在的包
主程序中通过fmt.Println输出Hello World到控制台中
基础语法
下面通过一些例子说明一下go的语法
变量
var a = "string"
var b, c int = 1, 2
var d = true
var e float64
var f = float32(3)
g := a + " append"
const str string = "as"
const h = 1200
const t = 3e20 / h
go可以自动推到数据的类型,const没有确定的类型,可以通过上下文自动推到数据类型
if else
if a == 0 {
fmt.Print(a)
} else {
fmt.Println(a)
}
在这个语句中的判断条件是不需要添加括号的,如果添加了,go会自动帮你删除。判断条件语句必须独立一行
循环
for i := 0; i < 10; i++ {
fmt.Print(i)
}
同样的在go中,for循环语句也不需要添加括号,可以通过break跳出循环,continue提前继续循环。
分支语句
var a int
switch a {
case 1:
fmt.Print(1)
case 2:
fmt.Println(2)
default:
fmt.Print("default")
}
go的分支语句与c++不一样的地方在于,每一个分支不需要添加break,会自动执行完跳出
数组
//定义并初始化数组的几种方式
var arr [3]int //默认数组元素为0
var arr[0] = 10
var arr0 [3]int = [3]int{1, 2, 3}
var arr1 = [3]int{5, 6, 7} //利用类型推倒
var arr2 = [...]int{8, 9, 10}
var arr3 = [...]int{1: 100, 0: 500, 2: 999}
切片
切片的特点
1.切片是一个引用类型,切片的长度是可以变化的,而数组的长度是固定的
2.切片是数组的一个引用,因此是引用类型,遵守引用传递机制
3.切片的使用和数组类似,比如遍历切片,访问切片的元素等
4.通过make创建切片对应数组由make底层维护,对外不可见
var arr = [5]int{1, 23, 34, 66, 43}
//定义一个切片,让切片引用一个已创建好的数组
//表示 slice 引用到 arr 这个数组
//引用范围数组下标[1,3)
slice := arr[1:4] //[:]代表全部,[start:]代表开始到结束
fmt.Println(slice)
fmt.Println("容量 =", cap(slice)) //一般为切片元素个数的2倍,可动态变化
//第二种方式使用make
var slice1 = make([]float64, 5, 10) //必须为[],参数为数据类型,大小,容量
fmt.Println(slice1)
//第三种方式,原理类似make
var slice2 = []int{1, 2, 3}
fmt.Println(slice2)
//遍历切片
for i := 0; i < len(slice); i++ {
fmt.Println(slice[i])
}
for i, v := range slice {
fmt.Printf("i = %v,v = %v\n", i, v)
}
//切片的动态追加,底层原理是新建数组,然后切片指向新的数组
slice = append(slice, 88, 99)
fmt.Println(slice)
后面还介绍了结构体、方法的基本定义以及如何使用。
个人感想
虽然之前已经学习过golang的基本语法,但是通过本次课程,回忆起了go的基本语法的相关知识,并且加深了记忆。