2 回复
在Go中,包级别作用域的切片初始化可以通过以下几种方式实现:
1. 直接使用字面量初始化
package main
var globalSlice = []int{1, 2, 3, 4, 5}
2. 使用make函数初始化
package main
var globalSlice = make([]int, 0, 10) // 长度0,容量10
3. 使用init函数初始化
package main
var globalSlice []int
func init() {
globalSlice = make([]int, 5)
for i := range globalSlice {
globalSlice[i] = i * 2
}
}
4. 使用函数返回值初始化
package main
var globalSlice = createSlice()
func createSlice() []string {
return []string{"a", "b", "c"}
}
完整示例
package main
import "fmt"
// 方法1:字面量初始化
var slice1 = []int{10, 20, 30}
// 方法2:make初始化
var slice2 = make([]string, 3)
// 方法3:init函数初始化
var slice3 []float64
func init() {
slice3 = make([]float64, 4)
slice3[0] = 1.1
slice3[1] = 2.2
slice3[2] = 3.3
slice3[3] = 4.4
}
// 方法4:函数返回初始化
var slice4 = generateSlice()
func generateSlice() []bool {
return []bool{true, false, true}
}
func main() {
fmt.Println("slice1:", slice1)
fmt.Println("slice2:", slice2)
fmt.Println("slice3:", slice3)
fmt.Println("slice4:", slice4)
}
注意事项
- 包级别变量在程序启动时初始化
- init函数在main函数执行前自动调用
- 全局切片在并发访问时需要注意线程安全问题

