Golang中 的数组与切片

1.数组
数组不用多说,和C++、JAVA等语言的数组是差不多的。我就不多说了,下面是数组在golang中的基本操作吧!
数组有3种创建方式:
[length]Type 、[N]Type{value1, value2, … , valueN}、[…]Type{value1, value2, … , valueN}
- 全局或者本地都可以声明

package main

import "fmt"

var arr1 = [6]int{1, 2, 3, 5}   //声明的同时赋值
var arr2 [5]int                 //先声明,后赋值
var arr3 = []int{1, 2, 3, 5}    //不指明数组的长度
var arr4 = [...]int{1, 2, 3, 5} //用...(三个点,多一个不行,少一个也不行)代替数组的长度
func main() {
    fmt.Println("*************************")
    for i, x := range arr1 {
        fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
    }
    fmt.Println("*************************")
    arr2[2] = 8 //赋值
    for i, x := range arr2 {
        fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
    }
    fmt.Println("*************************")
    for i, x := range arr3 {
        fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
    }
    fmt.Println("*************************")
    for i, x := range arr4 {
        fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
    }
}

  • 局部,不使用var
package main

import "fmt"

func main() {

    arr1 := [6]int{1, 2, 3, 5} //声明的同时赋值
    fmt.Println("*************************")
    for i, x := range arr1 {
        fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
    }
    fmt.Println("*************************")

}

值得注意 !的是这种数组的声明方式是不可以用在全局数组的声明的,否则编译器会报错误

2.切片
切片有四种声明方式
1)make ( []Type ,length, capacity )

2) make ( []Type, length)

3) []Type{}

4) []Type{value1 , value2 , … , valueN }

package main

import "fmt"

func main() {
    slice1 := make([]int, 5, 8)
    slice2 := make([]int, 9)
    slice3 := []int{}
    slice4 := []int{1, 2, 3, 4, 5}
    fmt.Println(slice1)
    fmt.Println(slice2)
    fmt.Println(slice3)
    fmt.Println(slice4)
}
  • 切片(slice)是一个引用类型,他总是指向一个底层数组。
  • 切片的声明可以像数组一样,但是不需要长度。
  • 切片可以从一个数组或者一个已经存在切片中再次声明。
package main

import "fmt"

func main() {
    // 声明一个数组
    var array = []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"}

    // 声明两个slice
    var aSlice, bSlice []string

    // 演示一些简便操作
    //aSlice = array[:3] // 等价于aSlice = array[0:3] aSlice包含元素: a,b,c
    aSlice = array[5:] // 等价于aSlice = array[5:10] aSlice包含元素: f,g,h,i,j
    //aSlice = array[:] // 等价于aSlice = array[0:10] 这样aSlice包含了全部的元素

    // 从slice中获取slice
    //aSlice = array[3:7]  // aSlice包含元素: d,e,f,g,len=4,cap=7
    //bSlice = aSlice[1:3] // bSlice 包含aSlice[1], aSlice[2] 也就是含有: e,f
    //bSlice = aSlice[:3] // bSlice 包含 aSlice[0], aSlice[1], aSlice[2] 也就是含有: d,e,f
    bSlice = aSlice[0:5] // 对slice的slice可以在cap范围内扩展,此时bSlice包含:d,e,f,g,h
    //bSlice = aSlice[:]   // bSlice包含所有aSlice的元素: d,e,f,g
    fmt.Println("*************************")
    for i := 0; i < len(aSlice); i++ {
        fmt.Print(aSlice[i])
    }
    fmt.Println("\n*************************\n")
    for i := 0; i < len(bSlice); i++ {
        fmt.Print(bSlice[i])
    }
    fmt.Println("\n*************************\n")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值