这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
1.入门Go语言
1.1什么是Go语言
Go语言特点
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
Go语言的标准库性能就十分优秀,并不需要依赖深度优化的第三方库。
1.2字节跳动为什么全面拥抱Go
- 最初使用的Python由于性能问题换成Go
- C++不太适合在线web业务
- 早期团队非java背景
- 性能较好
- 部署简单、学习成本低
- 内部RPC和HTTP框架的推广。
2.1开发环境-安装Golang
到Go的官网> Go官网 进行下载安装go的运行环境包
如果无法访问使用国内镜像> Go国内镜像 进行下载
开发ide使用vscode或者Goland,建议使用Goland,在项目开发中更加好用。
2.2 基础语法
「Hello World」
所有编程语言的学习都是从Hllo World开始的。
先创建一个项目
我的以前写过项目文件不为空,但是都是一样的,在根目录创建一个main文件作为项目的启动入口。在里面创建main函数。
package main
import (
"fmt"
)
func main() {
fmt.print("Hello World")
}
go的入口包是main,入口函数也是main。在入口包和入口文件都是main的时候就可以进行编译执行。如果使用的是Goland这时就会出现启动按钮。
可以一键进行编译执行。
如果不是使用的Goland我们可以通过命令行的形式进行编译执行.可以直接执行,也可以选择先打包再执行。
#直接运行
go run /你的文件路径/main.go
#编译
go build /你的文件路径/main.go
#运行
./main.go
Go的变量
package main
import (
"fmt"
"math"
)
func main() {
var a = "a"
var b, c int = 1, 2
var d = true
var e float64
f := float32(e)
g := a + "foo"
fmt.Println(a, b, c, d, e, f)
fmt.Println(g)
const s string="s"
const h = 500
const i = 3e20/h
fmt.Println(s,h,i,math.Sin(h),math.Sin(i))
}
go是一个强类型语言。包括字符串、整型、布尔型、浮点型。 go的字符串可以直接用加号拼接。
go的创建新值可以使用var的方式来进行创建。如果初始化的时候赋值了,可以不声明类型。 GO语言会自己推断。如果在创建时使用:=的形式就会创建新的对象。这样就可以省略var和类型声明。例如s:="string"这样就会新建一个string类型的对象可以直接进行使用。
if else
package main
func main() {
if 6%3==0 {
}else {
}
if num:=9;num%2==0{
}else if num%3==0 {
}
}
Go的 If else。和大多数语言类似,不过判断部分不需要括号的包裹。并且在判断语句前也可以通过:=的方式声明对象,然后对对象进行相关的判断。此对象的作用域就是此if else的整体。
Go的循环
func main() {
//死循环
for{
println(1)
break
}
//经典循环
for i:=0;i<3;i++ {
println(i)
}
//条件循环
i:=1
for i<3{
println(i)
i=i+1
}
}
在Go中没有while循环只有for循环。for循环代替了while的功能,可以使用break跳出循环可以使用continue结束本次循环。
switch结构
func main() {
a:=2
switch a {
case 1:
println(1)
case 2:
println(2)
default:
println(3)
}
}
go的switch不需要使用break阻止进入下一个条件。go默认就只会执行匹配的条件,如果想要继续向下执行则需要continue语句
go中的时间处理
func main() {
now:=time.now()
t:=time.Date(2022,3,12,1,23,45,0,time.UTC)
println(t.Format("2006-01-02-15:04:05"))
}
go可以通过time.now()来获取当前时间。也可以为时间进行赋值操作。
时间的序列化使用。t.Format("2006-01-02-15:04:05")来完成对字符串的转化。这和其他语言的YYYY-mm-dd的写法不同。
获取进程相关信息
func main() {
println(os.Args)
println(os.Getenv("PATH"))
output, err := exec.Command("grep","127.0.0.1","/etc/hosts").CombinedOutput()
if err != nil {
return
}
println(output)
}
os.Args表示运行时传入的参数。