设为首页 加入收藏

TOP

Golang: 数组和切片(二)
2018-12-14 12:08:46 】 浏览:431
Tags:Golang: 切片
.Println(a)
10 }

运行结果是:

[a b c d e]

这里有点类似ES6的写法

var arr = [1, 2, 3];

var arr1 = [...arr, 4, 5, 6]; 

切片是数组的一种外层表示,所以我们每次修改切片,最终都会将修改落到数组上。

但是这时候再修改切边,修改就不会再反应到原来的数组上。

make创建切片

我们还可以使用函数make来创建切片。func make([]T, len, cap) []T,其中cap参数是可选的。

1 package main
2 
3 import "fmt"
4 
5 func main() {
6     a := make([]int, 3)
7     fmt.Println(a)
8 
9 }

 

切片和数组作为参数传递

 

先上两段代码,第一段:

package main

import "fmt"

func main() {
    a := []string{"a", "b", "c", "d", "e"}
    fmt.Println("before call function:", a)
    changeZeroElementA(a)
    fmt.Println("after call function:", a)

    b := [5]string{"a", "b", "c", "d", "e"}
    fmt.Println("before call function:", b)
    changeZeroElementB(b)
    fmt.Println("after call function:", b)
}

func changeZeroElementA(arr []string) {
    //arr = []string{"X", "Y"}
    arr[0] = "changed"
}
func changeZeroElementB(arr [5]string) {
    arr[0] = "changed"
}

结果是:

before call function: [a b c d e]
after call function: [changed b c d e]
before call function: [a b c d e]
after call function: [a b c d e]

第二段:

package main

import "fmt"

func main() {
    a := []string{"a", "b", "c", "d", "e"}
    fmt.Println("before call function:", a)
    changeZeroElementA(a)
    fmt.Println("after call function:", a)

    b := [5]string{"a", "b", "c", "d", "e"}
    fmt.Println("before call function:", b)
    changeZeroElementB(b)
    fmt.Println("after call function:", b)
}

func changeZeroElementA(arr []string) {
    arr = []string{"X", "Y"}
    arr[0] = "changed"
}
func changeZeroElementB(arr [5]string) {
    arr[0] = "changed"
}

运行结果:

1 before call function: [a b c d e]
2 after call function: [a b c d e]
3 before call function: [a b c d e]
4 after call function: [a b c d e]

看到这里是不是有些奇怪,其实go里面一切都是值传递。这里有全方面的解释:https://stackoverflow.com/questions/39993688/are-golang-slices-pass-by-value

切片是数组的一种外层表示,所以我们每次修改切片,最终都会将修改落到数组上。

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Golang:sync.Map 下一篇滑动窗口最大值的golang实现

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目