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使用协程交替打印字符
Apr 29 Golang
go语言中fallthrough的用法说明
May 06 Golang
goland 设置project gopath的操作
May 06 Golang
Goland使用Go Modules创建/管理项目的操作
May 06 Golang
解决golang 关于全局变量的坑
May 06 Golang
go语言使用Casbin实现角色的权限控制
Jun 26 Golang
go开发alertmanger实现钉钉报警
Jul 16 Golang
Golang并发操作中常见的读写锁详析
Aug 30 Golang
golang连接MySQl使用sqlx库
Apr 14 Golang
Go语言 详解net的tcp服务
Apr 14 Golang
Golang 实现 WebSockets 之创建 WebSockets
Apr 24 Golang
Go web入门Go pongo2模板引擎
May 20 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
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
非常实用的php验证码类
2016/05/15 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
js 触发select onchange事件代码
2014/03/20 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
JS实现复制内容到剪贴板功能
2017/02/05 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
web前端vue之CSS过渡效果示例
2018/01/10 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中的高级数据结构详解
2015/03/27 Python
python try except 捕获所有异常的实例
2018/10/18 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
历史学专业毕业生求职信
2013/09/27 职场文书
毕业生个人的求职信范文
2013/12/03 职场文书
十佳青年个人事迹材料
2014/01/28 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
正规欠条模板
2015/07/03 职场文书
二十年同学聚会致辞
2015/07/28 职场文书
看古人们是如何赞美老师的?
2019/07/08 职场文书
springboot 多数据源配置不生效遇到的坑及解决
2021/11/17 Java/Android