1.Почему это происходит?
Го - строго типизированный язык. Так что это по замыслу. Это обеспечивает правильность кода и определенно исключает определенные классы ошибок программирования.
- Какой обходной путь для этого? Мне бы очень хотелось относиться к этому как к буру без полимеризации.
Обходные:
1. Не используйте новый именованный тип, просто используйте bool
, если вам не нужны преимущества.
2. Используйте преобразование типов, например bool(b1)
или MyCondition(b2)
удачно.
3. Используйте Метод набора, чтобы конвертировать или выполнять больше заданий удачно.
4. Используйте тип Go псевдоним (начиная с Go 1,9 ): type MyCondition = bool
.
Когда вы используете новое имя типа для bool
, вы просите компилятор строго проверить тип и этот класс ошибок программирования. Поэтому, если вам не нужна такая помощь компилятора, не используйте новый именованный тип, просто используйте bool
.
И здесь стоит отметить Наборы методов и их использование:
Вы можете использовать новый метод, например, ToBool
, чтобы сделать это преобразование типов и больше, если вам нужно, попробуйте this :
package main
import "fmt"
type MyCondition bool
func (c MyCondition) ToBool() bool {
return bool(c)
}
func main() {
var b1 MyCondition
var b2 = true
fmt.Println(b2) // true
b2 = b1.ToBool() // b1.bool()
fmt.Println(b2) // false
}
Соответствующие ссылки:
Тип Преобразование :
Преобразование изменяет тип выражения на указанный тип
по конверсии. Конверсия может появиться буквально в источнике, или
это может подразумеваться контекстом, в котором появляется выражение.
Явное преобразование - это выражение вида T (x), где T - это
type и x - это выражение, которое можно преобразовать в тип T.
Conversion = Type "(" Expression [ "," ] ")" .
Типовые утверждения для типов интерфейса.
Тип личности
Псевдонимы