zoukankan      html  css  js  c++  java
  • go 数组(array)、切片(slice)、map、结构体(struct)

    一 数组(array)

      go语言中的数组是固定长度的。使用前必须指定数组长度。

      go语言中数组是值类型。如果将数组赋值给另一个数组或者方法中参数使用都是复制一份,方法中使用可以使用指针传递地址。

      声明:

    var arrayName = [arraySize]dataType{xxx,xxx,xxx....}  //定义全局数组
    例如:var b = [10]int{1,2,3,4,5,6,7,8,9,0}
       var b = [10]int{1,2,3,4}                //不足自动补0
    arr := [...]int{1,2,3,4,5}
    //循环
    for _,i := range arr { fmt.Println(i) }

    多维数组:

    //初始化:
    var a = [3][4]int{[4]int{1,2,3},[4]int{1,2,3},[4]int{1,2}} //不足补0
        //创建数组声明changdu
        var aaa1 = [5]int{1,2,3,4}
        fmt.Println(aaa1)
    
        //创建数组不声明长度
        var aaa2 = [...]int{1111,2222,3333,4444,55555,6666}
        fmt.Println(aaa2)
    
        //创建数组并初始化其中部分
        var aaa3 = [5]string{1:"aaa",2:"bbb"}
        fmt.Println(aaa3)

    切片(slice)

      指向底层数组的指针。不需要定义长度。和数组在写法上的区别就是不需要指定长度

      对比:

        v := [2]string{"123","123"}  //数组
    
        v := []string{"123","123"}  //切片

      默念:数组有长度,切片没长度,数组有长度,切片没长度......

      如果多个slice指向同一个底层数组,其中一个改变了数组的值,则其他如果包括这个key的值也会改变

      如果slice增加时,导致数组超长,则会再次分配一个新的数组。其他slice可能就会指向这个新的底层数组,这个前一个改变了底层数组的值可能是第一个底层数组,所以第二个slice的key 指向的是第二个底层数组。这点有点混淆。来自无闻视频教程中讲解。

      方法:

        append(arr,1,2,3,4,5)  //将1,2,3,4,5追加到arr中
    
        slice := arr[开始:结束]  //指向数组中开始到结束的
    
        copy(arr1,arr2)     //用arr2中的值替代arr1中的值,通过key 对应的代替  copy(arr1[开始:结束],arr2[开始:结束]) 指定替换部位

    map:

      是一个key=>value的hash结构

      key是除func、slice、map、array外的类型

      声明初始化  m := map[string]string{}

      赋值一个     m["key1"] = "val1"

      取值     v := m["key1"]

      删除一个值  d := delete(m,"key1")

      取值的时候可以返回两个值。另一个可以判断是否存在

      val,isset := m[2]

    struct(结构体)

      个人理解:一种类型;

      例如:

        type person{

          Name string

          ages int

        }

        使用该类型需要定义该类型中两个属性

        

    所有值传递不会改变内存中的值,只有引用类型该可以改变内存中的值

    内建函数 make 用来为 slice,map 或 chan 类型分配内存和初始化一个对象(注意:只能用在这三种类型上),第一个参数也是一个类型而不是一个值

    func make(t Type,size IntegerType) Type

    make slice

    var slice_ []int = make([]int,5,10)
    fmt.Println(slice_)
    
    var slice_1 []int = make([]int,5)
    fmt.Println(slice_1)
    
    var slice_2 []int = []int{1,2}
    fmt.Println(slice_2)
    
    打印结果:
    [0 0 0 0 0]
    [0 0 0 0 0]
    [1,2]

    make map

    var m_ map[string]int = make(map[string]int)
    m_["one"] = 1
    fmt.Println(m_)
    
    var m map[string]int = map[string]int{"1":1}
    m["2"] = 2
    fmt.Println(m)
    
    打印结果:
    map[one:1]
    map[1:1 2:2]

    mak channel

    var c = make(chan bool)
  • 相关阅读:
    flex产生水平滚动条
    js中的类
    typescript
    vue练习
    vue-cli2脚手架搭建
    Luogu P1970 花匠
    Luogu P1311 选择客栈
    Luogu P1016 旅行家的预算
    Luogu P1144 最短路计数
    Luogu P1091 合唱队形
  • 原文地址:https://www.cnblogs.com/jackylee92/p/6171897.html
Copyright © 2011-2022 走看看