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

How to create unfixed length slice in Go

我是 Go 新手,有 2 个问题:

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

static void Main(string[] args)
    {
        List<int> list = new List<int>();
        for (int i = 1; i < 10000; i++)
        {
            if (i % 5 == 0 && i % 3 == 0)
            {
                list.Add(i);
            }
        }
        foreach (int prime in list)
        {
            System.Console.WriteLine(prime);
        }
        Console.ReadKey();
    }

如果我想在 Go 中做同样的事情,我将不得不使用切片。但是怎么做呢?

  1. 哪种变量声明形式更常用: 短格式 (s:= 3) 要么 长 (var s int = 3)?

1) 创建切片:

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)
        }
}

这里有戏linkplay

对于 2)

var foo int = 3 // I want a int variable
bar := foo // bar will be the same type with foo