Интерфейс разыменования для базовых c типов - PullRequest
0 голосов
/ 09 июля 2020

Это глупый пример, с которым я играл, исследуя интерфейсы. Я обернул интерфейс вокруг 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 из интерфейса?

1 Ответ

1 голос
/ 09 июля 2020

speaker содержит конкретное значение типа intspeaker.IntSpeaker. Используйте утверждение типа , чтобы получить из него это значение:

var getIt intspeaker.SpeakNumber = speaker.(intspeaker.SpeakNumber)

Если он вам нужен как int, вы можете использовать следующий тип преобразование в получить его как int:

var it int = int(getIt)

Вы можете опустить типы из объявлений переменных (они будут выведены из выражений с правой стороны):

var getIt = speaker.(intspeaker.SpeakNumber)
var it = int(getIt)

Попробуйте на Go детской площадке .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...