Golang中 的数组与切片

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Gpwner/article/details/53053787

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")
}
展开阅读全文

没有更多推荐了,返回首页