Go 如何更正“中的类型比较”;如果;建造
我尝试使用“反射”和“(类型) 但都返回了错误 错误1:类型float64不是表达式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
错误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
类型,而不是其他类型,因此语言规范首先不允许它。不要发布链接,包括问题中的代码。欢迎来到StackOverflowa.(type)
不起作用,因为a
不是接口,(type)
只对接口类型的值起作用TypeOf(a)==float64
不起作用,因为TypeOf
返回一个值,而float64
是一个类型,一个值不是一个类型,所以=
没有意义,只有=
有意义。对不起,我的错误是,我试图包含图像,而不是链接,但我现在不知道怎么做(如果上面没有点击,请点击。不要包含图片,也不要包含指向图片或代码的链接。您必须将代码作为文本包含。复制粘贴。谢谢。我希望现在看起来更好。不要发布链接,在问题中包含代码。欢迎使用StackOverflow。a.(键入)
不起作用,因为a
不是接口,(type)
只对接口类型的值起作用。TypeOf(a)==float64
不起作用,因为TypeOf
返回一个值,而float64
是一个类型,一个值不是一个类型,所以=
没有意义,只有=
有意义。对不起,我的错误是,我试图包含图像,而不是链接,但我现在不知道怎么做(如果上面没有点击,请点击。不要包含图像,也不要包含图像或代码的链接。您必须将代码作为文本包含。复制并粘贴。谢谢。我希望现在它看起来更好。)