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:垃圾回收GC触发条件详解
Apr 24 Golang
go 原生http web 服务跨域restful api的写法介绍
Apr 27 Golang
Golang 空map和未初始化map的注意事项说明
Apr 29 Golang
golang 接口嵌套实现复用的操作
Apr 29 Golang
Golang: 内建容器的用法
May 05 Golang
Go语言应该什么情况使用指针
Jul 25 Golang
Go语言实现Base64、Base58编码与解码
Jul 26 Golang
Go语言读取txt文档的操作方法
Jan 22 Golang
Golang 1.18 多模块Multi-Module工作区模式的新特性
Apr 11 Golang
详解Go语言中Get/Post请求测试
Jun 01 Golang
Go Grpc Gateway兼容HTTP协议文档自动生成网关
Jun 16 Golang
Golang gRPC HTTP协议转换示例
Jun 16 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 会话(session 时间设定)使用入门代码
2008/06/05 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
2016/12/29 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
优雅的elementUI table单元格可编辑实现方法详解
2018/12/23 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
python的常见命令注入威胁
2013/02/18 Python
在Python中操作日期和时间之gmtime()方法的使用
2015/05/22 Python
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
python中upper是做什么用的
2020/07/20 Python
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
怎样创建、运行java程序
2014/08/01 面试题
存储过程的优缺点是什么
2015/01/10 面试题
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
医学生实习自荐信
2013/10/01 职场文书
公司会计主管岗位责任制
2014/03/01 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
上班迟到检讨书
2015/05/06 职场文书
2019年大学生学年自我鉴定!
2019/03/25 职场文书
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python