这是我参与「第五届青训营」伴学笔记创作活动的第 1 天
一.本堂课重点内容
- Go语言基本介绍
- 使用Go语言的公司
- Go语言环境的安装
- Go语言快速入门(基础语法)
二.详细知识点介绍
1.Go语言基本介绍
什么是Go语言?Go语言是一门拥有高性能、高并发特点的编程语言。Go语言的语法简单,并且学习曲线较平缓,很容易上手。Go语言拥有丰富的标准库,完善的工具链,静态链接,支持快速编译,跨平台,拥有自己独特的垃圾回收机制。
2.使用Go语言的公司
Go语言的性能毋庸置疑,故惹得许多公司争先使用,像字节跳动,腾讯,美团,百度等等大公司,都使用Go语言来完成自己的一些业务,提高自己的业务水平与效率。
3.Go语言开发环境的安装
第一步,可以到Golang的官网直接点击download下载,然后根据提示就可以安装Golang。第二步,配置开发Golang的编辑器或者IDE。go的开发环境可以选择VSCode或者Golang,这是目前使用最多和最广泛的编辑器和IDE。
4.Go语言快速入门(基础语法)
- Hello World
package main
import (
"fmt"
)
func main() {
fmt.Println("hello,world!")
}
Hello World是每个程序员初始新语言时对世界的一种呐喊
第一行package main代表这个文件属于main包的一部分,main包就是程序的入口包
第三行中导入了标准库的FMT包,这个包主要用来往屏幕输入输出字符串,格式化字符串
import下面是main函数,main函数里面调用了fmt.Println输出了"hello,world"。
- 变量
go语言是一门强类型语言,每一个变量都有属于自己的类型,常见的类型包括字符串,整树,浮点型,布尔型等。
变量声明有两种方式,第一种如下:
var a = "int"
var d = true
var name string = " "
同时一行也可声明多个变量
var a, c int = 1 , 2
第二种方法(常用)如下:
f := "Byte"
字符串类型也可直接通过加号进行拼接,例如:
var a = "hello"
s := a + "world"
也可将var替换成const来声明常量,在go语言中常量没有确定的类型,通过代码上下文来确定类型
const s string = "constant"
const a = 50000
- if else
package main
import "fmt"
func main(){
if 7 % 2 ==0 {
fmt.Println("7 is even")
} else{
fmt.Println("7 is odd")
}
if 8 % 4 == 0 {
fmt.Println("8 is divisible by 4")
}
if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num< 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
}
Go语言中if-else的用法与其他语言一样,但不同的是if的判断式不需要用括号,if后面要接大括号,且if中的语句不能跟if在同一行
- 循环
package main
import "fmt"
func main(){
i:= 1
for {
fmt.Println("loop")
break
}
for j := 7; j < 9; j++ {
fmt.Println(j)
}
for n := 0; n < 5; n++ {
if n%2 == 0 {
continue
}
fmt.Println(n)
for i <= 3 {
fmt.Println(i)
i = i + 1
}
}
go语言中没有while,do while循环,只有唯一的for循环,最简单的for循环就是后面什么都没有写,代表死循环,循环过程中可以用break退出,也可使用经典的C循环,在循环里可以使用break或者continue来跳出或者继续循环
- switch
go语言中switch的用法与其他语言一样,但不同的是在其它语言中,若分支中未加break,则会一直向下遍历所有分支,而go语言中却不需要break。go语言中switch的功能更加强大,可以使用任意的变量类型,甚至可以替代if-else,go语言中的switch后可以不加任何变量,然后可以在case中写条件分支,这样比使用多个if-else的代码逻辑更加清晰。
- 数组
数组具有固定长度,使用也与其他语言类似,在实际开发中用的不多,可看上面图进行理解
- 切片
切片可以任意改变长度,然后也有更多丰富的操作,比如说我们可以用make来创建一个切片,可以像数组一样去取值,用append去追加数据。注意append的用法的话,必须把append的结果赋值为原数组。
- map
map在其他语言中叫做哈希,它依然是拥有键值对,上图中它的键key是string类型,它的值valiue是int类型,可以从里面去存储或者取出键值对,也可以通过delete删除键值对。go语言中的map是完全无序的,遍历时不会按照插入时的顺序,也不会按照字母表大小顺序。
- range
对于一个map我们可以使用range来快速遍历,这样能使代码更加简洁。range遍历的时候,对于数组会返回两个值,第一个是索引,第二个是对应位置的值,如果我们不需要索引的话可以使用下划线忽略掉。
- 函数
go语言中得函数返回类型是后置的,其原生可以返回多个值。但在实际开发中一般返回两个值,第一个是实际需要的值,第二个则是错误信息。
- 指针
go语言中也支持指针,指针得主要用途就是对于传入参数进行修改。调用时会加一个&符号
- 结构体
go语言中的结构体类似于java中的对象,用结构体的名称去初始化一个结构体变量,其初始化时可以使用键值对,这样可以只对结构体中的一部分字段进行初始化,也可直接用值进行初始化。结构体中支持指针,这样可以实现对结构体的修改。
- 结构体函数
go语言中可以在结构体中定义一些方法,类似于java中的类成员函数。结构体方法就是把第一个参数加上括号写到函数名前面。定义结构体方法有两种,一种是带指针的,另一种是不带指针的,带指针的可以对结构体进行修改,不带指针实际上就是一个拷贝。
- 错误处理
在go语言中一般使用一个单独的值来返回错误信息。与java处理异常的方式不同,go语言中能够很清晰的知道哪个函数返回了错误,并且可以用简单的if-else进行解决。在函数里面,我们一般在返回类型后加一个error,代表这个函数可能会发生错误,若其发生错误,则返回nil和一个error,若没有发生错误,则返回原本结果和nil。
- 标准库
go语言的标准库中有对字符串进行操作,字符串格式化,JSON处理,时间处理,数字解析和进程解析等等,需要我们通过实际开发逐步对其进行熟练使用。
三.Go语言实践
在字节内部课中,老师通过猜谜游戏,在线词典与SOCKS5代理三个项目,让我们体会到了go语言的用法,以及让我们对go语言的基础语法有一个更加深刻的印象,对我们的学习很有帮助。
四.课后个人总结
go语言是一门具有自己特点的编程语言,但其思想与用法跟其他编程语言大同小异,在看课的过程中老师讲解的让我有点跟不住,但是通过课后自己的一系列总结可以加深自己对今日学习的回顾,总的来说,这才第一天,读万卷书,行万里路,最难的便是坚持,我相信只要有坚持的心,就能把东西学好。
五.引用
字节内部课-Go语言上手-基本语法