java 函数参数指针_指针上的golang指针作为函数参数

接口类型只是一组方法 . 请注意,接口定义的成员不指定接收器类型是否为指针 . 这是因为值类型的方法集是其关联指针类型的方法集的子集 . 那是满口的 . 我的意思是,如果您有以下内容:

type Whatever struct {

Name string

}

并定义以下两种方法:

func (w *Whatever) Foo() {

...

}

func (w Whatever) Bar() {

...

}

然后类型 Whatever 只有方法 Bar() ,而类型 *Whatever 有方法 Foo() 和 Bar() . 这意味着如果您有以下界面:

type Grits interface {

Foo()

Bar()

}

然后 *Whatever 实现 Grits 但 Whatever 没有,因为 Whatever 缺少方法 Foo() . 将函数的输入定义为接口类型时,您不知道它是指针还是值类型 .

以下示例说明了以两种方式获取接口类型的函数:

package main

import "fmt"

type Fruit struct {

Name string

}

func (f Fruit) Rename(name string) {

f.Name = name

}

type Candy struct {

Name string

}

func (c *Candy) Rename(name string) {

c.Name = name

}

type Renamable interface {

Rename(string)

}

func Rename(v Renamable, name string) {

v.Rename(name)

// at this point, we don't know if v is a pointer type or not.

}

func main() {

c := Candy{Name: "Snickers"}

f := Fruit{Name: "Apple"}

fmt.Println(f)

fmt.Println(c)

Rename(f, "Zemo Fruit")

Rename(&c, "Zemo Bar")

fmt.Println(f)

fmt.Println(c)

}

你可以调用 Raname(&f, "Jorelli Fruit") 而不是 Rename(c, "Jorelli Bar") ,因为 Fruit 和 *Fruit 都实现了 Renamable ,而 *Candy 实现了 Renable 而 Candy 没有 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值