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

目录
  • 概述
  • 语法
    • 一、创建和初始化切片
      • make
      • 字面量
    • 二、使用切片
      • 赋值和切片
      • 切片增长
      • 遍历切片
  • 总结
  • 总示例
  • 示例一  两个slice是否相等
  • 示例二 两个数字是否包含

概述

切片是一种动态数组

按需自动改变大小

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

语法

一、创建和初始化切片

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语言切片的资料请关注我们其它相关文章!

(0)

相关推荐

  • Go语言基础函数基本用法及示例详解

    目录 概述 语法 函数定义 一.函数参数 无参数无返回 有参数有返回 函数值传递 函数引用传递 可变参数列表 无默认参数 函数作为参数 二.返回值 多个返回值 跳过返回值 匿名函数 匿名函数可以赋值给一个变量 为函数类型添加方法 总结 示例 概述 函数是基本的代码块,用于执行一个任务 语法 函数定义 func 函数名称( 参数列表] ) (返回值列表]){ 执行语句 } 一.函数参数 无参数无返回 func add() 有参数有返回 func add(a, b int) int 函数值传递 fu

  • Go语言基础map用法及示例详解

    目录 概述 语法 声明和初始化 读取 删除 遍历 总结 示例 概述 map是基于key-value键值对的无序的集合 Go语言中的map是引用类型 必须初始化才能使用. 语法 声明和初始化 配合make使用,否则是nil var map[KeyType]ValueType //KeyType:表示键的类型 //ValueType:表示键对应的值的类型 make(map[KeyType]ValueType, [cap]) //cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map

  • Go语言字符串基础示例详解

    目录 包含 Contains(s,substr string) bool ContainsAny(s, chars string) bool 统计 Count(s, substr string) int 比较 EqualFold(s, t string) bool HasPrefix(s, prefix string) bool HasSuffix(s, suffix string) bool 分割 Fields(s string) []string 下标 Index(s, sep string

  • golang 切片的三种使用方式及区别的说明

    概念 切片(slice)是建立在数组之上的更方便,更灵活,更强大的数据结构.切片并不存储任何元素而只是对现有数组的引用. 三种方式及细节案例 ①定义一个切片,然后让切片去引用一个已经创建好的数组 package main import ( "fmt" ) func main() { var arr [5]int = [...]int {1, 2, 3, 4, 5} var slice = arr[1:3] fmt.Println("arr=", arr) fmt.P

  • golang常用手册之切片(Slice)原理

    切片,这是一个在go语言中引入的新的理念.它有一些特征如下: 对数组抽象 数组长度不固定 可追加元素 切片容量可增大 容量大小成片增加 我们先把上面的理念整理在这里,但是实际的还是要撸码来解决问题. 定义或申明切片 首先我们看看申明切片: var sliceName []type 定义完成后,我们需要定义切片: sliceName = make([]type, len) 也可以适当简写: sliceName := make([]type, len) 在上面的例子中,我们申明了一个切片,我们现在先

  • Go语言基础结构体用法及示例详解

    目录 概述 语法 结构体定义的三种形式 第一种[基本的实例化] 第二种[指针类型的结构体] 第三种[取结构体的地址实例化,通过&的操作] 初始化结构体 键值对初始化结构体 值列表填充结构体 匿名结构体 访问结构体成员 结构体作为函数参数 结构体指针 添加结构体方法 总结 示例 概述 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合 语法 定义结构体[标识自定义结构体的名称,在同一个包内不能重复] type 结构名 struct { 字段1: 字段1的值, 字段2: 字段2的值, ...

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

    目录 概述 语法 一.创建和初始化切片 make 字面量 二.使用切片 赋值和切片 切片增长 遍历切片 总结 总示例 示例一  两个slice是否相等 示例二 两个数字是否包含 概述 切片是一种动态数组 按需自动改变大小 与数组相比,切片的长度可以在运行时修改 语法 一.创建和初始化切片 make 使用内置函数make()创建切片: var slice []type = make([]type, len, cap) //简写: slice := make([]type, len, cap) 字面

  • Go语言基础变量的声明及初始化示例详解

    目录 一.概述 二.声明变量 三.编译器推导类型的格式[一定要赋值] 四.短变量声明并初始化 五.匿名变量--没有名字的变量 六.注意 七.案例 一.概述 变量的功能是存储用户的数据 二.声明变量 Go语言的每一个变量都拥有自己的类型,必须经过声明才能开始用 变量的声明格式: var <变量名称> [变量类型] var a int //声明一个整型类型的变量,可以保存整数数值 var b string //声明一个字符串类型的变量 var c float32 //声明一个32位浮点切片类型的变

  • Go语言基础if条件语句用法及示例详解

    目录 概述 语法 格式规则 概述 条件语句需要开发者通过指定一个或多个条件 并通过测试条件是否为 true 来决定是否执行指定语句 并在条件为 false 的情况再执行另外的语句. 语法 package main func main() { //第一种格式 if 条件表达式 { 语句1 } //第二种格式 if 初始化表达式; 条件表达式 { 语句1 } //第三种格式 if 初始化表达式; 条件表达式 { 语句1 }else{ 语句2 } //第四种格式 if 初始化表达式; 条件表达式 {

  • Go语言基础go build命令用法及示例详解

    目录 go build 一个Go项目在GOPATH下,会有如下三个目录 使用: 注意: go build 1. 用于测试编译多个包或一个main包 2. build命令编译包丢弃非main包编译结果,只是检查是否能够被编译 3. 保留main包编译结果 一个Go项目在GOPATH下,会有如下三个目录 bin存放编译后的可执行文件 pkg存放编译后的包文件 src存放项目源文件 一般,bin和pkg目录可以不创建,go命令会自动创建(如 go install),只需要创建src目录即可. 使用:

  • Go语言基础go doc命令用法及示例详解

    目录 go doc 一.使用go doc命令在终端查看 go doc package go doc package/subpackage go doc package function 二.是使用浏览器查看的方式 go doc 为我们提供了快速生成文档以及查看文档的工具,让我们可以很容易的编写查看文档 一.使用go doc命令在终端查看 go doc package 获取包的文档注释 例如: go doc fmt 会显示使用 godoc 生成的 fmt 包的文档注释. go doc packag

  • Go语言基础语法之结构体及方法详解

    结构体类型可以用来保存不同类型的数据,也可以通过方法的形式来声明它的行为.本文将介绍go语言中的结构体和方法,以及"继承"的实现方法. 结构体类型 结构体类型(struct)在go语言中具有重要地位,它是实现go语言面向对象编程的重要工具.go语言中没有类的概念,可以使用结构体实现类似的功能,传统的OOP(Object-Oriented Programming)思想中的继承在go中可以通过嵌入字段的方式实现. 结构体的声明与定义: // 使用关键字 type 和 struct 定义名字

  • Go语言学习教程之结构体的示例详解

    目录 前言 可导出的标识符 嵌入字段 提升 标签 结构体与JSON相互转换 结构体转JSON JSON转结构体 练习代码步骤 前言 结构体是一个序列,包含一些被命名的元素,这些被命名的元素称为字段(field),每个字段有一个名字和一个类型. 结构体用得比较多的地方是声明与数据库交互时需要用到的Model类型,以及与JSON数据进行相互转换.(当然,项目中任何需要多种数据结构组合在一起使用的地方,都可以选择用结构体) 代码段1:声明一个待办事项的Model类型: type Todo struct

  • go语言reflect.Type 和 reflect.Value 应用示例详解

    目录 一.使用 reflect.Type 创建实例 二.使用 reflect.Value 调用函数 一.使用 reflect.Type 创建实例 在通过 reflect.TypeOf 函数获取到变量的反射类型对象之后,可以通过反射类型对象 reflect.Type 的 New 函数来创建一个新的实例,注意这个实例的类型是 reflect.Type 类型的. package main import ( "fmt" "reflect" ) func main() { v

  • C语言动态内存管理malloc柔性数组示例详解

    目录 1.1为什么存在动态内存管理 1.2动态内存管理函数 1.2.1malloc 1.2.2free 1.2.3calloc 1.2.4realloc 1.3动态内存管理函数易错点 1.3.1对NULL指针的解引用操作 1.3.2对动态开辟空间的越界访问 1.3.3对非动态开辟内存使用free释放 1.3.4使用free释放一块动态开辟内存的一部分 1.3.5对同一块动态内存多次释放 1.3.6动态开辟内存忘记释放(内存泄漏) 2.1常见相关笔试题 2.2C/C++语言中的内存开辟 2.3柔性

  • C语言实现二叉树链式结构的示例详解

    目录 前言 1. 链式二叉树结构 2. 二叉树的遍历 2.1 前序遍历 2.2 中序遍历 2.3 后序遍历 2.4 层序遍历 3. 常见功能 3.1 二叉树结点个数 3.2 二叉树叶子结点个数 3.3 第K层结点的个数 3.4 二叉树的深度 3.5 判断是不是树是不是完全二叉树 3.6 在二叉树中查找值为x的结点 3.7 拿到每一层的数据 4. 二叉树的创建和销毁 4.1 二叉树的创建 4.2 二叉树的销毁 前言 前面我们已经对堆进行学习,堆就是一个顺序结构的二叉树,把数组看成二叉树,下面一起学

随机推荐