Go 如何更正“中的类型比较”;如果;建造

Go 如何更正“中的类型比较”;如果;建造,go,types,Go,Types,我尝试使用“反射”和“(类型) 但都返回了错误 错误1:类型float64不是表达式 错误2:无法在非接口值a上键入switch(type float64)if语句只能与单个类型进行比较,因为它没有类似于switch语句的分支,并且您必须在if语句中使用以下语句: var i interface{} i = 3.3 // store a float64 value in i if f, ok := i.(float64); ok { fmt.Print("It's a flo

我尝试使用“反射”和“(类型)

但都返回了错误

错误1:类型float64不是表达式

错误2:无法在非接口值a上键入switch(type float64)

if
语句只能与单个类型进行比较,因为它没有类似于
switch
语句的分支,并且您必须在
if
语句中使用以下语句:

var i interface{}
i = 3.3 // store a float64 value in i

if f, ok := i.(float64); ok {
    fmt.Print("It's a float64 value: %.2f", f)
} else {
    fmt.Println("Not float64")
}
这将输出(在上尝试):

您也可以使用反射,但这里的类型断言更有效、更惯用。作为参考,以下是使用反射的方式:

if reflect.TypeOf(i) == reflect.TypeOf(float64(0)) {
    fmt.Printf("It's a float64 value: %.2f", i)
} else {
    fmt.Println("Not float64")
}
输出是相同的。试一试这个

请注意,当我们使用类型断言时,我们有一个断言类型的变量
f
float64
),因此如果某些函数直接需要该类型的值,我们可以使用它。当使用反射时,我们没有这种类型的值,
i
interface{}
类型的“still”,我们可以使用它,因为
fmt.Printf()
接受
interface{}
的值。但是,如果我们必须将其传递给需要
float64
的函数,我们仍然需要使用(额外的)类型断言,如第一个示例中所示

还要注意,只有当您的输入是接口类型时,使用类型断言和类型开关才有意义,因为只有接口类型可以存储不同/多个具体类型的值


在具体类型上使用类型断言或类型开关(如示例中的
float64
value)没有任何意义,因为该值可能只属于
float64
类型,而不是其他类型,因此,语言规范首先不允许它。

if语句只能与单个类型进行比较,因为它没有类似于
switch
语句的分支,您必须在
if
语句中使用a,如下所示:

var i interface{}
i = 3.3 // store a float64 value in i

if f, ok := i.(float64); ok {
    fmt.Print("It's a float64 value: %.2f", f)
} else {
    fmt.Println("Not float64")
}
这将输出(在上尝试):

您也可以使用反射,但这里的类型断言更有效、更惯用。作为参考,以下是使用反射的方式:

if reflect.TypeOf(i) == reflect.TypeOf(float64(0)) {
    fmt.Printf("It's a float64 value: %.2f", i)
} else {
    fmt.Println("Not float64")
}
输出是相同的。试一试这个

请注意,当我们使用类型断言时,我们有一个断言类型的变量
f
float64
),因此如果某些函数直接需要该类型的值,我们可以使用它。当使用反射时,我们没有这种类型的值,
i
interface{}
类型的“still”,我们可以使用它,因为
fmt.Printf()
接受
interface{}
的值。但是,如果我们必须将其传递给需要
float64
的函数,我们仍然需要使用(额外的)类型断言,如第一个示例中所示

还要注意,只有当您的输入是接口类型时,使用类型断言和类型开关才有意义,因为只有接口类型可以存储不同/多个具体类型的值


在具体类型上使用类型断言或类型开关(如示例中的
float64
value)没有任何意义,因为该值可能只属于
float64
类型,而不是其他类型,因此语言规范首先不允许它。

不要发布链接,包括问题中的代码。欢迎来到StackOverflow
a.(type)
不起作用,因为
a
不是接口,
(type)
只对接口类型的值起作用
TypeOf(a)==float64
不起作用,因为
TypeOf
返回一个值,而
float64
是一个类型,一个值不是一个类型,所以
=
没有意义,只有
=
有意义。对不起,我的错误是,我试图包含图像,而不是链接,但我现在不知道怎么做(如果上面没有点击,请点击。不要包含图片,也不要包含指向图片或代码的链接。您必须将代码作为文本包含。复制粘贴。谢谢。我希望现在看起来更好。不要发布链接,在问题中包含代码。欢迎使用StackOverflow。
a.(键入)
不起作用,因为
a
不是接口,
(type)
只对接口类型的值起作用。
TypeOf(a)==float64
不起作用,因为
TypeOf
返回一个值,而
float64
是一个类型,一个值不是一个类型,所以
=
没有意义,只有
=
有意义。对不起,我的错误是,我试图包含图像,而不是链接,但我现在不知道怎么做(如果上面没有点击,请点击。不要包含图像,也不要包含图像或代码的链接。您必须将代码作为文本包含。复制并粘贴。谢谢。我希望现在它看起来更好。)