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 相关文章推荐
golang http使用踩过的坑与填坑指南
Apr 27 Golang
go 原生http web 服务跨域restful api的写法介绍
Apr 27 Golang
Golang 使用Map实现去重与set的功能操作
Apr 29 Golang
Golang中interface{}转为数组的操作
Apr 30 Golang
Go语言 go程释放操作(退出/销毁)
Apr 30 Golang
Go 自定义package包设置与导入操作
May 06 Golang
golang 实现并发求和
May 08 Golang
go语言基础 seek光标位置os包的使用
May 09 Golang
golang内置函数len的小技巧
Jul 25 Golang
深入理解go slice结构
Sep 15 Golang
Go获取两个时区的时间差
Apr 20 Golang
Go gorilla/sessions库安装使用
Aug 14 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
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
Yii2中SqlDataProvider用法示例
2016/09/22 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
经验几则 推荐
2006/09/05 Javascript
简约JS日历控件 实例代码
2013/07/12 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
js实现符合国情的日期插件详解
2017/01/19 Javascript
深入理解Angular4中的依赖注入
2017/06/07 Javascript
react-router4 嵌套路由的使用方法
2017/07/24 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
Python enumerate遍历数组示例应用
2008/09/06 Python
python读取二进制mnist实例详解
2017/05/31 Python
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
如何理解委托
2012/01/06 面试题
毕业生怎样写好自荐信
2013/11/11 职场文书
生产车间主管岗位职责
2013/12/28 职场文书
函授自我鉴定范文
2014/02/06 职场文书
出纳员的岗位职责
2014/02/22 职场文书
安全生产年活动总结
2014/08/29 职场文书
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL
【DOTA2】半决赛强强对话~ PSG LGD vs EHOME - DPC 2022 CN REGIONAL FINALS WINTER
2022/04/02 DOTA