【转】 golang slice array
1. array
同一类型数据的集合
var arr [n]type //声明type类型一维数组
var arr [m][n]type //声明type类型二维数组
多维数组以此类推
也可以用 := 声明
arr := [n]type{元素1[,元素2, ...]} 其中n可以用 "..." 三个点表示,系统会根据元素个数来确定
下标只能为 int 类型,而 php 还支持 string 类型的下标
1.1 数组长度 len(arr)
注:数组长度在定义后就不可变
1.2 遍历:
a. 循环通过过数组下标访问 arr[0] ~ arr[(len(arr))]
b. range arr, 有两个返回值 第一个为数组下标,第二个为元素的值,与php遍历数组相似
- for k, v := range array {
- fmt.Printf("arr[%d] = %d \t", k, v)
- }
- foreach ($arr as $k => $v) {
- printf("arr[%d] = %d \t", $k, $v);
- //echo '$arr[' . $k . "] = " . $v . "\t";
- }
1.3 数组在赋值与传递参数时,都会产生一个数组副本,而不是使用它的指针
2. slice
在定义 array 时,其长度是固定的,并且 array 是一个值类型
而 slice 是一个可变的数组,但是一个引用类型
2.1 产生slice的三种方式
a. 声明与 array 一样,不过不需要指定长度
var slice1 []int
slice2 := []int {元素1[, 元素2, ...]}
b. 从数组(或者切片或者字符串)中获取 arr[i:j] i=数组的开始位置,j=结束位结果,j-i=切片的长度,i和j都可以省略,省略时 i=0, j=len(arr),i是从0开始,j是从1开始
a b c d e f
i 0 1 2 3 4 5
j 1 2 3 4 5 6
- slice1 := arr[:] //arr[0:6]/arr[0:]
- slice2 := arr[1:1] //[]
- slice4 := arr3[1:3] //b c
- slice5 := arr3[:5] // = arr3[0:5]
c. make
slice1 := make([]int, 5, 10)
len(slice1) = 5, cap(slice1) = 10, 元素的初始值为0
2.2 相关函数
len(slice): 返回 slice 的元素个数(长度)
cap(slice): 返回 slice 的分配空间大小
append(slice1, slice2...): 把 slice2 追加到 slice1 产生新的 slice, 若 slice2 是变量时,不能省略...,相当于 append(slice1, a[, b, ...])
copy(目标slice, 源slice): 以最小的切片元素个数为准,将源 slice 复制到 目标 slice
2.3 cap - len = 0 时,系统将动态分配新的数组空间,即切片会自动处理存储空间不足的问题
2.4 遍历与 array 一样
2.5 在传递参数时,传递的为指针
package main import (
"bytes"
"encoding/binary"
"fmt"
"strconv"
) func main() {
fmt.Print(Enco())
} func Enco() []byte { buffer := bytes.NewBuffer([]byte{})
// KEY
binary.Write(buffer, binary.LittleEndian, int32())
// TAG "8912"
k, _ := strconv.Atoi("")
binary.Write(buffer, binary.LittleEndian, int32(k))
// 长度
binary.Write(buffer, binary.LittleEndian, int16())
// 字符串
var content string = "" binary.Write(buffer, binary.LittleEndian, []byte(content)) binary.Write(buffer, binary.LittleEndian, int64()) return buffer.Bytes() }
【转】 golang slice array的更多相关文章
- golang slice 切片原理
golang 中的 slice 非常强大,让数组操作非常方便高效.在开发中不定长度表示的数组全部都是 slice .但是很多同学对 slice 的模糊认识,造成认为golang中的数组是引用类型,结果 ...
- golang slice 源码解读
本文从源码角度学习 golang slice 的创建.扩容,深拷贝的实现. 内部数据结构 slice 仅有三个字段,其中array 是保存数据的部分,len 字段为长度,cap 为容量. type s ...
- golang之array
golang使用array表示固定大小的数组,使用slice表示动态数组. package main import "fmt" func main() { var a = [5]i ...
- Golang Slice 总结
数组 Go的切片是在数组之上的抽象数据类型,因此在了解切片之前必须要要理解数组.数组类型由指定和长度和元素类型定义.数组不需要显式的初始化:数组元素会自动初始化为零值:Go的数组是值语义.一个数组变量 ...
- golang中Array与Slice
在golang中有数组和Slice两种数据结构,Slice是基于数组的实现,是长度动态不固定的数据结构,本质上是一个对数组字序列的引用,提供了对数组的轻量级访问.那么在go的函数中以数组或Slice为 ...
- golang的array/slice
相同点 由相同类型的元素组合构成 元素有序排列,0为第一个元素下标 基本使用方法相同 区别 array声明时需要指定容量大小,而且无法修改 slice可通过append增加元素,当容量不够时,会自动扩 ...
- golang笔记——array
1.定义一个 array 数组长度也是类型的一部分,比如长度为3的int数组与长度为5的int数组,并不是同一类型. package main import ( "strconv" ...
- golang——slice使用摘要
1.slice因capacity不足而重新分配的underlying array与原本的array空间是断裂的,就是说这是原本指向的空间没变,如下 arr := [...]int{1, 2, 3, 4 ...
- Array.prototype.slice && Array.prototype.splice 用法阐述
目的 对于这两个数组操作接口,由于不理解, 往往被误用, 或者不知道如何使用.本文尝试给出容易理解的阐述. 数组 什么是数组? 数组是一个基本的数据结构, 是一个在内存中依照线性方式组织元素的方式, ...
随机推荐
- wait(), notify(),sleep详解
在JAVA中,是没有类似于PV操作.进程互斥等相关的方法的.JAVA的进程同步是通过synchronized()来实现的,需要说明的是,JAVA的synchronized()方法类似于操作系统概念中的 ...
- toggleClass() 方法做类似于微信扣扣点击语音图标按钮变成切换到语音输入功能,点击键盘图标按钮切换到文字输入状态的效果
就是这种效果的类似. <html><head><script type="text/javascript" src="/jquery/jqu ...
- 推荐10款非常优秀的 HTML5 开发工具
HTML5 发展如火如荼,随着各大浏览器对 HTML5 技术支持的不断完善以及 HTML5 技术的不断成熟,未来 HTML5 必将改变我们创建 Web 应用程序的方式.今天这篇文章向大家推荐10款 ...
- sql 查询强制使用HASH连接性能测试比较
HASH JOIN 散列连接 hash join是CBO 做大数据集连接时的常用方式.优化器扫描小表(或数据源),利用连接键(也就是根据连接字段计算hash 值)在内存中建立hash表,然后扫描大表, ...
- LA 4119 - Always an integer
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- C#点击按钮用DataGridView动态增加行、删除行,增加按钮列
原来有一行: 点击添加,在下面增加同样的一行 新增加的行有一列删除按钮,点击某行的删除按钮时,删除当前行 方法: 哈哈,我果然好聪明啊 1.文本框.文本框.添加按钮 2.一个DataGridView( ...
- ROS服务器与客户端
我们将创建一个服务器节点add_two_ints_server,它将会收到两个整数,并且返回它们的和.切换目录到之前建立的beginner_tutorials包下: cd ~/catkin_ws/sr ...
- function format_number(srcNumber, n) {
function format_number(srcNumber, n) {var dstNumber = parseFloat(srcNumber);if (isNaN(dstNumber)) {r ...
- ssh curl 命令理解
使用一条命令抓取一本小说 curl "http://www.23hh.com/book/1/1019/"|iconv -c -f gbk -t utf8 |sed 's/" ...
- Linux gcc编译(动态库,静态库)
1. linux 库路径: /lib , /usr/lib , /usr/local/lib 2.linux 编译静态库 a.编写源文件vi pr1.c void print1(){ print ...