分享
  1. 首页
  2. 文章

golang面向对象

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

golang中并没有明确的面向对象的说法,实在要扯上的话,可以将struct比作其它语言中的class。

类的声明:

//声明一个类
type People struct {
 Name string
 Sex int32
 Address string
}

这样就声明了一个类,其中没有public、protected、private的的声明。golang用另外一种做法来实现属性的访问权限:属性的开头字母是大写的则在其它包中可以被访问,否则只能在本包中访问。类的声明和方法亦是如此。

类方法声明:

//声明一个类的方法
func (people People) Publish() {
 fmt.Println("method :Publish")
}
func (people *People) Show(name string) {
 fmt.Println(name)
}

和其它语言不一样,golang声明方法和普通方法一致,只是在func后增加了poem *Poem这样的声明。加*和没有加*的区别在于一个是传递指针对象,一个是传递值对象。

实例化对象:

//实例化People类对象
 p := &People{}
 p.Name = "Name1"
 fmt.Println("p Name:", p.Name)
 p2 := &People{Name: "Name2"}
 fmt.Println("p2 Name:", p2.Name)
 p3 := new(People)
 p3.Name = "Name3"
 fmt.Println("p3 Name:", p3.Name)
 p4 := People{}
 p4.Name = "Name4"
 fmt.Println("p4 Name:", p4.Name)
 p5 := People{Name: "Name5"}
 fmt.Println("p5 Name:", p5.Name)
 p6 := NewPeople("张三")
 fmt.Println("p6:Name-", p6.Name)

实例化的时候可以初始化属性值,如果没有指明则默认为系统默认值

加&符号和new的是指针对象,没有的则是值对象,这点和php、java不一致,在传递对象的时候要根据实际情况来决定是要传递指针还是值。

小技巧提示:当对象比较小的时候传递指针并不划算。

构造函数:

golang并没有构造函数一说。如果一定要在初始化对象的时候进行一些工作的话,可以自行封装产生实例的方法。

 func New类名(param string, p ...interface{}) (参数 *类名)
//构造函数
func NewPeople(name string) (people *People) {
 people = &People{} //初始化
 people.Name = name
 people.Show(name)
 return
}

构造函数的调用

p6 := NewPeople("张三")
 fmt.Println("p6:Name-", p6.Name)

继承(组合):

//类的继承也可以称为类的组合
type ChinaPeople struct {
 People
 Title string
 Name string
}

ChinaPeople 属性中声明了Name,表示组合了People的属性和方法。可以像如下方式调用(如果其中属性有冲突,则以外围的为主。):

chinaP := &ChinaPeople{}
 chinaP.Name = "China"
 fmt.Println(chinaP)
 fmt.Println("ChinaPeople Name:", chinaP.Name, " of value")
 chinaP.People.Name = "People-Name"
 fmt.Println(chinaP)
 fmt.Println("People Name", chinaP.People.Name, " of value")

输出结果:

方法重载:

//方法重载
func (people *People) Receive(v ...interface{}) {
 fmt.Println(v)
}

重载调用:

 fmt.Println("方法的重载:")
 p7 := &People{}
 p7.Receive("Receive", 890)
 p7.Receive("Receive", 890, "abcd")


执行结果:


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

本文来自:博客园

感谢作者:wangjunqiao

查看原文:golang面向对象

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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏