Go语言仅支持封装,不支持继承和多态
Go语言没有class,只有struct
结构体和方法
-
创建
type Node struct { Value int Left, Right *Node }
-
定义方法
func CreateNode(value int) *Node { return &Node{Value: value} } func (node *Node) SetValue(value int) { if node == nil { fmt.Println("Setting Value to nil " + "node. Ignored.") return } node.Value = value }
只有使用指针才可以改变结构内容
nil指针也可以调用方法
-
值接收者 vs 指针接收者
- 要改变内容必须使用指针接收者
- 结构过大也考虑使用指针接收者
- 一致性:如果指针接收者,最好都是指针接收者
包和封装
- 结构定义的方法必须放在同一个包内
- 可以是不同的文件
- 如果包中内容需要public,需要将包中的变量,方法名等首字母大写
- 类型扩展
- 定义别名
- 使用组合
GOPATH及目录结构
-
GOPATH环境变量
- 默认在~/go(unix, linux), %USERPROFILE%\go(windows)
- 官方推荐:所有项目和第三方库都放在同一个GOPATH下
-
获取第三方库
-
使用
go get
命令 -
国内环境无法下载golang.org下的库,使用
gopm
获取无法下载的库go get -v -u github.com/gpmgo/gopm
-
配置
$GOPATH:bin
-
使用
gopm
命令用下载谷歌的工具包gopm get -v -g -u golang.org/x/tools/cmd/goimports
-
使用
go install
命令把goimports
安装到$GOPATH
下
-
-
常用命令
-
got get
sourcepath
获取第三方库
-
go build
sourcepath
编译库
-
go install
sourcepath
安装库,产生pkg文件和可执行文件
-
go run
sourcepath
编译运行库
-