go中的切片

前言

go有着数组和切片两种方式,数组一旦创建,长度就不可以被修改,但是切片,可以按需自动增长,自动扩容

go中的数组

go中的数组定义

css 复制代码
package main

import "fmt"

func main() {
    var a = [3]int{1, 2, 3}
    a[0] = 1
    a[1] = 2
    a[2] = 3
    fmt.Println(a)
}

这个时候,该数组是不能被扩容的,也就是不能使用append增加数组元素

切片

切片的创建与初始化

可以在创建的时候,不指定长度

go 复制代码
package main

import "fmt"

func main() {
    var a = []int{1, 2, 3}
    fmt.Println(a)
}

或者使用make初始化

go 复制代码
package main

import "fmt"

func main() {
    var a = make([]int, 5)
    fmt.Println(a)
}

也可以使用指定索引方式

css 复制代码
package main

import "fmt"

func main() {
    var a = []int{1: 1, 3: 3, 5: 5}
    fmt.Println(a)
}

输出结果为

可以创建一个空的切片,但是如果数组下标超过切片,那么就会报错

css 复制代码
package main

import "fmt"

func main() {
    var a = []int{}
    fmt.Println(a[0])
}

输出结果为

切片复制

css 复制代码
package main

import "fmt"

func main() {
    var a = []int{1, 2, 3, 4, 5, 6}
    b := a[1:3]
    fmt.Println(b)
}

输出结果为

复制索引1到3的元素, 注意新切片不包含索引为3的元素

css 复制代码
package main

import "fmt"

func main() {
    var a = []int{1, 2, 3, 4, 5, 6}
    b := a[1:]
    fmt.Println(b)
}

输出结果为

从索引1开始复制,到数组结束

css 复制代码
package main

import "fmt"

func main() {
    var a = []int{1, 2, 3, 4, 5, 6}
    b := a[:3]
    fmt.Println(b)
}

输出结果为

这里是从索引0开始复制,然后到索引2

备注

这里需要注意的是,复制出来的切片,修改元素的值,会影响原来切片的值

less 复制代码
package main

import "fmt"

func main() {
    var a = []int{1, 2, 3, 4, 5, 6}
    b := a[1:]
    fmt.Println(b)
    b[0] = 10
    fmt.Println(a)
}

输出结果为

append

可以使用append增加切片数据

css 复制代码
package main

import "fmt"

func main() {
    var a = []int{1, 2, 3, 4, 5, 6}
    a = append(a, 12)
    fmt.Println(a)
}

输出结果为

新增多个元素

css 复制代码
package main

import "fmt"

func main() {
    var a = []int{1, 2, 3, 4, 5, 6}
    a = append(a, 12)
    var b = []int{1, 2, 3}
    a = append(a, b...)
    fmt.Println(a)
}

输出结果为

切片移除元素

可以使用切片移除元素

css 复制代码
package main

import "fmt"

func main() {
    var a = []int{1, 2, 3, 4, 5, 6}
    a = append(a[:1], a[3:]...)
    fmt.Println(a)
}

输出结果为

切片遍历

css 复制代码
package main

import "fmt"

func main() {
    var a = []int{1, 2, 3, 4, 5, 6}
    for i := 0; i < len(a); i++ {
       fmt.Println(a[i])
    }
}

输出结果为

二维切片声明

css 复制代码
package main

import "fmt"

func main() {
    var a = [][]int{{1}, {2}}
    fmt.Println(a)
}

输出结果为

或者使用

go 复制代码
package main

import "fmt"

func main() {
    var a = make([][]int, 3)
    fmt.Println(a)
}

总结

go中的切片可以动态操作数据,还是可以方便使用

相关推荐
源码宝5 小时前
云HIS二次开发实施路径指南
后端·源码·二次开发·saas·云his·医院信息系统
李慕婉学姐7 小时前
Springboot旅游景点管理系统2fj40iq6(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
蓝眸少年CY8 小时前
(第八篇)spring cloud之zuul路由网关
后端·spring·spring cloud
long3168 小时前
弗洛伊德·沃肖算法 Floyd Warshall Algorithm
java·后端·算法·spring·springboot·图论
Loo国昌8 小时前
【LangChain1.0】第一篇:基础认知
后端·python·算法·语言模型·prompt
源代码•宸8 小时前
Golang原理剖析(channel面试与分析)
开发语言·经验分享·后端·面试·golang·select·channel
鹿角片ljp9 小时前
Java多线程编程:从基础到实战的完整指南
java·开发语言·后端
rannn_1119 小时前
【Javaweb学习|Day6】日志技术、多表查询、分页查询及优化(动态SQL)
java·后端·javaweb
qq_124987075310 小时前
基于微信小程序的宠物寄领养系统(源码+论文+部署+安装)
java·spring boot·后端·微信小程序·小程序·宠物·计算机毕业设计
那我掉的头发算什么10 小时前
【SpringBoot】从创建第一个spring项目开始
spring boot·后端·spring