slice byte 字节数 属性的应用

slice byte 字节数 属性的应用_第1张图片

data:=[4]byte{1,2,3,4}

想转成字符串显示,试了使用

str:=string(data)
fmt.Print(str)

但是输出为空白,不知道应该怎样转换?

func main() {
    data := [4]byte{0x31, 0x32, 0x33, 0x34}
    str := string(data[:])
    fmt.Println(str)
}

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
golang中.([]byte)用法的含义是什么  ,传统意义上: str2 := string(str1)

b, ok := val.([]byte)  
// 我认为val这个interface{}类型变量的underlying type是[]byte,如果是,请将其值赋给变量b,并且ok =true,如果不是ok = false

  1. Go语言切片(Slice)
  2. 切片是可动态变化的序列,是对数组的引用引用类型,遵循引用传递的机制
  3. slice类型写作[ ]T,T是slice元素类型,var s1 []int,s1就是切片变量
    func main() {
       //创建一个数组
       var array1 [5]int = [...]int{11, 22, 33, 44, 55}
       /*
          创建切片,通过对数组的索引切片
          s1 是切片名
          array1[1:3]代表slice引用数组区间,索引1到索引3的值,注意取头不取尾,
       */
       s1 := array1[1:4]
       fmt.Println(array1)
       fmt.Println(s1)
       fmt.Println(len(s1))
       fmt.Println(cap(s1))
    }

     

数组与切片

数组是具有相同唯一类型的一组已编号且长度固定的数据项序列。数组长度最大为2Gb,它是值类型。
切片是对数组一个连续片段的引用,所以切片是一个引用类型。

按值传递和按引用传递

Go语言中函数的参数有两种传递方式,按值传递和按引用传递。Go默认使用按值传递来传递参数,也就是传递参数的副本。在函数中对副本的值进行更改操作时,不会影响到原来的变量。
按引用传递其实也可以称作”按值传递”,只不过该副本是一个地址的拷贝,通过它可以修改这个值所指向的地址上的值。
Go语言中,在函数调用时,引用类型(slice、map、interface、channel)都默认使用引用传递。

数组传递时的缺点

一般情况下,传递指针的消耗比传递副本的少,尤其是当数组特别大时。具体原因是:

    值传递需要完整的复制初始数组并将这份拷贝放到栈中,这将耗费大量运行时间,因而值传递方式的效率比较低。
    初始数组的拷贝需要占用额外的内存空间(栈中的内存)
    编译程序需要专门产生一部分用来复制初始数组的代码,这将使程序变大。

使用指针进行传递

package main

import "fmt"

func main() {
    var arr = [5]int{1, 2, 3, 4, 5}
    fmt.Println(sum(&arr))
}

func sum(arr *[5]int) int {
    s := 0
    for i := 0; i < len(arr); i++ {
        s += arr[i]
    }
    return s
}

使用切片进行传递

package main

import "fmt"

func main() {
    var arr = [5]int{1, 2, 3, 4, 5}
    fmt.Println(sum(arr[:]))
}

func sum(arr []int) int {
    s := 0
    for i := 0; i < len(arr); i++ {
        s += arr[i]
    }
    return s
}


go数组作为函数参数传递

func myfun(a *[]int) {
    fmt.Print(a)
    //a[0] = 5
    (*a)[0] = 5
    //fmt.Print("here", a, "\n")
}
func test() {
    a1 := 1
    b1 := 2
    var a []*int = []*int{&a1, &b1}
    fmt.Print(a)

}
func main() {
    var a []int = []int{1, 2, 3, 4}
    myfun(&a)
    fmt.Print(a)
    test()
}

 

你可能感兴趣的:(go)