首页 > 其他分享 >Go 切片

Go 切片

时间:2023-09-01 17:11:58浏览次数:46  
标签:myslice1 fmt Printf 切片 myslice Go myslice2

切片与数组类似,但更强大和灵活。与数组一样,切片也用于在单个变量中存储相同类型的多个值。然而,与数组不同的是,切片的长度可以根据需要增长和缩小。在 Go 中,有几种创建切片的方法:

  1. 使用[]datatype{values}格式
  2. 从数组创建切片
  3. 使用 make()函数

使用 []datatype{values}格式创建切片

语法:

slice_name := []datatype{values}

一个常见的声明切片的方式如下:

myslice := []int{}

上面的代码声明了一个空切片,长度为 0,容量为 0。

要在声明时初始化切片,可以使用以下方式:

myslice := []int{1, 2, 3}

上面的代码声明了一个长度为 3 的整数切片,容量也为 3。在 Go 中,有两个函数可以用来返回切片的长度和容量:

  • len() 函数:返回切片的长度(切片中元素的数量)
  • cap() 函数:返回切片的容量(切片可以增长或缩小到的元素数量)

示例:

package main

import (
    "fmt"
)

func main() {
    myslice1 := []int{}
    fmt.Println(len(myslice1))
    fmt.Println(cap(myslice1))
    fmt.Println(myslice1)

    myslice2 := []string{"Go", "切片", "很", "强大"}
    fmt.Println(len(myslice2))
    fmt.Println(cap(myslice2))
    fmt.Println(myslice2)
}

结果:

0
0
[]
4
4
[Go 切片 很 强大]

在上面的示例中,第一个切片 myslice1 中未指定实际元素,因此切片的长度和容量都为零。而第二个切片 myslice2 中指定了元素,因此长度和容量都等于实际元素的数量。

从数组创建切片

可以通过对数组进行切片来创建切片:

语法:

var myarray = [length]datatype{values} // 一个数组
myslice := myarray[start:end]         // 从数组创建的切片

示例:

package main

import (
    "fmt"
)

func main() {
    arr1 := [6]int{10, 11, 12, 13, 14, 15}
    myslice := arr1[2:4]

    fmt.Printf("myslice = %v\n", myslice)
    fmt.Printf("length = %d\n", len(myslice))
    fmt.Printf("capacity = %d\n", cap(myslice))
}

结果:

myslice = [12 13]
length = 2
capacity = 4

在上面的示例中,myslice 是一个长度为 2 的切片,它是从长度为 6 的数组 arr1 创建的。切片从数组的第二个元素(值为 12)开始,可以增长到数组的末尾,因此切片的容量为 4。

如果 myslice 从数组的第一个元素开始,切片的容量将为 6。

使用 make() 函数创建切片

也可以使用 make() 函数来创建切片:

语法:

slice_name := make([]type, length, capacity)

注意:如果不定义容量参数,容量将等于长度。

示例:

package main

import (
    "fmt"
)

func main() {
    myslice1 := make([]int, 5, 10)
    fmt.Printf("myslice1 = %v\n", myslice1)
    fmt.Printf("length = %d\n", len(myslice1))
    fmt.Printf("capacity = %d\n", cap(myslice1))

    // 省略容量参数
    myslice2 := make([]int, 5)
    fmt.Printf("myslice2 = %v\n", myslice2)
    fmt.Printf("length = %d\n", len(myslice2))
    fmt.Printf("capacity = %d\n", cap(myslice2))
}

结果:

myslice1 = [0 0 0 0 0]
length = 5
capacity = 10
myslice2 = [0 0 0 0 0]
length = 5
capacity = 5

这个示例演示了如何使用 make() 函数创建切片。希望这篇文章有助于你理解 Go 中切片的概念和用法。

最后

为了方便其他设备和平台的小伙伴观看往期文章,链接奉上:

公众号搜索Let us Coding知乎开源中国CSDN思否掘金InfoQ简书博客园慕课51CTOhelloworld腾讯开发者社区阿里开发者社区

看完如果觉得有帮助,欢迎点赞、收藏关注

标签:myslice1,fmt,Printf,切片,myslice,Go,myslice2
From: https://www.cnblogs.com/xiaowange/p/17672424.html

相关文章

  • 银河麒麟服务器操作系统V10SP2离线安装Google Chrome浏览器
    https://blog.csdn.net/ShenSeKyun/article/details/132224932https://www.google.cn/chrome/index.htmlGOOGLE网址最下方下载LINUX版本的浏览器安装包打开终端,输入rpm-ivhgoogle-chrome-stable_current_x86_64.rpmyuminstall google-chrome-stable_current_x86_64.rpm......
  • 优化一个已有的 Go 程序,提高其性能并减少资源占用
    在软件开发中,性能和资源占用通常是我们关注的重点。优化一个已有的程序可以显著提高其性能,并减少对系统资源的占用。本文将介绍如何通过优化一个Go程序来实现这些目标。1.性能分析在开始优化之前,我们首先需要对程序进行性能分析,以确定瓶颈所在。在Go语言中,我们可以使用pprof工具......
  • dbeaver连接国产数据库highgo
    一、下载jar包HgdbJdbc,找项目中的jar包即可。 二、配置模板驱动名:Highgo类名:com.highgo.jdbc.DriverURL模板:jdbc:highgo://{host}:{port}/{database}端口:5866默认数据库:highgo ......
  • 【MongoDB】副本集通过一致性备份增加新节点
    [mongod@node01~]#opensslrand-base64666>/var/lib/mongo/keyfile[mongod@node01~]#chownmongod:mongod/var/lib/mongo/keyfile[mongod@node01~]#chmod600/var/lib/mongo/keyfile[mongod@node01~]#l/var/lib/mongo/keyfile-rw-------1mongodmongo......
  • go template函数,变量等语法示例
    Go标准库提供了几个package可以产生输出结果,而text/template 提供了基于模板输出文本内容的功能。html/template则是产生安全的HTML格式的输出。这两个包使用相同的接口,但是我下面的例子主要面向HTML应用。解析和创建模板命名模板模板没有限定扩展名,最流行的后缀是.tmpl,vim-go......
  • Gopher进阶神器:拥抱刻意练习,从新手到大师。
    发现一个非常友好的工具,帮助我们回顾练习过程,设定目标,并提供丰富多样的Gopher主题练习题。刻意练习:从新手到大师。Carol心理学家CarolDweck做过一个实验,她找了一些十岁的孩子,随机分成两组,让他们做道题。之后,对第一组那些完成题目的孩子说:你真聪明。对第二组那些做得不错的......
  • 开心档-软件开发入门之MongoDB 高级索引
     作者简介:每天分享MongoDB教程的学习经验、和学习笔记。  座右铭:有自制力,做事有始有终;学习能力强,愿意不断地接触学习新知识。个人主页:iOS开发上架的主页前言本章将会讲解在数组中创建索引,需要对数组中的每个字段依次建立索引。所以在我们为数组tags创建索引时,会为music、cric......
  • CF997E Good Subsegments
    简要题意一个好区间是其中数在值域上连续的区间,给定\(n\)的排列,每次给定一个区间,问其中有多少好的子区间。数据范围:\(1\len\le120000\)。做法只有整体询问的版本是CupboardMonsters。值域上连续当且仅当区间最大值减最小值等于区间长度,考虑维护最大值减最小值减区间长度......
  • RunnerGo:轻量级、全栈式、易用性和高效性的测试工具
    随着软件测试的重要性日益凸显,市场上的测试工具也日益丰富。RunnerGo作为一款基于Go语言研发的开源测试平台,以其轻量级、全栈式、易用性和高效性的特点,在测试工具市场中逐渐脱颖而出。RunnerGo是一款轻量级的测试工具,使用Go语言研发,具有轻便灵活的特点。与JMeter等重量级测试工具相......
  • go-optioner:轻松生成函数选项模式代码
    [Go开源工具]go-optioner:轻松生成函数选项模式代码原创 陈明勇 Go技术干货 2023-07-2508:02 发表于广东收录于合集#Go开源1个大家好,我是 陈明勇,一个热爱技术,喜欢专研技术的程序员。Go技术干货专注于分享Go技术干货知识(基础、进阶、原理等)。50篇原创......