面向"对象" - day 2

aside section._1OhGeD · · 538 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

结构体和方法

函数的定义和声明

type treeNode struct {
    value int
    left, right *treeNode
}
func main() {
    var root treeNode
    root = treeNode{value: 3}
    root.left = &treeNode{}
    root.right = &treeNode{5, nil, nil}
    root.right.left = new(treeNode)
    // struct slice
    nodes := []treeNode {
        {value: 3},
        {},
        {5, nil, nil}
    }
}

Goang中可以将局部变量的地址返回使用

结构的方法

func (node treeNode) print() {
//...
}
func main() {
    node.print()
}

go语言中结构方法的接收参数也是值传递,如果想修改则需要传递地址指针;但是在结构方法调用时不需要取地址,编译器会自动判断转换的;在结构方法内部也不需要使用*进行转换,直接使用.进行访问属性就可以
只有使用指针才可以改变结构内容
nil指针也可以调用方法

值接收者 vs 指针接收者

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

包和封装

  • 每个目录有且只能有一个包(包名字可以与目录名不同)
  • 为结构体定义的方法可以在不同的文件,但是必须在同一个包内

Golang中结构体的名字不需要重复包的名字

扩展已有类型

  • 定义别名
  • 使用组合

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:aside section._1OhGeD

查看原文:面向"对象" - day 2

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

538 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传