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. ie6 ie7 绝对定位 相对定位 层被遮住

    relative 上加上z-index有多个,则z-index递减, absolute层显示则不会被其它标签挡住.

  2. 查询使用NoLock

    当我们在操作数据库的时候,无论是查询还是修改数据库的操作我们都习惯使用using(var db=new XXXDB()){},但是如果仅仅是做查询,最好是使用NoLock,因为NoLock使用的是共享 ...

  3. [Jquery]tab页面切换效果

    思路:取得头部和内容的div,头部当前点击的高亮,其余的去除高亮,并通过index()方法获得当前点击的索引,然后内容div通过.eq(index)显示和隐藏 优化:当前做法,从第一个快速移到最后一个 ...

  4. Oracle 过程控制语句整理

    分支语句/循环语句 v_case ) :; begin then dbms_output.put_line('条件成立'); elsif then then dbms_output.put_line( ...

  5. Topcoder SRM 584 DIV1 600

    思路太繁琐了 ,实在不想解释了 代码: #include<iostream> #include<cstdio> #include<string> #include& ...

  6. 一模 (4) day1

    第一题: 题目大意:给出N个人之间转账的手续X%,求出A转给B至少要多少钱才能使B得到100元.结果保留8位小数:N<=2000 解题过程: 1.很容易看出这题的图论模型,每条边的权值就是(1- ...

  7. C#保存登录用户名供其他页面调用

    一.保存登录用户名供其他页面调用 步骤: (1)项目自带的Program.cs,类方法里定义登录的用户名为全局变量loginid,这样整个项目都可以调用它 static class Program { ...

  8. 数据结构-AVL树

    实现: #ifndef AVL_TREE_H #define AVL_TREE_H #include "dsexceptions.h" #include <iostream& ...

  9. exit(0)与exit(1)、return区别

    exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: return():返回函数,若在主函数中,则会退出函数并返回一值. 详细说: 1. return返回函数值,是关键字 ...

  10. SharePoint 2013 Nintex Workflow 工作流帮助(十三)

    博客地址 http://blog.csdn.net/foxdave 工作流动作 35. Delegate Workflow Task(User interaction分组) 该操作将委托未处理的工作流 ...