Go 基本类型的取消引用接口

Go 基本类型的取消引用接口,go,interface,Go,Interface,这是我用来探索接口的一个愚蠢的例子。我将一个接口包装在一个int上,这样它就可以说出它的值: package intspeaker import ( "fmt" ) type IntSpeaker interface { Speak() } type SpeakNumber int func (ic SpeakNumber) Speak() { fmt.Println("My value is ",

这是我用来探索接口的一个愚蠢的例子。我将一个接口包装在一个int上,这样它就可以说出它的值:

package intspeaker

import (
        "fmt"
)

type IntSpeaker interface {
        Speak()
}

type SpeakNumber int

func (ic SpeakNumber) Speak()  {
        fmt.Println("My value is ", ic)
}
package main
import "./intspeaker"
import "fmt"

func main() {
        var speaker intspeaker.IntSpeaker = intspeaker.SpeakNumber(5)
        speaker.Speak()
        fmt.Println(speaker) // output = 5
        var getIt int = speaker // compile error: cannot use speaker 
                                // (type intspeaker.IntSpeaker) as type int
}
然后我实例化接口,初始化值,并告诉它说出它的值:

package intspeaker

import (
        "fmt"
)

type IntSpeaker interface {
        Speak()
}

type SpeakNumber int

func (ic SpeakNumber) Speak()  {
        fmt.Println("My value is ", ic)
}
package main
import "./intspeaker"
import "fmt"

func main() {
        var speaker intspeaker.IntSpeaker = intspeaker.SpeakNumber(5)
        speaker.Speak()
        fmt.Println(speaker) // output = 5
        var getIt int = speaker // compile error: cannot use speaker 
                                // (type intspeaker.IntSpeaker) as type int
}

有没有办法从接口中取消对int值的引用?

speaker
包含类型为
intspeaker.intspeaker
的具体值。用于从中获取该值:

var getIt intspeaker.SpeakNumber = speaker.(intspeaker.SpeakNumber)
如果需要将其作为
int
,可以使用另一种类型将其作为
int

var it int = int(getIt)
您可以省略变量声明中的类型(将从右侧表达式推断):


试试这个。

是的。我试过了,但语法不正确。这对我来说有点不可靠,因为我来自Java世界。@ArloGuthrie我贴了一个链接到它工作的围棋场。如果它对你不起作用,你必须发布你尝试过的代码。不,它起作用。我是说我试过这么做,但语法错误。出于某种原因,有一个计时器在标记某件事为已回答。