首页 > 其他分享 >Go语言切片(Slice)的一些有趣特性

Go语言切片(Slice)的一些有趣特性

时间:2024-11-07 10:46:11浏览次数:3  
标签:Slice printSlice fmt cap len 切片 names Go

  1. 切片类似数组的引用。更改底层数组中的元素会修改切片的元素。更改切片的元素同样会修改其底层数组中的元素,和它共享底层数组的切片都会观测到这些修改。
点击查看代码
package main

import "fmt"

func main() {
	names := [4]string{
		"John",
		"Paul",
		"George",
		"Ringo",
	}
	fmt.Println(names)  // [John Paul George Ringo]

	a := names[0:2]
	b := names[1:3]
	fmt.Println(a, b)  // [John Paul] [Paul George]

	names[1] = "gyt"
	fmt.Println(a, b)  // [John gyt] [gyt George]
	fmt.Println(names)  // [John gyt George Ringo]
}
  1. 切片的长度和容量。切片的长度就是它所包含的元素个数。切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。对切片进行切片,是对其底层数组再进行切片,换句话说,是对容量而不是长度再进行切片。当切片的左边界设置一个大于0的数时,会改变切片的容量,其他情况容量不会改变。
点击查看代码
package main

import "fmt"

func main() {
	s := []int{2, 3, 5, 7, 11, 13}
	printSlice(s)  // len=6 cap=6 [2 3 5 7 11 13]

	s = s[:0]
	printSlice(s)  // len=0 cap=6 []

        s = s[:4]
	printSlice(s)  // len=4 cap=6 [2 3 5 7]

	s = s[1:4]
	printSlice(s)  // len=3 cap=5 [3 5 7]

	s = s[2:]
	printSlice(s)  // len=1 cap=3 [7]

}

func printSlice(s []int) {
	fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}

标签:Slice,printSlice,fmt,cap,len,切片,names,Go
From: https://www.cnblogs.com/ggyt/p/18531732

相关文章

  • JavaScript Kruskal 最小生成树 (MST) 算法(Kruskal’s Minimum Spanning Tree (MST) A
             对于加权、连通、无向图,最小生成树(MST)或最小权重生成树是权重小于或等于其他所有生成树权重的生成树。Kruskal算法简介:        在这里,我们将讨论Kruskal算法来查找给定加权图的MST。         在Kruskal算法中,按升序对给定图的所......
  • Go使用nacos配置中心
    不使用注册中心的话,可以使用viper,时时监控配置文件的变化,有变化就更新nacos安装可以参考官网选择二进制或者dockerhttps://nacos.io/download/nacos-server/gopackagemainimport( "fmt" "github.com/nacos-group/nacos-sdk-go/clients" "github.com/nacos-group/nacos-......
  • Go-性能优化、优化分析、调优实战pprof
    使用官方自带benchmark进行基准性能测试第一个是函数名-核数第二个是执行次数第三个是一次执行时间第四个是一次执行的多大的内存第五个是一次执行申请几次内存slice用的时候在make()初始化切片时提供容量信息data:=make([]int,0)data:=make([]int,0,size)//goodpre......
  • 基于 Go + Vue3!一款开源的 Nginx 管理 Web 工具!
    大家好,我是Java陈序员。Nginx由于其强大的性能,常常被用于企业开发中!今天,给大家介绍一款开源的Nginx管理Web工具,支持通过界面完成Nginx的配置!关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项目介绍NginxUI——一个......
  • 20241107,LeetCode 每日一题,使用 Go 计算两数相加
    思路模拟加法:链表存储的是逆序数位,因此从头节点开始,逐位相加可以模拟正常的加法。每两个节点的值相加,并记录进位。逐节点相加:创建一个新的链表,用于存储结果,每次将两个链表对应节点的值加上进位值,结果存储到新链表的节点中。计算过程中,将(l1.Val+l2.Val+carry)相加的......
  • go语言进阶之同步原语
    同步原语资源竞争定义与实现在Go语言中,资源竞争指多个goroutine同时访问共享资源,导致程序的行为不可预测或者不一致。资源竞争通常发生在对同一变量进行读写操作时,如果没有正确的同步机制来控制访问可能会引发资源竞争packagemainimport("fmt""sync")......
  • CF1270 Good Bye 2019
    Dashboard玩构造玩的,服了。A拥有最大牌的必胜。linkB若相邻的差\(\ge2\)则有解,否则根据变化连续性一定无解。linkC加两个数,第一个数为之前所有数的异或和。加进来之后异或为0。第二个数为加完第一个数之后的和。linkD考虑\(k=n-1\)时,分别询问除去每个数之后的第\(......
  • 20241107,LeetCode 每日一题,使用 Go 计算两数相加
    思路模拟加法:链表存储的是逆序数位,因此从头节点开始,逐位相加可以模拟正常的加法。每两个节点的值相加,并记录进位。逐节点相加:创建一个新的链表,用于存储结果,每次将两个链表对应节点的值加上进位值,结果存储到新链表的节点中。计算过程中,将(l1.Val+l2.Val+carry)相加的结......
  • 浅析Mongodb注入
    前言不太会Mongodb的用法,这里学习一下简单介绍Mongodb是非关系型数据库(NoSQL),在MySQL中,我们所熟知的几个最常见的概念是数据库(Database)、表(Table)、字段(Column)、记录(Record)、索引(Index),这些术语映射到Mongodb中大概等价于数据库(Database)、集合(Collection)......
  • SciTech-BigDataAIML-Algorithm-Heuristic启发式- A *(Star) Algorithm(A星算法): To
    SciTech-BigDataAIML-Algorithm-Heuristic启发式A*(Star)Algorithm(A星算法):LossFunction:TotalCost="PastCost+PredicativeCost"MeasurementEuclidianDistance(欧几理得距离)\(\large\begin{array}{rl}\\EuDistance(Point_1,Point_2)&=\sqr......