当前位置: 首页 > 面试题库 >

在Go中,类型和指向类型的指针都可以实现接口吗?

吴品
2023-03-14
问题内容

例如下面的示例:

type Food interface {
    Eat() bool
}

type vegetable_s struct {
    //some data
}

type Vegetable *vegetable_s

type Salt struct {
    // some data
}

func (p Vegetable) Eat() bool {
    // some code
}

func (p Salt) Eat() bool {
    // some code
}

DO VegetableSalt两个满足Food,即使一个是一个指针,另一个是直接一个结构?


问题答案:

通过编译代码很容易得到答案:

prog.go:19: invalid receiver type Vegetable (Vegetable is a pointer type)

该错误是基于以下规格要求:

接收器类型必须采用T或 T的形式,其中T是类型名称。用T表示的类型称为接收方基本类型; 它不能是指针或接口类型*
,并且必须在与方法相同的包中声明。

(强调我的)

声明:

type Vegetable *vegetable_s

声明一个 指针 类型,即 Vegetable没有资格作为方法接收者。



 类似资料:
  • 问题内容: 解释我的问题的最短方法是该代码: 但是,如果我尝试将指向Item的指针设置为i,代码将起作用: 但是我的函数接收对象,而不是指向它的指针。我可以得到它的类型(第一)。但是当我尝试指向它的指针时,我收到的是,而不是我的Object()的指针。 我可以指向该对象进行调用吗?或者可能是其他方式 问题答案: 切勿使用指向接口的指针。如果您需要一个指针来使用指针接收器调用方法,则必须将指针放入。

  • 查看如下程序:nexter是一个接口类型,并且定义了一个next()方法读取下一字节。函数nextFew将nexter接口作为参数并读取接下来的num个字节,并返回一个切片:这是正确做法。但是nextFew2使用一个指向nexter接口类型的指针作为参数传递给函数:当使用next()函数时,系统会给出一个编译错误:*n.next undefined (type nexter has no fiel

  • 问题内容: 根据这个问题的回答 关于指针与接收器的值的规则是,可以在指针和值上调用值方法,但是只能在指针上调用指针方法 但实际上我可以对非指针值执行指针方法: 那么,这是怎么了?这是新功能吗?还是对问题的回答是错误的? 问题答案: 您正在对指针值调用“指针方法”。在表达式中: 是类型(非指针);由于该方法具有指针接收者,并且由于接收者值是非指针且可寻址,因此它是以下各项的简写形式: 这是在规范中:

  • 本文向大家介绍Go语言的方法接受者类型用值类型还是指针类型?,包括了Go语言的方法接受者类型用值类型还是指针类型?的使用技巧和注意事项,需要的朋友参考一下 概述 很多人(特别是新手)在写 Go 语言代码时经常会问一个问题,那就是一个方法的接受者类型到底应该是值类型还是指针类型呢,Go 的 wiki 上对这点做了很好的解释,我来翻译一下。 何时使用值类型 1.如果接受者是一个 map,func 或者

  • 我以为我知道指针,但当我研究运行时多态性/动态绑定时,我看到了指针的一种非常不同的用法。下面是我的3个问题,它们都是关于下面的单行代码的:

  • 8. 函数类型和函数指针类型 在C语言中,函数也是一种类型,可以定义指向函数的指针。我们知道,指针变量的内存单元存放一个地址值,而函数指针存放的就是函数的入口地址(位于.text段)。下面看一个简单的例子: 例 23.3. 函数指针 #include <stdio.h> void say_hello(const char *str) { printf("Hello %s\n", str); }