【发布时间】:2018-10-16 06:03:36
【问题描述】:
我有一个变量,它的值可以是字符串或整数,取决于输入。我使用interface{} 作为类型。如果输入类似于 "50"、"45" 或任何 int 字符串,如何将该变量的值转换为 int。
package main
import "fmt"
import "log"
import "strconv"
func main() {
var limit interface{}
limit = "50"
page := 1
offset := 0
if limit != "ALL" {
log.Println("INSIDE")
offset = limit.(int)*page - limit.(int)
}
fmt.Println(offset)
}
以上代码得到:
interface conversion: interface {} is string, not int
如果我使用这个:
package main
import "fmt"
import "log"
import "strconv"
func main() {
var limit interface{}
limit = "50"
page := 1
offset := 0
if limit != "ALL" {
log.Println("INSIDE")
offset = strconv.Atoi(limit)*page - strconv.Atoi(limit)
}
fmt.Println(offset)
}
我知道了
exit status 2
command-line-arguments
./main.go:14:24: cannot use limit (type interface {}) as type string in argument to strconv.Atoi: need type assertion
./main.go:14:24: multiple-value strconv.Atoi() in single-value context
./main.go:14:51: cannot use limit (type interface {}) as type string in argument to strconv.Atoi: need type assertion
./main.go:14:51: multiple-value strconv.Atoi() in single-value context
如何将该变量的值转换为 int?
【问题讨论】:
-
投反对票,需要解释一下吗?
-
你只是不能。这不是 Go 的工作方式。请参加围棋之旅。在此处停止使用 interface{}。您的限制是示例中的字符串,因此请使用 Atoi 进行转换。您必须获得正确的类型,这是通过了解 Go 的类型系统来完成的。现在学习。请阅读并理解错误消息:它们准确地描述了您做错了什么。
标签: go type-conversion