Go语言仅支持封装,不支持继承/多态。
1. Go 结构体 (struct)
结构体就是一个复杂的数据类型,里面可以包含字段,也可以嵌套其他结构体
Go 中没有 class,而是使用 struct 。
结构体命名一般都是用CamelCase,首字母大写表示public,首字母小写表示private,和go变量定义一样。
type TreeNode struct {
value int
left, rignt *TreeNode
}
go语言采用的是目录分包,同一个目录下是一个包,在文件开头使用package声明。对同一个结构体的方法声名可以在不同的文件中,但必须是在同一个包下面。
go语言建议结构体的名称不要重复包名,同时为了能在其他包访问Node结构体,将上面的TreeNode定义修改如下:
package tree
type Node struct {
Value int
Left, Right *Node
}
定义go结构体的方法时,和其他语言不同的是,他需要手动自定函数方法的接受者,可以是指也可以是指针。但是只用者并不需要关心接受者是什么值还是指针,统一调用。
//值
func (node Node) Print(){
fmt.Print(node.Value," ")
}
//指针
func (node *Node) SetValue(value int){
if node == nil{
panic("node is nil")
}
node.Value = value
}
func main(){
root := Node{Value:3}
root.Left = &Node{}
root.Right = &Node{Value:4}
root.Print() //值类型调用
left := root,Left
left.Print() //指针类型调用
}
2. Go常用命令
查看可用命令
直接在终端中输入 go help
即可显示所有的 go 命令以及相应命令功能简介,主要有下面这些:
build: 编译包和依赖
clean: 移除对象文件
doc: 显示包或者符号的文档
env: 打印go的环境信息
bug: 启动错误报告
fix: 运行go tool fix
fmt: 运行gofmt进行格式化
generate: 从processing source生成go文件
get: 下载并安装包和依赖
install: 编译并安装包和依赖
list: 列出包
run: 编译并运行go程序
test: 运行测试
tool: 运行go提供的工具
version: 显示go的版本
vet: 运行go tool vet
build 和 run 命令
就像其他静态类型语言一样,要执行 go 程序,需要先编译,然后在执行产生的可执行文件。go build 命令就是用来编译 go程序生成可执行文件的。但并不是所以的 go 程序都可以编译生成可执行文件的, 要生成可执行文件,go程序需要满足两个条件:1)该go程序需要属于main包2)在main包中必须还得包含main函数。
go build main.go # 将会生成可执行文件 main
./main # 运行可执行文件
#go run 命令可以将上面两步并为一步执行
go run main.go
#go clean 命令,可以用于将清除产生的可执行程序
go clean # 不加参数,可以删除当前目录下的所有可执行文件
go clean xxx.go # 会删除对应的可执行文件
get 命令
这个命令同样也是很常用的,我们可以使用它来下载并安装第三方包, 使用方式:
# src路径
go get src
#示例
go get github.com/qqxhb/exampl
#可以使用gopm获取无法下载的包
go get github.com./gpmgo/gopm
install 命令
用来编译和安装go程序,我们可以将它与 build 命令对比:
install
生成的可执行文件路径:工作目录下的bin目录下
可执行文件的名字:与源码所在目录同名
依赖:将依赖的包放到工作目录下的pkg文件夹下
build
生成的可执行文件路径:当前目录下
可执行文件的名字:默认与源程序同名,可以使用-o选项指定
test 命令
顾名思义,用来运行测试的命令,这种测试是以包为单位的。需要遵循一定规则:
测试源文件是名称以“_test.go”为后缀的
测试源文件内含若干测试函数的源码文件
测试函数一般是以“Test”为名称前缀, 并有一个类型为“testing.T”的参数。