【问题标题】:Slice inside struct, cannot use type int64 as int in slice literal在结构中切片,不能在切片文字中使用 int64 类型作为 int
【发布时间】:2021-01-16 20:29:55
【问题描述】:

我首先尝试获取用户输入。

这个阶段的输入应该是一个单一的 uint,但是,如果用户输入是 2,那么我想让我的程序创建 2 个三角形和额外的 2 个用户输入,这些输入的形式为 (int int int float )。例如)3 2 3 0.4。

所以我创建了三角形结构,它有边切片和 Gs,指的是灰度,你现在不必担心灰度。所以这是我的代码:

type triangle struct {
    Sides []int
    Gs    float64
}

func main() {
    var triangles []triangle

    scanner := bufio.NewScanner(os.Stdin)

    var number int
    fmt.Scan(&number)

    i := 0
    for i < number+1 {
        scanner.Scan()
        in := scanner.Text()

        if len(in) != 0 {
        triangleDef := strings.Split(in, " ")
        s1, _ := strconv.ParseInt(triangleDef[0], 10, 32)
        s2, _ := strconv.ParseInt(triangleDef[1], 10, 32)
        s3, _ := strconv.ParseInt(triangleDef[2], 10, 32)
        gs, _ := strconv.ParseFloat(triangleDef[3], 64)
        // fmt.Println(s1, s2, s3, gs)
        triangle := triangle{Sides: []int{s1, s2, s3}, Gs: gs}
        triangles = append(triangles, triangle)
    }
    i++
}

但在第 45 行,triangle := triangle{Sides: []int{s1, s2, s3}, Gs: gs},它不断返回一个错误,指出所有 s1、s2 和 s3 的“无法将 int64 作为 int 在切片文字中键入”。我该怎么做才能让它发挥作用?

【问题讨论】:

  • 你可以使用 strconv.Atoi() 代替 strconv.ParseInt()
  • @ShubhamSrivastava 是的,这也有效。谢谢!

标签: arrays go slice literals


【解决方案1】:

strconv.ParseInt 返回一个int64,它与int 的类型不同。您必须将变量转换为 int 才能将它们放入 ints 的切片中。

triangle := triangle{Sides: []int{int(s1), int(s2), int(s3)}, Gs: gs}

见:https://tour.golang.org/basics/13

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    相关资源
    最近更新 更多