«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Причины снятия псевдоним типа GO

Причины снятия псевдоним типа GO

Опубликовано в 2025-04-12
Просматривать:368

Why Does Go's Type Assertion Fail with Type Aliases?

Как поднять в тип псевдоним в Go? Импорт "FMT" введите что -нибудь функциональное фонд (int) bool Func Funcy (I Int) bool { Возврат i%2 == 0 } func main () { var a Interface {} = Funcy _ = a. (func (int) bool) // Работает fmt.println («Потрясающе - очевидно, буквально указал фан -подписи».) _ = a. (что -тофункси) // Паника fmt.println («черт возьми - не попадает сюда. Но что -тофункси - та же подпись, что и фанк (int) bool.») }. Однако второй использует псевдоним типа что -то, что паникует панику. Следовательно, тип псевдоним, что -тофункси, хотя и разделяет ту же подпись, что и func (int) bool, считается отдельным типом.

]

bonus

package main

import "fmt"

type somethingFuncy func(int) bool

func funcy(i int) bool {
    return i%2 == 0
}

func main() {
    var a interface{} = funcy

    _ = a.(func(int) bool)  // Works

    fmt.Println("Awesome -- apparently, literally specifying the func signature works.")

    _ = a.(somethingFuncy)  // Panics

    fmt.Println("Darn -- doesn't get here. But somethingFuncy is the same signature as func(int) bool.")
}

это сравнение не удается при использовании псевдонима типа, потому что оно требует точного типа совпадения.

]

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3