如何在Go中创建非固定长度切片

如何在Go中创建非固定长度切片,go,slice,Go,Slice,我是围棋新手,我有两个问题: 1假设我们有一个用C#编写的简单for循环: static void Main(字符串[]args) { 列表=新列表(); 对于(int i=1;i

我是围棋新手,我有两个问题:

1假设我们有一个用C#编写的简单for循环:

static void Main(字符串[]args)
{
列表=新列表();
对于(int i=1;i<10000;i++)
{
如果(i%5==0&&i%3==0)
{
列表.添加(i);
}
}
foreach(列表中的整型素数)
{
系统控制台写入线(主);
}
Console.ReadKey();
}
如果我想在围棋中做同样的动作,我就必须使用切片。但如何做到这一点呢

  • 以下哪种变量声明形式更常用: 简式(s:=3) 或 长(var s int=3)
  • 1) 使用以下内容创建切片:

    list := make([]int, 0)
    
    list = append(list, i)
    
    将以下内容附加到切片:

    list := make([]int, 0)
    
    list = append(list, i)
    

    2) 我认为你的第二个问题没有单一的答案。这取决于变量的使用方式和位置。

    在Go数组中有其位置,但它们有点不灵活,所以在Go代码中不太常见。然而,切片无处不在。它们以阵列为基础,提供强大的功能和便利

    切片不是固定长度的。它是灵活的

    您可以按如下方式声明一个空切片

    list := make([]int, 0)
    list := []int{}
    var list []int
    
    下面是如何在go中更正上述函数

    package main
    
    import (
        "fmt"
    )
    
    
    func main() {
            var list []int
            for i:=0;i<10000;i++ {
                if i %5 == 0 && i % 3 == 0 {
                    list = append(list, i)
                }
            } 
            for _, val := range list {
                fmt.Println(val)
            }
    }
    
    主程序包
    进口(
    “fmt”
    )
    func main(){
    变量列表[]int
    对于i:=0;对于2,i
    我使用“:=”因为我想用另一个变量获得相同的类型,并使用其他变量
    喜欢
    var foo int=3//我想要一个int变量
    
    bar:=foo//我想要与foo相同类型的bar

    切片在Go中不是固定长度的。这是我见过的关于切片的最好文章:在变量声明样式上,我在将变量初始化为某个值时使用短格式,但在声明稍后将设置的变量(或声明包变量时)时使用长格式(即,在任何块之外),只能使用
    var
    )@seeker已经有三个答案了,请检查,如果其中任何一个有助于接受答案,请在此对答案做出明智的评论missing@seeker选中此选项,如果这对您有帮助,请接受答案。同样重要的是,如果您已经知道要创建的切片的长度,则应在调用
    make([]int,150)
    。这对编译器来说效率更高,每次追加到支持数组的边界之外时,编译器都必须创建一个新的支持数组。通过在
    make
    调用中指定长度(在本例中为150),您的切片将包含每个索引(最多150个)的所有零d值。然后,您可以分配新值,如:
    list[4]=123
    ,而不是调用
    append
    @daltonclaybrook绝对,这里我试图给出一个示例,以便他可以开始使用切片