您现在的位置是:首页 >技术杂谈 >Go语言的学习【1】基础语法之前的准备事项网站首页技术杂谈
Go语言的学习【1】基础语法之前的准备事项
目录
什么是云原生
在包括公有云、私有云、混合云等动态环境中构建和运行规模化应用的能力。
• 云原生是一种思想,是技术、企业管理方法的集合。
• 技术层面
• 应用程序从设计之初就为在云上运行而做好准备。
• 云平台基于自动化体系。
• 流程层面
• 基于 DevOps, CI/CD
基于多种手段
• 应用容器化封装;
• 服务网格;
• 不可变基础架构;
• 声明式 API。
云原生的意义
• 提升系统的适应性、可管理性、可观察性;
• 使工程师能以最小成本进行频繁和可预测的系统变更。
• 提升速度和效率,助力业务成长,缩短 I2M(Idea to Market)
学习方法
go语言的IDE配置之VScode
没用goland是因为我暂时没钱+暂时不想用盗版+暂时不想给电脑加几个G的存储消耗+我同时也在用vscode做Rust的语言学习。
这里网上教程很多,我就不一一列举了。这里推荐一个【Golang】VsCode下开发Go语言的环境配置(超详细图文详解)
完美解决了我vscode运行代码的麻烦。
写go代码要注意的事情
- 必须在源文件中非注释的第一行指明这个文件属于哪个包。【package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。】
- fmt 包实现了格式化 IO(输入/输出)的函数
- func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。
- /…/ 是注释 以 // 开头的单行注释;多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段
- 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )
- Go 语言不支持动态链接,因此编译时会将所有依赖编译进同一个二进制文件
一些基本命令
bug
start a bug report
build
compile packages and dependencies
clean
remove object files and cached files
doc
show documentation for package or symbol
env
print Go environment information
fix
update packages to use new APIs
fmt
gofmt (reformat) package sources
generate
generate Go files by processing source
get
add dependencies to current module and install them
install
compile and install packages and dependencies
list
list packages or modules
mod
module maintenance
run
compile and run Go program
test
test packages
tool
run specified go tool
version
print Go version
vet
report likely mistakes in packages
指定输出目录。
go build –o bin/mybinary
.
常用环境变量设置编译操作系统和 CPU 架构。
GOOS=linux GOARCH=amd64 go build
全支持列表。
$GOROOT/src/go/build/syslist.go
基础语法
这里推荐菜鸟教程。
Go 语言原生自带测试
import "testing"
func TestIncrease(t *testing.T) {
t.Log("Start testing")
increase(1, 2)
}
go test ./… -v
运行测试
go test 命令扫描所有*_test.go
为结尾的文件,惯例是将测试代码与正式代码放在同目录,
如 foo.go 的测试代码一般写在 foo_test.go
Go vet
代码静态检查,发现可能的 bug 或者可疑的构造。
Print-format 错误,检查类型不匹配的print
str := “hello world!”
fmt.Printf("%d
", str)
Boolean 错误,检查一直为 true、false 或者冗余的表达式
fmt.Println(i != 0 || i != 1)
Range 循环,比如如下代码主协程会先退出,go routine无法被执行
words := []string{"foo", "bar", "baz"}
for _, word := range words {
go func() {
fmt.Println(word).
}()
}
Unreachable的代码,如 return 之后的代码
其他错误,比如变量自赋值,error 检查滞后等
res, err := http.Get("https://www.spreadsheetdb.io/")
defer res.Body.Close()
if err != nil {
log.Fatal(err)
}
代码版本控制
fmt.Println(…) 和fmt.Print()
可以将字符串输出到控制台,并在最后自动增加换行字符 。
Print 和 Println 这两个函数也支持使用变量,如:fmt.Println(arr)。如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台。