Go语言基础切片的创建及初始化示例详解


Posted in Golang onNovember 17, 2021

概述

切片是一种动态数组

按需自动改变大小

与数组相比,切片的长度可以在运行时修改

语法

一、创建和初始化切片

make

使用内置函数make()创建切片:

var slice []type = make([]type, len, cap) 
//简写: slice := make([]type, len, cap)

字面量

var 变量名 []type

slice1:=[]string{"张三","李四"}  // 长度和容量都是5个元素的字符串切片
slice2 := []int{10, 20, 30} // 长度和容量都是3个元素的整型切片

二、使用切片

赋值和切片

使用[]操作符就可以改变某个元素的,实例如下:

// 创建一个整型切片
// 其容量和长度都是5个元素
slice1:=[]string{"张三","李四","王五","马六","老七"}
// 改变索引为1的元素的值
slice1[1] = "小张三"

使用切片创建切片

// 创建一个整型切片
// 其长度和容量都是5个元素
slice1:=[]string{"张三","李四","王五","马六","老七"}
// 创建一个新切片
// 其长度为3个元素,容量为3个元素
newSlice:=slice1[2:5]

切片增长

使用append向切片增加元素,同时增加切片的长度和容量

// 创建一个整型切片
// 其长度和容量都是5个元素
slice1:=[]string{"张三","李四","王五","马六","老七"}
// 使用原有的容量来分配一个新元素
// 将新元素赋值为60
newSlice:=append(slice1,"我是新来的")

遍历切片

使用 for range 迭代切片

slice1 := []string{"张三", "李四", "王五", "马六", "老七"}
for k, v := range slice1 {
	fmt.Println(k, v)
}

使用 for 循环迭代切片

slice1 := []string{"张三", "李四", "王五", "马六", "老七"}
for i := 0; i < len(slice1); i++ {
	fmt.Println(i,slice1[i])
}

总结

  1. slice 的默认开始位置是0,ar[:n]等价于ar[0:n]
  2. slice是引用类型,是一个指向数组的指针
  3. 不能使用 == 来判断两个slice 是给含有全部相同元素
  4. >判断 slice 是否为空,使用 len(s) == 0 , 而不是 s == nil

总示例

package main
import (
	"fmt"
)
func main() {
	//一、创建切片
	var slice []int = make([]int, 3)
	fmt.Println(slice)
	slice1 := []string{"张三", "李四", "王五", "马六", "老七"}
	fmt.Println(slice1)
	slice2 := []int{10, 20, 30}
	fmt.Println(slice2)
	//二、使用切片
	//使用[]操作符就可以改变某个元素
	slice1[1] = "小张三"
	fmt.Println(slice1)
	//使用切片创建切片【下标是从0开始】
	newSlice := slice1[0:2]
	fmt.Println(newSlice)
	//切片增长
	newSlice = append(slice1, "我是新来的")
	fmt.Println(newSlice)
	// 使用 for range 迭代切片【k:表示下标,v表示值】
	for k, v := range slice1 {
		fmt.Println(k, v)
	}	
	// 使用 for 循环迭代切片
	for i := 0; i < len(slice1); i++ {
		fmt.Println(i,slice1[i])
	}
}

示例一  两个slice是否相等

package main
import (
	"fmt"
	"reflect"
)
func main() {
	//两个slice是否相等
	slice1 := []string{"张三", "李四", "王五", "马六"}
	slice2 := []string{"张三", "李四", "王五", "马六"}
	if reflect.DeepEqual(slice1, slice2) {
		fmt.Println("两个slice相等")
	} else {
		fmt.Println("两个slice不相等")
	}
}

示例二 两个数字是否包含

package main
import (
	"fmt"
	"sort"
	"strings"
)
func main() {
	slice1 := []string{"张三", "李四", "王五", "马六", "老七"}
	fmt.Println(slice1)	
	target := "李四"
	i := sort.Search(len(slice1), func(i int) bool {
		return slice1[i] >= target
	})
	if strings.EqualFold(slice1[i], target) {
		fmt.Println(target, "存在,它的下标是", i)
	} else {
		fmt.Println("不存在", target)
	}
}

以上就是Go语言基础切片的创建及初始化示例详解的详细内容,更多关于Go语言切片的资料请关注三水点靠木其它相关文章!

Golang 相关文章推荐
win10下go mod配置方式
Apr 25 Golang
golang正则之命名分组方式
Apr 25 Golang
Golang 正则匹配效率详解
Apr 25 Golang
go语言求任意类型切片的长度操作
Apr 26 Golang
golang中切片copy复制和等号复制的区别介绍
Apr 27 Golang
golang 实现Location跳转方式
May 02 Golang
解决Golang中goroutine执行速度的问题
May 02 Golang
golang日志包logger的用法详解
May 05 Golang
使用golang编写一个并发工作队列
May 08 Golang
Golang 字符串的常见操作
Apr 19 Golang
Golang并发工具Singleflight
May 06 Golang
Go语言基础map用法及示例详解
Nov 17 #Golang
Go语言基础函数基本用法及示例详解
Nov 17 #Golang
golang中的struct操作
Nov 11 #Golang
Go 语言中 20 个占位符的整理
Oct 16 #Golang
Golang中channel的原理解读(推荐)
Oct 16 #Golang
Go语言并发编程 sync.Once
Oct 16 #Golang
Go 通过结构struct实现接口interface的问题
Oct 05 #Golang
You might like
php数字转汉字代码(算法)
2011/10/08 PHP
PHP延迟静态绑定示例分享
2014/06/22 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
ThinkPHP行为扩展Behavior应用实例详解
2014/07/22 PHP
js prototype截取字符串函数
2010/04/01 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
javascript原始值和对象引用实例分析
2015/04/25 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
vue生成随机验证码的示例代码
2017/09/29 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
python排序方法实例分析
2015/04/30 Python
用Python中的字典来处理索引统计的方法
2015/05/05 Python
深入分析python中整型不会溢出问题
2018/06/18 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
Python @property装饰器原理解析
2020/01/22 Python
CSS3 透明色 RGBA使用介绍
2013/08/06 HTML / CSS
北美领先的牛仔品牌:Buffalo David Bitton
2017/05/22 全球购物
C#公司笔试题
2014/03/28 面试题
小学开学寄语
2014/01/19 职场文书
体育节口号
2014/06/19 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript
关于springboot配置druid数据源不生效问题(踩坑记)
2021/09/25 Java/Android
python实现学生信息管理系统(面向对象)
2022/06/05 Python
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL