ove*_*nge 0 methods pointers go structural-typing
在GO中,我了解到,
1)
程序员只能将命名类型(
X)或指针(*X)的方法定义为命名类型2)
类型明确的方法定义
X隐含定义了相同的方法类型*X和反之亦然,所以,我的理解是,如果我宣布,Run Code Online (Sandbox Code Playgroud)func (c Cat) foo(){ //do stuff_ }并宣布,
Run Code Online (Sandbox Code Playgroud)func (c *Cat) foo(){ // do stuff_ }然后GO编译器给出,
Compile error: method re-declared这表明,指针方法是隐式定义的,反之亦然
使用给定的命名类型(
Cat),Run Code Online (Sandbox Code Playgroud)type Cat struct{ Name string Age int Children []Cat Mother *Cat }
场景1
方法(
foo)Cat由程序员在命名类型()上定义,Run Code Online (Sandbox Code Playgroud)func (c Cat) foo(){ // do stuff.... }通过GO编译器隐式地将
foo指针*Cat类型的指针()定义为命名类型,看起来像,Run Code Online (Sandbox Code Playgroud)func (c *Cat) foo(){ // do stuff.... }关于创建命名类型的变量(
Cat)Run Code Online (Sandbox Code Playgroud)var c Cat var p *Cat = &c
c.foo()有程序员定义的方法.问题1:
在调用时
p.foo(),隐式指针方法是否接收指针(p)?
情景2
方法(
foo)*Cat在程序员的指定类型的指针()上定义,Run Code Online (Sandbox Code Playgroud)func (c *Cat) foo(){ // do stuff.... }通过GO编译器隐式定义
foo命名类型(Cat)的method(),看起来像,Run Code Online (Sandbox Code Playgroud)func (c Cat) foo(){ // do stuff.... }关于创建命名类型的变量(
Cat)Run Code Online (Sandbox Code Playgroud)var c Cat var p *Cat = &c
p.foo()具有由程序员定义的方法(上面).问题2:
在调用时
c.foo(),隐式非指针方法是否接收到值c?