Интерфейсы только когда-либо реализованы структурами типов данных в Go? - PullRequest
0 голосов
/ 21 декабря 2018

Я довольно новичок в Go и смотрю на интерфейсы и их реализации.Все примеры, с которыми я сталкивался, используют struct{} для реализации любого интерфейса.Можно ли использовать какой-либо базовый тип?

1 Ответ

0 голосов
/ 21 декабря 2018

Спецификация языка программирования Go

Объявления методов

Метод - это функция с приемником.Объявление метода привязывает идентификатор, имя метода к методу и связывает метод с базовым типом получателя.

Получатель указывается с помощью раздела дополнительных параметров, предшествующего имени метода.В этом разделе параметров должен быть объявлен единственный невариантный параметр - получатель.Его тип должен иметь форму T или * T (возможно, с использованием скобок), где T - это имя типа.Тип, обозначаемый T, называется базовым типом получателя;это не должен быть указатель или тип интерфейса, и он должен быть определен в том же пакете, что и метод.Считается, что метод связан с базовым типом, а имя метода отображается только в селекторах для типа T или * T.


Нет.Это может быть любой тип, отличный от указателя или типа интерфейса.


Например, используя string в качестве базового типа,

package main

import (
    "fmt"
    "strings"
)

type Caser interface {
    Upper() string
    Lower() string
}

type Str string

func (s Str) Upper() string {
    return strings.ToUpper(string(s))
}

func (s Str) Lower() string {
    return strings.ToLower(string(s))
}

func main() {
    str := Str("Forty-Two")
    fmt.Println(str)
    up := str.Upper()
    fmt.Println(up)
    lo := str.Lower()
    fmt.Println(lo)
}

Playground: https://play.golang.org/p/9RDRTftqWot

Вывод:

Forty-Two
FORTY-TWO
forty-two

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