数组Array
 定义数组的格式:var <varName>[n]<type>,n>0
 数组长度也是类型的一部分,因此具有不同长度的数组为不同类型,
 不同类型的不能相互赋值
 注意区分指向数组的指针和指针数组
 数组在GO中为值类型
 数组之间(相同类型)可使用==或!=进行比较,但不可以使用>或<
 可以使用new来创建数组,此方法返回一个指向数组的指针
 go支持多维数组

func main() {
a:=[] int{:,:}
b:=[...] int {:,:,:}
var c [] int= [] int {,}
fmt.Println(a) //[0 3 1]
fmt.Println(b) //[0 1 2 0 0 5]
fmt.Println(c)//[1 3]
}
func main() {
var c [] int= [] int {,}
var p *[] int=&c
fmt.Println(p) //指向数组的指针 &[1 3]
x,y:=,
a:=[] * int{&x,&y}
fmt.Println(a) //[0xc0820022a0 0xc0820022a8] 指针数组
}
func main() {
a:=[] int{}
a[]=
fmt.Println(a) //[0 2 0 0 0 0 0 0 0 0]
p:=new([] int)
p[]=
fmt.Println(p) //&[0 2 0 0 0 0 0 0 0 0]
}

Go多维数组

func main() {
a := [][]int{
{, , },
{, , }}
fmt.Println(a)
}

go语言版冒泡排序

func main() {
arr:=[...]int{,,,,}
fmt.Println(arr)
len:=len(arr)
count:= //交换次数
for i:=;i<len;i++{
for j:=i+;j<len;j++{
if arr[i]>arr[j]{
tmp:=arr[j]
arr[j]=arr[i]
arr[i]=tmp
count++
}
}
}
fmt.Println(arr)
fmt.Println(count) //
}
循环里可以
func main() {
for i:=;i<;i++{
v:=
fmt.Println(&v) //每次一个新地址
}
}
在循环外
v:=
v:=
是错误的

切片Slice
  本身并不是数组,它指向底层的数组
  作为变长数组的替代方案,可以关联底层数组的局部或全部
  为引用类型
  可以直接创建或者从底层数组获取生成
  使用len()获取元素个数,cap()获取容量
 一般使用make()创建
 如果多个slice指向相同底层数组,其中一个值改变会影响全部

  make([]type ,len,cap)
 其中cap可以省略,省略时和len值相同
  len表示存储的个数,cap表示容量

func main() {
var s [] int=[]int{,,,,,,,,,}
fmt.Println(s)
// s1:=s[5:10] //前闭后开 索引包含5不包含10,从索引5取到最后3种形式
// s1:=s[5:len(s)]
s1:=s[:]
s2:=s[:]
fmt.Println(s1) //[6 7 8 9 10]
fmt.Println(s2)//[1 2 3 4 5]
}
func main() {
s1:=make([]int,,)
fmt.Println(len(s1),cap(s1))//3 10
fmt.Println(s1)//[0 0 0]
}

Reslice
Reslice时索引以被slice的切片为准
索引不可以超过被slice切片的容量的cap()值 //超出内存块了
索引越界不会导致底层数组的重新分配而是引发错误

func main() {
a:=[]string{"a","b","c","d","e","f","g","h","i","j"}
s1:=a[:]
fmt.Println(s1)//[c d e]
fmt.Println(len(s1),cap(s1))//3 8 指向的是1个连续的内存块
s2:=s1[:]
fmt.Println(s2)//[c d]
fmt.Println(len(s2),cap(s2))//2 8
s3:=s2[:]
fmt.Println(s3)//[d]
fmt.Println(len(s3),cap(s3))//1 7
}

Append
可以在slice尾部追加元素
可将一个slice追加在另一个slice的尾部
如果最终长度未超过追加到slice的容量则返回原始slice
如果超过追加到的slice的容量则将重新分配数组并拷贝原始数据

unc main() {
s1:=make([]int,,)
fmt.Printf("%p\r\n",s1)//0xc082005da0
s1=append(s1,,,)
fmt.Printf("%v,%p\r\n",s1,s1)//[0 0 0 1 2 3],0xc082005da0
s1=append(s1,,,)
fmt.Printf("%v,%p",s1,s1)//[0 0 0 1 2 3 4 5 6],0xc08203a120(地址变了,重新分配了)
}
func main() {
a:=[]int{,,,,}
s1:=a[:] //[3 4 5]
s2:=a[:] //[2 3]
fmt.Println(s1,s2)
s1[]=
fmt.Println(s1,s2,a)//[9 4 5] [2 9] [1 2 9 4 5]
a[]=
fmt.Println(s2,a)//[7 9] [1 7 9 4 5]
}
func main() {
a:=[]int{,,,,}
s1:=a[:] //[3 4 5]
s2:=a[:] //[2 3]
fmt.Println(s1,s2)
s2=append(s2,,,,,,,,,,)
s1[]=
fmt.Println(s1,s2,a)//[9 4 5] [2 3 1 1 1 1 1 1 1 1 1 1] [1 2 9 4 5]
//s2 append后长度超出容量 获得新地址不再指向a,s1的改变对其不影响
}

copy

func main() {
s1:=[]int{,,,,,}
s2:=[]int{,,}
// copy(s1,s2) //将s2复制到s1里
// fmt.Println(s1,s2) //[7 8 9 4 5 6] [7 8 9]
// copy(s2,s1)
// fmt.Println(s2)// [1 2 3]
copy(s2[:],s1)
fmt.Println(s2)//[7 8 1]
}

GO数组和切片的更多相关文章

  1. GO语言总结(3)——数组和切片

    上篇博文简单介绍了一下Go语言的基本类型——GO语言总结(2)——基本类型,本篇博文开始介绍Go语言的数组和切片. 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. ( ...

  2. golang笔记——数组与切片

    一.切片的定义 我们可以从数组(go语言中很少直接使用数组)或者切片来初始化一个新的切片,也可以直接通过 make 来初始化一个所有元素为默认零值的切片. //1.通过数组来初始化切片 arr := ...

  3. Go - 数组 和 切片(array、slice)

    一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建 数组有 3 种创建方式: 1) [length]Type 2) [length]Type{value ...

  4. GO语言数组和切片实例详解

    本文实例讲述了GO语言数组和切片的用法.分享给大家供大家参考.具体分析如下: 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式: ...

  5. Go数组、切片、映射的原理--简明解析

    数组.切片.映射是Golang的最重要的数据结构,下面是对这3种数据结构的一点个人总结: 一.数组 数组是切片和映射的基础数据结构. 数组是一个长度固定的数据类型,存储着一段具有相同数据类型元素的连续 ...

  6. go语言的数组和切片区别

    这里不介绍数组和切片的使用技巧,主要看下2者的区别. 首先看下它们的定义: 数组:类型 [n]T 表示拥有 n 个 T 类型的值的数组. 切片:类型 []T 表示一个元素类型为 T 的切片. 看一个数 ...

  7. go语言基础知识笔记(二)之数组和切片

    数组和切片知识用的也是比较多,的给我们工作带来很大的便利 (一) 数组 定义:在golang中数组的长度是不可变,数组存放要求是同一种数据类型 //golang中数组定义的四种方法1.先声明,后赋值 ...

  8. Go语言--数组、切片、

    3.1 数组--固定大小的连续空间 3.1.1 声明数组 写法 var 数组变量名 [元素数量]T 说明: 变量名就是使用时的变量 元素的数量可以是表达式,最后必须为整型数值 T 可是是任意基本类型, ...

  9. Go语言数组和切片的原理

    目录 数组 创建 访问和赋值 切片 结构 初始化 访问 追加 拷贝 总结 数组和切片是 Go 语言中常见的数据结构,很多刚刚使用 Go 的开发者往往会混淆这两个概念,数组作为最常见的集合在编程语言中是 ...

  10. Numpy 笔记: 多维数组的切片(slicing)和索引(indexing)【转】

    目录 切片(slicing)操作 索引(indexing) 操作 最简单的情况 获取多个元素 切片和索引的同异 切片(slicing)操作 Numpy 中多维数组的切片操作与 Python 中 lis ...

随机推荐

  1. JQuery -- Dom操作, 示例代码

    1.内部插入节点 *   append(content) :向每个匹配的元素的内部的结尾处追加内容 *   appendTo(content) :将每个匹配的元素追加到指定的元素中的内部结尾处 *   ...

  2. scala学习手记31 - Trait

    不知道大家对java的接口是如何理解的.在我刚接触到接口这个概念的时候,我将接口理解为一系列规则的集合,认为接口是对类的行为的规范.现在想来,将接口理解为是对类的规范多少有些偏颇,更恰当些的观点应该是 ...

  3. qtjambi_ZC

    loadJambiJniLibrary --> loadLibrary --> loadNativeLibrary --> loadLibrary_helper class QApp ...

  4. DPDK之(八)——vhost库

    转:http://www.cnblogs.com/danxi/p/6652725.html vhost库实现了一个用户空间的virtio net server,允许用户直接处理virtio ring队 ...

  5. PHP处理会话函数session和cookie总结

    本教程讲解PHP处理会话函数session和cookie总结 PHP处理会话函数包括:session_start.session_register.session_is_registered.sess ...

  6. hive 导出数据到本地

    有时候需要将hive库中的部分数据导入至本地,这样子做可视化和小规模的数据挖掘实验都是比较方便的.数据导入至本地的HQL语法如下: INSERT OVERWRITE [LOCAL] DIRECTORY ...

  7. JS获取元素计算过后的样式

    获取元素计算过后的样式 Window.getComputedStyle() 方法会在一个元素应用完有效样式且计算完所有属性的基本值之后给出所有 CSS 属性的值. 语法: let style = wi ...

  8. oracle: 分割字符串,或者查找字段里面的关键字(关键字1,关键字2,关键字3)

    表中有一个字段:keyword, keyword里面的存储的字符一般是:[关键字1,关键字2,关键字3] 那么,在搜索的时候,不能用like 来模糊查询,因为这样会,多查询出一下不相干的关键字, hi ...

  9. Django rest_framewok框架的基本组件

    快速实例 序列化 视图三部曲 认证与权限组件 解析器 分页 回到顶部 快速实例 Quickstart 回到顶部 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web ...

  10. Electron 使用 Webpack2 打包应用程序

    Electron 使用 Webpack2 打包应用程序 前两天看了一下使用 Electron 来开发应用程序,今天说说所怎样集成 Electron 和 Webpack2 来打包应用程序. 安装依赖库 ...