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. HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置

    答案:在将WebDataHelper升级到VS2013是出现的这个错误,这个程序使用了URL重写的技术, 解决方法是:需要将重写的配置,迁移到system.webServer配置节中

  2. MapReduce 重要组件——Recordreader组件 [转]

    (1)以怎样的方式从分片中读取一条记录,每读取一条记录都会调用RecordReader类: (2)系统默认的RecordReader是LineRecordReader,如TextInputFormat ...

  3. spring mvc设置字符集过滤器

    <filter> <filter-name>springEncoding</filter-name> <filter-class> org.spring ...

  4. JS桌面应用

    一.图片预加载 var oImg = new Image(); oImg.onload=function(){ //alert('success'); } oImg.onerror=function( ...

  5. CRF条件随机场简介

    CRF(Conditional Random Field) 条件随机场是近几年自然语言处理领域常用的算法之一,常用于句法分析.命名实体识别.词性标注等.在我看来,CRF就像一个反向的隐马尔可夫模型(H ...

  6. Android学习参考教程和工具及常见问题解决

    参考教程: 1.菜鸟教程:http://www.runoob.com/w3cnote/android-tutorial-intro.html 2.Android初學特訓班(第五版) 使用工具: 1.A ...

  7. [转]建立swap分区

    1,fdisk 时设置id号82(t选项中L可查) 2,mkswap  /dev/sdXx 3,swapon /devsdXx 4,cat /proc/swap or swapon -s 就可以看到了 ...

  8. KVO的内部实现原理

    kvo概述 kvo,全称Key-Value Observing,它提供了一种方法,当对象某个属性发生改变时,允许监听该属性值变化的对象可以接受到通知,然后通过kvo的方法响应一些操作. kvo实现原理 ...

  9. innerHTML..innerText..textContent

    /* * innerText和textContent 都是设置文字内容的,如果设置的内容当中有标签,也会直接的以文本的方式显示(标签的<>都会按照转义的方式进行解析) * innerTex ...

  10. ICTCLAS50中文分词软件“Init ICTCLAS failed!”问题

    if (!ICTCLAS_Init(Server.MapPath("ICTCLAS50")))            {               Response.Write( ...