gpt4 book ai didi

go - 将 Golang 定义的类型视为基础类型?

转载 作者:IT王子 更新时间:2023-10-29 01:51:46 27 4
gpt4 key购买 nike

我是 Go 的新手。我了解定义新类型的基础知识,如下所示:

type MyCondition bool

我知道这意味着无论何时我声明一个函数都采用 MyCondition 的实例它不能是 bool ,那太好了。但是,我想处理 MyCondition 的一个实例就好像它是一个 bool ,我发现我不能总是这样做:

package main

import (
"fmt"
)

type MyCondition bool

func main() {
var b1 MyCondition
var b2 = true
fmt.Println(!b1) // OK!
fmt.Println(b1 || b1) // OK
fmt.Println(b1 || b2)
}

这不编译,抛出:

./prog.go:13:17: invalid operation: b1 || b2 (mismatched types MyCondition and bool)

据我观察,MyCondition单独作为 bool 工作,但是当我将它与实际的 bool “混合”时会出现问题.

问题是:

  1. 为什么会这样?
  2. 有什么解决方法?我真的很想把它当作 bool 来处理,而不需要多态转换。

最佳答案

你不能那样做。您必须明确地将 MyCondition 转换为 bool,即 bool(b1) || b2.

来自 Go spec :

Logical operators apply to boolean values and yield a result of the same type as the operands.

如果左操作数和右操作数的类型不同,编译器将无法确定结果类型。所以这两个操作数必须是同一类型。

关于go - 将 Golang 定义的类型视为基础类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56470118/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com