golang 分配新切片与修复旧切片之间的差异

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 分配新切片与修复旧切片之间的差异相关的知识,希望对你有一定的参考价值。

package main

import (
	"fmt"
)

type list struct {
	container []int
}
//function that appends to the int slice in the struct
//only works if the new struct is returned
func (l list) add(elem int) list {
	l.container = append(l.container, elem)
	return l
}

//sets a value in the int slice
func (l list) put(key int, val int) {
	l.container[key] = val
}




func main() {
	numlst := list{container: make([]int, 0)}
	numlst = numlst.add(8)
	numlst = numlst.add(7)
	numlst = numlst.add(3)
	fmt.Println(numlst)
	numlst.put(1, 88)
	fmt.Println(numlst)
}

golang数组与切片

golang中坑的慢慢踩!

我们都知道golang中的切片是引用类型,但是在函数中使用append给切片追加元素是行不通的,需要使用切片的指针类型才能增加元素

数组的使用:

package main

import (
    "fmt"
)

func ChangeArr(arr [5]int) {
    arr[0] = 6
}

func ChangeArr2(arr *[5]int) {
    arr[0] = 6
}

func main() {
    a := [5]int{1, 2, 3, 4, 5}
    PrintArr(a)
    ChangeArr(a)
    PrintArr(a)
    ChangeArr2(&a)
    PrintArr(a)
}

func PrintArr(arr [5]int) {

    fmt.Println("
打印数组:")
    for _, v := range arr {
        fmt.Print(v, ",")
    }
}

运行结果:

技术分享图片

 

切片的使用:

package main

import (
    "fmt"
)

func ChangeArr(arr []int) {
    arr[1] = 20
    arr = append(arr, 8) //此处的元素并没有增加到切片
}

func ChangeArr2(arr *[]int) {
    (*arr)[0] = 6          //因为传入的是切片指针,所以所有使用切片的地方都必须是指针类型的切片(这里与数组不同)
    *arr = append(*arr, 7) //此处的元素添加进了切片
}

func main() {
    a := []int{1, 2, 3, 4, 5}
    PrintArr(a)
    ChangeArr(a)
    PrintArr(a)
    ChangeArr2(&a)
    PrintArr(a)
}

func PrintArr(arr []int) {

    fmt.Println("
打印切片:")
    for _, v := range arr {
        fmt.Print(v, ",")
    }
}

运行结果:

技术分享图片

 

以上是关于golang 分配新切片与修复旧切片之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

Golang数组去重&切片去重

golang——常用内建函数

golang基础 —— 切片几种声明方式

golang基础 —— 切片几种声明方式

javascript 切片,拼接和扩散之间的差异

golang数组与切片