iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >go语言中append()如何使用
  • 654
分享到

go语言中append()如何使用

2023-07-05 00:07:47 654人浏览 独家记忆
摘要

本篇内容介绍了“Go语言中append()如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在go语言中,append()函数用于为切片

本篇内容介绍了“Go语言中append()如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在go语言中,append()函数用于为切片动态添加元素,可以将元素添加到切片末尾并返回结果;调用append函数必须用原来的切片变量接收返回值,追加一个元素可使用“slice = append(slice,elem1,elem2)”语句,追加一个切片可使用“slice = append(slice,anotherSlice...)”语句。

Go语言的内建函数 append() 可以为切片动态添加元素。

要点:

  • append()用来将元素添加到切片末尾并返回结果。

  • 调用append函数必须用原来的切片变量接收返回值

  • append追加元素,如果slice还有容量的话,就会将新的元素放在原来slice后面的剩余空间里,当底层数组装不下的时候,Go就会创建新的底层数组来保存这个切片,slice地址也随之改变。

  • 分配了新的地址后,再把原来slice中的元素逐个拷贝到新的slice中,并返回。

(1) append()追加一个元素

slice = append(slice,elem1,elem2)

append括号内,第一个参数slice后可以加多个参数。

package  mainimport "fmt"//切片进阶操作 func main(){//append()为切片追加元素s1 := []string {"火鸡面","辛拉面","汤达人"}fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d\n",s1,len(s1),cap(s1))//调用append函数必须用原来的切片变量接收返回值s1 = append(s1,"小当家") //append追加元素,原来的底层数组装不下的时候,Go就会创建新的底层数组来保存这个切片  fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d\n",s1,len(s1),cap(s1))//cap增加两倍}

输出结果:

s1=[火鸡面 辛拉面 汤达人] len(s1)=3 cap(s1)=3s1=[火鸡面 辛拉面 汤达人 小当家] len(s1)=4 cap(s1)=6

(2)append()追加一个切片

slice = append(slice,anotherSlice...)

append括号内只能有两个参数,一个切片,另一个追加的切片。

package  mainimport "fmt"//切片进阶操作 func main(){//append()为切片追加元素s1 := []string {"火鸡面","辛拉面","汤达人"}fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d\n",s1,len(s1),cap(s1))//调用append函数必须用原来的切片变量接收返回值s1 = append(s1,"小当家") //append动态追加元素,原来的底层数组容纳不下足够多的元素时,切片就会开始扩容,Go底层数组就会把底层数组换一个fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d\n",s1,len(s1),cap(s1))//调用append添加一个切片s2 := []string{"脆司令","圣斗士"}s1 = append(s1,s2...)//...表示拆开切片,再添加fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d",s1,len(s1),cap(s1))}

输出结果:

s1=[火鸡面 辛拉面 汤达人] len(s1)=3 cap(s1)=3s1=[火鸡面 辛拉面 汤达人 小当家] len(s1)=4 cap(s1)=6s1=[火鸡面 辛拉面 汤达人 小当家 脆司令 圣斗士] len(s1)=6 cap(s1)=6

(3)使用make创建切片时,用append()添加元素常犯错误

package mainimport "fmt"func main(){var a = make([]int, 5, 10)fmt.Println(a)fmt.Printf("%p\n",a)for i := 0; i <10; i++ {a = append(a,i)    //%p 打印切片地址fmt.Printf("%v,%p,cap(a):%d\n",a,a,cap(a))} }

输出结果:

[0 0 0 0 0]0xc0000180a0[0 0 0 0 0 0],0xc0000180a0,cap(a):10[0 0 0 0 0 0 1],0xc0000180a0,cap(a):10[0 0 0 0 0 0 1 2],0xc0000180a0,cap(a):10[0 0 0 0 0 0 1 2 3],0xc0000180a0,cap(a):10[0 0 0 0 0 0 1 2 3 4],0xc0000180a0,cap(a):10[0 0 0 0 0 0 1 2 3 4 5],0xc00007c000,cap(a):20[0 0 0 0 0 0 1 2 3 4 5 6],0xc00007c000,cap(a):20[0 0 0 0 0 0 1 2 3 4 5 6 7],0xc00007c000,cap(a):20[0 0 0 0 0 0 1 2 3 4 5 6 7 8],0xc00007c000,cap(a):20[0 0 0 0 0 0 1 2 3 4 5 6 7 8 9],0xc00007c000,cap(a):20

注意:

(1)make创建切片,有默认长度,就有默认值。

append()再添加元素,是在默认值后添加,而不是覆盖默认值。

(2)当元素超过make创建时设的容量10时,原底层数组装不下,就会换一段新的连续的地址来存放元素。

(4)利用append删除元素

Go中没有提供专门删除元素的函数,而是通过切片本身的特点来删除元素。

即以被删除元素为分界点,再利用append将前后两个部分的内存重新连接起来。

例如

如果要在切片s中删除一个元素,被删除的元素索引为index

则删除过程为

s = append ( s[ :index ], s[ index+1: ] )

将前后两个部分重新连接起来,实质上就是将删除点的元素前移,将内存重新连接起来。

package mainimport "fmt"func main(){a1 := [...]int{1,2,5,3,78,9,4,9,23,32}s1 := a1[:] //得到切片fmt.Println(s1)//删除索引为4的78s1 = append(s1[:4],s1[5:]...)fmt.Println(s1)fmt.Println(a1)}

输出结果:

[1 2 5 3 78 9 4 9 23 32][1 2 5 3 9 4 9 23 32][1 2 5 3 9 4 9 23 32 32]

理解后可以试着猜猜下面的程序输出是什么:

package mainimport "fmt"func main(){a1 := [...]int{1,2,5,3,78,9,4,9,23,32}s1 := a1[:] //得到切片fmt.Println(s1)//删掉索引为2和3的5,3s1 = append(s1[:2],s1[4:]...)fmt.Println(s1)fmt.Println(a1)}

正确结果:

[1 2 5 3 78 9 4 9 23 32][1 2 78 9 4 9 23 32][1 2 78 9 4 9 23 32 23 32]

“go语言中append()如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: go语言中append()如何使用

本文链接: https://www.lsjlt.com/news/348587.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • go语言中append()如何使用
    本篇内容介绍了“go语言中append()如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在go语言中,append()函数用于为切片...
    99+
    2023-07-05
  • Go语言中Once如何使用
    Go语言中Once如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。sync.Once是sync包中的一个对象,它只有一个...
    99+
    2024-04-02
  • Go语言中copy()如何使用
    这篇文章主要介绍了Go语言中copy()如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言中copy()如何使用文章都会有所收获,下面我们一起来看看吧。在Go语言中,copy()用于复制切片,可以将...
    99+
    2023-07-05
  • go语言中return如何使用
    本篇内容介绍了“go语言中return如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在go语言中,return关键字用于终止函数并可...
    99+
    2023-07-05
  • Go语言中error如何使用
    这期内容当中小编将会给大家带来有关Go语言中error如何使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. error介绍error其实就是实现了Error()函数...
    99+
    2024-04-02
  • go语言中的WaitGroups如何使用
    这篇文章主要讲解了“go语言中的WaitGroups如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“go语言中的WaitGroups如何使用”吧!什么是WaitGroups?WaitG...
    99+
    2023-07-05
  • Go语言中flag包如何使用
    今天就跟大家聊聊有关Go语言中flag包如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。这一章所学的任何代码,都要编译成.exe才能跑,禁止右...
    99+
    2024-04-02
  • Go语言中的sync.Mutex如何使用
    这篇文章主要介绍了Go语言中的sync.Mutex如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言中的sync.Mutex如何使用文章都会有所收获,下面我们一起来看看吧。背景多个协程操作中经常出现...
    99+
    2023-07-05
  • 如何在Go语言中使用NumPy?
    NumPy是一个Python库,它提供了高效的多维数组对象以及用于处理这些数组的工具。它是科学计算和数据分析中的重要组成部分。但是,如果您正在使用Go语言进行开发,您可能会感到困惑,因为Go语言并没有内置NumPy库。在本文中,我们将讨论...
    99+
    2023-08-28
    numpy 对象 教程
  • go语言中的const如何使用
    这篇文章主要讲解了“go语言中的const如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“go语言中的const如何使用”吧!在go语言中,const关键字可定义常量,用于存储不会改变...
    99+
    2023-07-05
  • Go语言包如何使用
    本篇内容介绍了“Go语言包如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!包(package)是多个Go源码的集合,是一种高级的代码复...
    99+
    2023-07-04
  • Go语言sync.Cond如何使用
    本篇内容介绍了“Go语言sync.Cond如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基本使用1 定义sync.Cond是Go语言...
    99+
    2023-07-05
  • 如何在Go语言中使用面量?
    在 go 中使用接口包括:定义一个接口,包含方法签名。实现接口,为方法提供实现。将类型转换为接口类型并调用其方法。接口促进代码重用、测试方便和可扩展性。 如何在 Go 中使用接口? 接...
    99+
    2024-04-03
    go语言 面量
  • Go语言中如何使用结构体
    这篇文章将为大家详细讲解有关Go语言中如何使用结构体,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。结构体结构体是 go 语言中一个比较重要的概念,在 c  语言中也有类似的东西。由...
    99+
    2023-06-15
  • 如何在Go语言中使用数组?
    Go语言是一种高效、简洁的编程语言,它具有很多强大的特性,其中之一就是数组。数组是一种非常基础的数据结构,它可以让我们存储多个相同类型的值,并且可以通过下标来访问它们。在本文中,我们将详细介绍如何在Go语言中使用数组。 一、声明数组 在Go...
    99+
    2023-07-19
    关键字 框架 数组
  • go语言中build命令如何使用
    这篇文章主要介绍了go语言中build命令如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go语言中build命令如何使用文章都会有所收获,下面我们一起来看看吧。在go语言中,“go build”命令主要...
    99+
    2023-07-05
  • 如何在Go语言中使用函数?
    Go语言是一种现代化的编程语言,它拥有高效的并发性能和强大的编译能力,越来越多的程序员开始使用它来开发软件。在Go语言中,函数是一种非常重要的概念,本篇文章将会介绍如何在Go语言中使用函数。 一、函数的定义 在Go语言中,函数的定义格式如下...
    99+
    2023-08-13
    数据类型 教程 函数
  • Go语言中如何使用NumPy对象?
    NumPy是一个用于数值计算的Python库,它提供了高效的多维数组对象和各种派生对象(如掩码数组和矩阵),并且包含了大量的数学函数库,可以方便地完成各种数值计算任务。虽然NumPy是一个Python库,但是我们也可以在Go语言中使用Nu...
    99+
    2023-08-28
    numpy 对象 教程
  • Go语言中结构体如何使用
    本篇文章为大家展示了Go语言中结构体如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。结构体Go语言中的基本数据类型可以表示一些事物的基本属性,但是当我们想表达...
    99+
    2024-04-02
  • Go语言中goroutine和WaitGroup如何使用
    本篇内容主要讲解“Go语言中goroutine和WaitGroup如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言中goroutine和WaitGroup如何使用”吧!Go语言中g...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作