这是 Go 语言学习记录系列的笔记1,快来跟我一起学习Go 的基础语法吧 Go神! 启动!
Go 语法解析和与 CPP 的对比
包
Go语使用包(package)这种语法元素赖组织源码,所有语法可见性均定义在package这个级别,与Java,python等语言相比,没有创新,但是比c的include先进的多。
Go语言的源码复用建在包(package)的基础之上,包通过package,import,还有GOPATH,MOD等操作完成。
程序从 main 包开始运行。类似 CPP 的 include引入头文件,通过"import"导入 "fmt" 和 "math/rand" 来使用这两个包。按照约定,包名与导入路径的最后一个元素一致。例如,"math/rand" 包中的源码均以 package rand 语句开始
package main
import (
"fmt"
"math/rand"
)
func main() {
fmt.Println("My favorite number is", rand.Intn(10))
}
分组导入
此代码用圆括号组合了导入的包,是“分组”形式的导入语句。
import (
"fmt"
"math/rand"
)
也可以不分组
import "fmt"
import "math"
使用分组导入语句是更好的形式
导出名
在 Go 中,大写字母开头的名字就是已导出的。例如,Pizza 就是个已导出名,Pi 也同样,它导出自 math 包。而小写字母pizza 和 pi 并未以大写字母开头,所以它们是未导出的。
在导入一个包时,你只能引用其中已导出的名字。任何“未导出”的名字在该包外均无法访问。
函数
函数,和 cpp 函数是一样的,可以接收0个或多个参数;同样也可以有多个返回值,比 cpp 的单返回值方式更加简单 注意类型在变量名 之后
func addAndSub(x int, y int) (int,int) {
return x + y, x - y
}
当连续两个或多个函数的已命名形参类型相同时,除最后一个类型以外,其它都可以省略 比如
x int, y int
可以缩写为
x, y int
这也体现了 go 语法的简洁高效 Go 的返回值可被命名,它们会被视作定义在函数顶部的变量。
var
var 语句用于声明一个变量列表(多个变量),跟函数的参数列表一样,类型在最后
变量声明可以包含初始值,每个变量对应一个
如果初始化值已存在,则可以省略类型;变量会从初始值中获得类型
在函数内部,简洁赋值语句 := 可在类型明确的地方代替 var 声明。
函数外的每个语句都必须以关键字开始(var, func 等等),因此 := 结构不能在函数外使用
Reader
io 包指定了 io.Reader 接口,它表示从数据流的末尾进行读取。
Go 标准库包含了该接口的许多实现,包括文件、网络连接、压缩和加密等等。
io.Reader 接口有一个 Read 方法:
func (T) Read(b []byte) (n int, err error)
Read 用数据填充给定的字节切片并返回填充的字节数和错误值。在遇到数据流的结尾时,它会返回一个 io.EOF 错误。