面向对象

Go学习笔记

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 指针接收者

    1. 要改变内容必须使用指针接收者
    2. 结构过大也考虑使用指针接收者
    3. 一致性:如果指针接收者,最好都是指针接收者

包和封装

  • 结构定义的方法必须放在同一个包内
  • 可以是不同的文件
  • 如果包中内容需要public,需要将包中的变量,方法名等首字母大写
  • 类型扩展
    1. 定义别名
    2. 使用组合

GOPATH及目录结构

  • GOPATH环境变量

    1. 默认在~/go(unix, linux), %USERPROFILE%\go(windows)
    2. 官方推荐:所有项目和第三方库都放在同一个GOPATH下
  • 获取第三方库

    1. 使用go get 命令

    2. 国内环境无法下载golang.org下的库,使用gopm获取无法下载的库

      go get -v -u github.com/gpmgo/gopm
      
    3. 配置$GOPATH:bin

    4. 使用gopm命令用下载谷歌的工具包

      gopm get -v -g -u golang.org/x/tools/cmd/goimports
      
    5. 使用go install命令把goimports安装到 $GOPATH

  • 常用命令

    1. got get sourcepath

      获取第三方库

    2. go build sourcepath

      编译库

    3. go install sourcepath

      安装库,产生pkg文件和可执行文件

    4. go run sourcepath

      编译运行库

Go 

See also