在结构内切片,不能在切片文字中将int64类型用作int

问题描述

我正在尝试首先获得用户输入。

此阶段的输入应为单个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],32)
        s3,_ := strconv.ParseInt(triangleDef[2],32)
        gs,_ := strconv.ParseFloat(triangleDef[3],64)
        // fmt.Println(s1,s2,s3,gs)
        triangle := triangle{Sides: []int{s1,s3},Gs: gs}
        triangles = append(triangles,triangle)
    }
    i++
}

但是在第45行triangle := triangle{Sides: []int{s1,Gs: gs}处,它对于所有s1,s2和s3始终返回错误,指出“无法在切片文字中将int64键入int”。我应该怎么做才能使其正常工作?

解决方法

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

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

请参阅:https://tour.golang.org/basics/13