代码之家  ›  专栏  ›  技术社区  ›  0xsegfault

为什么我的阵列没有增长?

  •  -2
  • 0xsegfault  · 技术社区  · 7 年前

    我试图在数组中生成3 | | 5的因子。

    package main
    
    import "fmt"
    
    func main() {
    
        i := 0
    
        for i < 1000 {
            var nums []int
    
            if i%3 == 0 || i%5 == 0 {
                nums := append(nums, i)
                fmt.Println(nums)
            }
    
            i++
    
        }
    }
    

    不幸的是,在nums[0]上过度写入值并不像计划的那样。这里是我的终端输出的最后几个值。

    [981]
    [984]
    [985]
    [987]
    [990]
    [993]
    [995]
    [996]
    [999]
    

    我做错什么了?

    也尝试过:

    var nums []int // initialize the slice outside for loop
    for i < 1000 {
        if i%3 == 0 || i%5 == 0 {
            nums = append(nums, i) // append to the slice outside loop not create a new one using short variable declaration
            fmt.Println(nums)
        }
        i++
    }
    

    但得到了同样的结果

    1 回复  |  直到 7 年前
        1
  •  5
  •   Himanshu    7 年前

    这是因为您正在创建一个新变量 []int 切片而不是附加到在if条件之外创建的。创建 []内景

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        i := 0
        var nums []int
        for i < 1000 {
            if i%3 == 0 || i%5 == 0 {
                nums = append(nums, i)
            }
            i++
        }
        fmt.Println(nums)
        fmt.Println(len(nums), cap(nums)) // check for length and capacity of slice to know the size of slice after appending all data
    }
    

    工作代码 Go playground