基本类型的取消引用接口
Dereferencing interface for basic types
这是我用来探索界面的一个愚蠢的例子。我在一个 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
类型的具体值。使用 type assertion 从中获取该值:
var getIt intspeaker.SpeakNumber = speaker.(intspeaker.SpeakNumber)
如果您需要它作为 int
,您可以使用进一步的类型 conversion 将其作为 int
:
var it int = int(getIt)
您可以省略变量声明中的类型(将从右侧表达式推断):
var getIt = speaker.(intspeaker.SpeakNumber)
var it = int(getIt)
在 Go Playground 上试用。
这是我用来探索界面的一个愚蠢的例子。我在一个 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
类型的具体值。使用 type assertion 从中获取该值:
var getIt intspeaker.SpeakNumber = speaker.(intspeaker.SpeakNumber)
如果您需要它作为 int
,您可以使用进一步的类型 conversion 将其作为 int
:
var it int = int(getIt)
您可以省略变量声明中的类型(将从右侧表达式推断):
var getIt = speaker.(intspeaker.SpeakNumber)
var it = int(getIt)
在 Go Playground 上试用。