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 相关文章推荐
Go Gin实现文件上传下载的示例代码
Apr 02 Golang
Golang二维切片初始化的实现
Apr 08 Golang
golang中实现给gif、png、jpeg图片添加文字水印
Apr 26 Golang
golang import自定义包方式
Apr 29 Golang
Golang中interface{}转为数组的操作
Apr 30 Golang
golang elasticsearch Client的使用详解
May 05 Golang
go xorm框架的使用
May 22 Golang
手把手教你导入Go语言第三方库
Aug 04 Golang
golang 语言中错误处理机制
Aug 30 Golang
Golang 并发下的问题定位及解决方案
Mar 16 Golang
Golang 并发编程 SingleFlight模式
Apr 26 Golang
GoFrame基于性能测试得知grpool使用场景
Jun 21 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
Thinkphp中import的几个用法详细介绍
2014/07/02 PHP
php 删除cookie方法详解
2014/12/01 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
thinkphp5使用无限极分类
2019/02/18 PHP
动态控制Table的js代码
2007/03/07 Javascript
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
javaScript基础详解
2017/01/19 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
jQuery Layer弹出层传值到父页面的实现代码
2017/08/17 jQuery
基于Vue生产环境部署详解
2017/09/15 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
实现vuex原理的示例
2020/10/21 Javascript
Python迭代器和生成器定义与用法示例
2018/02/10 Python
python微信好友数据分析详解
2018/11/19 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
python matplotlib拟合直线的实现
2019/11/19 Python
py-charm延长试用期限实例
2019/12/22 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
.NET常见笔试题集
2012/12/01 面试题
法人代表任命书范本
2014/06/05 职场文书
电子商务专业求职信
2014/07/10 职场文书
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python
MySQL学习之基础操作总结
2022/03/19 MySQL