golang 自定义切片追加方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 自定义切片追加方法相关的知识,希望对你有一定的参考价值。

func AppendByte(slice []byte, data ...byte) []byte {
	m := len(slice)
	n := m + len(data)
	if n > cap(slice) { // if necessary, reallocate
		// allocate double what's needed, for future growth.
		newSlice := make([]byte, (n+1)*2)
		copy(newSlice, slice)
		slice = newSlice
	}
	slice = slice[0:n]
	copy(slice[m:n], data)
	return slice
}

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 从切片追加函数“已评估但未使用”中删除 dup ints

Golang数据类型 切片(slice)

Golang basic_leamingM 2023 1

golang数组与切片