栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

指针上的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 mainimport "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, "JorelliBar")
,因为这两个
Fruit
*Fruit
实施
Renamable
,而
*Candy
工具
Renable
Candy
没有。

http://play.golang.org/p/Fb-L8Bvuwj



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507011.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号