zoukankan      html  css  js  c++  java
  • 【转】 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遍历数组相似

    1. for k, v := range array {  
    2.     fmt.Printf("arr[%d] = %d  ", k, v)  
    3. }  
    1. foreach ($arr as $k => $v) {  
    2.     printf("arr[%d] = %d  ", $k, $v);  
    3.     //echo '$arr[' . $k . "] = " . $v . " ";  
    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(3))
        // TAG "8912"
        k, _ := strconv.Atoi("8192")
        binary.Write(buffer, binary.LittleEndian, int32(k))
        // 长度
        binary.Write(buffer, binary.LittleEndian, int16(10))
        // 字符串
        var content string = "123456789"
    
        binary.Write(buffer, binary.LittleEndian, []byte(content))
    
        binary.Write(buffer, binary.LittleEndian, int64(100))
    
        return buffer.Bytes()
    
    }
  • 相关阅读:
    面向对象方法的重载(overloading)和覆盖(overriding)。
    注意:在对象变量中存放的是引用(地址);在简单变量中存放的是数值。
    类方法中的一类特殊方法:构造方法。
    在用面向对象思想开发的过程中,可以复用对象就进行复用,如无法进行复用则开发新的对象。
    对于对象的要求:高内聚、低耦合,这样容易拼装成为一个系统。
    为什么要使用面向对象:
    什么是对象:EVERYTHING IS OBJECT(万物皆对象)
    Java如何在指定端口创建套接字?
    Java如何查找系统的代理设置?
    Java如何检查端口是否被使用?
  • 原文地址:https://www.cnblogs.com/freebird92/p/4559866.html
Copyright © 2011-2022 走看看