Go 语言仅支持封装, 不支持继承和多态; 面向接口编程
Go 语言没有 class, 只有 struct
结构体和方法
结构体定义
type TreeNode struct {
Left, Right *TreeNode
value int
}
结构的创建
root := treeNode{value: 3}
root.left = &treeNode{}
root.right = &treeNode{5, nil, nil}
root.right.left = new(treeNode)
nodes := []treeNode {
{value: 3},
{},
{7, nil, &root},
}
fmt.Println(nodes)
- 无论地址还是结构本身, 统一使用
.
来访问成员, 无构造函数
手动 "构造函数"
-
Go
语言中是没有构造函数的, 可以通过工厂函数来手动"构造函数"func createNode (value int ) *treeNode { return &treeNode{value:value} } root.left.right = createNode(2) // 输出结果 &{2 <nil> <nil>}
注意返回了局部变量的地址
为结构定义方法
-
显示定义和命名的方法接收者 (值传递)
func (node treeNode) print() { fmt.Print(node.value) }
-
使用指针作为方法的接收者; 只有使用指针才可以改变结构内容;
func (node *treeNode) setValue(value int) { node.value = value }
nil
指针也可以调用方法
值接收者 VS 指针接收者
- 要改变内容必须使用指针接收者
- 结构过大也考虑使用指针接收者
- 一致性: 如果有指针接收者, 最好都是使用指针接收者
包和封装
封装
- 名字一般使用驼峰命名法
CamelCase
- 首字母大写:
public
- 首字母小写:
private
包
- 每个目录只能有一个包, 包名和目录名可以不一样
-
main
包包含可执行入口 - 为结构定义的方法必须放在同一个包内
- 可以是不同的文件
GOPATH 和目录结构
默认目录
~/go(unix, linux)
%USERPROFILE\go(windows)
- 官方推荐: 所有项目和第三方库都放在同一个
GOPATH
下 - 也可以将每个项目放在不同的
GOPATH
go get
获取第三方库
全球最大的交(gao)友(ji)平台 GitHub
获取三方库,有时候会被墙; 需要我们设置代理(proxy
), 才能更好的使用三方工具
设置代理
打开命令行
go env -w GOPROXY=https://goproxy.io,direct
下载包管理工具 gopm
-
命令行输入, 等结果就可以了
go get -u github.com/gpmgo/gopm
-
测试
gopm -help
到这里
Go
的包管理工具gopm
就下载完成了, 具体操作撸文档就可以了