почему нельзя использовать (тип func (string)) как тип func (interface {}) в присваивании - PullRequest
0 голосов
/ 09 января 2019

Пожалуйста, сначала посмотрите на код ниже.

package main

import "fmt"

type InterfaceFunc func(interface{})
type StringFunc func(string)

func stringFunc(s string) {
    fmt.Printf("%v", s)
}

func interfaceFunc(i interface{}) {
    fmt.Printf("%v", i)
}

func main() {
    var i = interfaceFunc
    var s = stringFunc

    i = s // I would like someone to explain why this can't be done exactly.
}

Запуск на https://play.golang.org/p/16cE4O3eb95

Почему InterfaceFunc не может удерживать StringFunc, а interface{} может удерживать string.

1 Ответ

0 голосов
/ 09 января 2019

Вы не можете сделать s = i или i = s, и причина в том, что обе функции имеют разный тип (разные подписи), вы не можете просто назначить один тип с другим в golang.

Также type InterfaceFunc func(interface{}) type StringFunc func(string) сидят там, ничего не делая.

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