go-面向对象的理解

1.如何实例化对象

传址方式

注意:传址是PHP中默认使用的方式,例如 $a=new b()

  • rect1 := new(Rect)
  • rect2 := &Rect{}

传值方式

注意:PHP中要实现传值,需要使用clone关键字,go中直接赋值的方式是传值

  • a := Rect{}

2.调用对象的方法,先看如下代码

simple.go

type SimpleEngine struct {

}
func (this *SimpleEngine) Run(seeds ...Request)  {}

main.go

func main()  {
    engine.SimpleEngine{}.Run()
}

在main中直接调用run会报错:

 cannot call pointer method on engine.SimpleEngine literal
 cannot take the address of engine.SimpleEngine literal

原因是Run方法的接受者是指针,相当于PHP对象的方法,必须要实例化对象后才能调用,而如果想要通过engine.SimpleEngine{}.Run()直接调用,就需要将Run方法的接受者定义为

type SimpleEngine struct {

}
func (this SimpleEngine) Run(seeds ...Request)  {}

此时Run方法相当于静态函数,不用实例化对象就可以直接调用此方法

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,140评论 1 32
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,511评论 0 17
  • 面试题参考1 : 面试题[http://www.cocoachina.com/ios/20150803/12872...
    江河_ios阅读 1,757评论 0 4
  • Python语言特性 1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def...
    时光清浅03阅读 504评论 0 0
  • 有句话说得好 宁愿高傲地单着,也不要随便屈就 我为什么单身? 习惯了一个人吃饭,一个人上课,一个人去自习 不是因为...
    新财思维阅读 284评论 0 0