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遍历数组相似

  1. for k, v := range array {
  2. fmt.Printf("arr[%d] = %d \t", k, v)
  3. }
  1. foreach ($arr as $k => $v) {
  2. printf("arr[%d] = %d \t", $k, $v);
  3. //echo '$arr[' . $k . "] = " . $v . "\t";
  4. }

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

  1. slice1 := arr[:]    //arr[0:6]/arr[0:]
  2. slice2 := arr[1:1]  //[]
  3. slice4 := arr3[1:3] //b c
  4. 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的更多相关文章

  1. golang slice 切片原理

    golang 中的 slice 非常强大,让数组操作非常方便高效.在开发中不定长度表示的数组全部都是 slice .但是很多同学对 slice 的模糊认识,造成认为golang中的数组是引用类型,结果 ...

  2. golang slice 源码解读

    本文从源码角度学习 golang slice 的创建.扩容,深拷贝的实现. 内部数据结构 slice 仅有三个字段,其中array 是保存数据的部分,len 字段为长度,cap 为容量. type s ...

  3. golang之array

    golang使用array表示固定大小的数组,使用slice表示动态数组. package main import "fmt" func main() { var a = [5]i ...

  4. Golang Slice 总结

    数组 Go的切片是在数组之上的抽象数据类型,因此在了解切片之前必须要要理解数组.数组类型由指定和长度和元素类型定义.数组不需要显式的初始化:数组元素会自动初始化为零值:Go的数组是值语义.一个数组变量 ...

  5. golang中Array与Slice

    在golang中有数组和Slice两种数据结构,Slice是基于数组的实现,是长度动态不固定的数据结构,本质上是一个对数组字序列的引用,提供了对数组的轻量级访问.那么在go的函数中以数组或Slice为 ...

  6. golang的array/slice

    相同点 由相同类型的元素组合构成 元素有序排列,0为第一个元素下标 基本使用方法相同 区别 array声明时需要指定容量大小,而且无法修改 slice可通过append增加元素,当容量不够时,会自动扩 ...

  7. golang笔记——array

    1.定义一个 array 数组长度也是类型的一部分,比如长度为3的int数组与长度为5的int数组,并不是同一类型. package main import ( "strconv" ...

  8. golang——slice使用摘要

    1.slice因capacity不足而重新分配的underlying array与原本的array空间是断裂的,就是说这是原本指向的空间没变,如下 arr := [...]int{1, 2, 3, 4 ...

  9. Array.prototype.slice && Array.prototype.splice 用法阐述

    目的 对于这两个数组操作接口,由于不理解, 往往被误用, 或者不知道如何使用.本文尝试给出容易理解的阐述. 数组 什么是数组? 数组是一个基本的数据结构, 是一个在内存中依照线性方式组织元素的方式, ...

随机推荐

  1. 使用JQuery的Ajax调用SOAP-XML Web Services(Call SOAP-XML Web Services With jQuery Ajax)(译+摘录)

    假设有一个基于.Net的Web Service,其名称为SaveProduct POST /ProductService.asmx HTTP/1.1 Host: localhost Content-T ...

  2. JDE修改Grid列样式

    Set Grid Color :to change the background color of a cell, row, column, or the entire control. Set Gr ...

  3. java入门第五步之数据库项目实战【转】

    在真正进入代码编写前些进行一些工具的准备: 1.保证有一个可用的数据库,这里我用sql server 2000为例,2.拥有一个ide,如ecelise或myeclipse等,这里我使用的是myecl ...

  4. weblogic部署ssh2应用出现异常

    一般在domains\your_Domain\bin\startWebLogic.cmd 中找到set CLASSPATH=%CLASSPATH%;%MEDREC_WEBLOGIC_CLASSPATH ...

  5. 3.精通前端系列技术之深入学习Jquery(一)

    使用Jquery的好处: •简化JS的复杂操作 •不再需要关心兼容性(原生js获取元素样式.事件需要做兼容性) •提供大量实用方法 1.选择网页元素 <!DOCTYPE html PUBLIC ...

  6. nuget的小Tips

    1.nuget常用命令 nuget spec -a bin\Debug\DllName.dll -f //根据dll生成.nuspec文件,这样会生成无用的默认标签,比如licenseUrl.tags ...

  7. python处理url中的中文编码,以及其他编码问题

    1.python中的urlencode与urldecode 2.各种编码转换在线工具 3.python用于url解码和中文解析的小脚本(python url decoder) 4.如何只对url中的中 ...

  8. 【STL】-priority_queue的用法

    初始化: priority_queue<int>                           maxPQ; priority_queue<int,vector<int& ...

  9. C++-理解构造函数、析构函数执行顺序

    先初始化序列中的函数调用,如果基类构造函数为非引用传递,则引起参数的拷贝构造 再: 先类内的成员构造函数(拷贝/默认),再类的构造函数:先基类,再派生类: 本文主要说明对象创建时构造函数的执行顺序,对 ...

  10. C++-模板的声明和实现为何要放在头文件中

    源: http://blog.csdn.net/lqk1985/archive/2008/10/24/3136364.aspx 如何组织编写模板程序 发表日期: 1/21/2003 12:28:58 ...