面向对象

一、创建
  • 仅支持封装 ,不支持继承和多态
  • 没有 class,只有 struct
  • 不论地址还是结构本身,一律使用 . 来访问成员
1
2
3
4
5
6
7
8
9
10
11
type treeNode struct {
value int
left,right *treeNode
}
func main() {
var root treeNode
root = treeNode{value: 2}
root.left = &treeNode{}
root.right = &treeNode{5,nil,nil}
root.right.left = new(treeNode)
}
结构的创建
1
2
3
4
// 使用自定义工厂函数
func createNode(value int) *treeNode {
return &treeNode{value:value} // 返回局部变量的地址
}

值接收者和指针接收者

1
2
3
4
5
6
7
8
//值接收者
func (node treeNode)print() {
fmt.Println(node.value)
}
//指针接收者
func (node *treeNode)setValue(value int) {
node.value = value
}
  • 要改变内容必须使用指针接收者
  • 结构过大也考虑使用指针接收者
  • 一致性:如果有指针接收者,最好都是指针接收者
  • 值接收者是 go 语言特有
二、包和封装
  • 名字一般使用驼峰式 CamelCase
  • 首字母大写代表:public
  • 首字母小写代表:private

包:

  • 每个目录只有一个包
  • 为结构定义方法必须放在同一个包内
  • 可以是不同文件
三、扩展
  • 定义别名
  • 使用组合
四、GOPATH 环境变量
  • 默认在 ~/go (linux)
  • 官方推荐:所有项目和第三方库都放在同一个 GOPATH 下
  • 也可以将每个项目放在不同的 GOPATH
  • go get 获取第三方库

  • go build 来编译

  • go install 产生 pkg 文件和可执行文件

  • go run 直接编译运行

  • src 目录

  • pkg 目录

  • bin 目录 :可执行文件

  • 每个目录下都得有一个 mian 函数