go语言中的slice

package main;

import "fmt"

func main() {
	//slice本身不是数组,指向底层的数组
	//作为变长数组的替换方案
	//slice是引用类型

	//声明一个slice,这里不需要指定长度
	var a []int;

	//创建一个数组
	var b = [10]int{1,2,3,4,5,6,7,8,9,10};

	//通过数组来创建slice
	c := b[1:len(b)];
	//同上,简写
	d := b[1:];
	//从下标2开始,到4结束,不包括下标4的元素
	e := b[2:4];
	//从数组开始,取3个
	f := b[:3];

	//通过make创建slice
	//长度为3,容量为10的slice
	g := make([]int,10);

	h := []byte{'a','b','c','d','e','f','g'};
	i := h[2:5];
	//注意这里的索引是相对i的索引,i现在是['c','e']
	j := i[1:3];
	//注意这里6已经超过了i的cap容量,会报错
	//j := i[1:6];

	//在slice的尾部追加元素
	k := make([]int,6);
	fmt.Printf("%p %v\n",&k,k);
	k = append(k,1,3);
	fmt.Printf("%p %v\n",k);
	//这里当追加的元素超过了slice的cap时,会重新分配地址,并把值拷贝
	k = append(k,k);

	//slice是引用类型,修改某一个slice的值,其他也相应改变
	m := []int{1,5};
	l := m[2:5];
	n := m[1:4];
	fmt.Println(m,l,n);
	//改变l中的值,m,n中也相应改变
	l[0] = 6;
	fmt.Println(m,n);

	//如果当slice发生地址重新分配后,那相应改变是不生效的
	o := []int{1,5};
	p := o[2:5];
	q := o[1:4];
	fmt.Println(o,p,q);
	//在改变p元素值之前,我们让q发生地址重新分配
	q = append(q,1);
	//再改变p的值,这时q的值不会发生改变,因为它已经指向新的地址
	p[0] = 6;
	fmt.Println(o,q);

	//copy时以长度短的为准
	r := []int{1,5};
	s := []int{6,8};
	//这里只会把s中的6,8拷贝到r中的1,3
	copy(r,s);
	fmt.Println(r,s);

	fmt.Println(a);
	fmt.Println(b);
	fmt.Println(c);
	fmt.Println(d);
	fmt.Println(e);
	fmt.Println(f);
	fmt.Println(g,len(g),cap(g));
	fmt.Println(string(h));
	fmt.Println(string(i),cap(i));
	fmt.Println(string(j),cap(j));
}

  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


类型转换 1、int转string 2、string转int 3、string转float 4、用户结构类型转换
package main import s "strings" import "fmt" var p = fmt.Println func main() { p("Contains: ", s.Contains("test&quo
类使用:实现一个people中有一个sayhi的方法调用功能,代码如下: 接口使用:实现上面功能,代码如下:
html代码: beego代码:
1、读取文件信息: 2、读取文件夹下的所有文件: 3、写入文件信息 4、删除文件,成功返回true,失败返回false
配置环境:Windows7+推荐IDE:LiteIDEGO下载地址:http://www.golangtc.com/downloadBeego开发文档地址:http://beego.me/docs/intro/ 安装步骤: 一、GO环境安装 二、配置系统变量 三、Beego安装 一、GO环境安装 根
golang获取程序运行路径:
Golang的文档和社区资源:为什么它可以帮助开发人员快速上手?
Golang:AI 开发者的实用工具
Golang的标准库:为什么它可以大幅度提高开发效率?
Golang的部署和运维:如何将应用程序部署到生产环境中?
高性能AI开发:Golang的优势所在
本篇文章和大家了解一下go语言开发优雅得关闭协程的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。1.简介本文将介绍首先为什么需要主...
这篇文章主要介绍了Go关闭goroutine协程的方法,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。1.简介本文将介绍首先为什么需要主动关闭gor...
本篇文章和大家了解一下go关闭GracefulShutdown服务的几种方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。目录Shutdown方法Regi...
这篇文章主要介绍了Go语言如何实现LRU算法的核心思想和实现过程,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。GO实现Redis的LRU例子常
今天小编给大家分享的是Go简单实现多租户数据库隔离的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会...
这篇“Linux系统中怎么安装NSQ的Go语言客户端”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希
本文小编为大家详细介绍“怎么在Go语言中实现锁机制”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么在Go语言中实现锁机制”文章能帮助大家解决疑惑,下面...
今天小编给大家分享一下Go语言中interface类型怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考