• 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)
  • 相关阅读:
    leetcode 673. 最长递增子序列的个数 java
    leetcode 148. 排序链表 java
    leetcode 98. 验证二叉搜索树 java
    leetcode 29. 两数相除 java
    leetcode 234. 回文链表 java
    Valid Palindrome LeetCode Java
    Single Number II LeetCode Java
    Single Number LeetCode java
    Search in Rotated Sorted Array II LeetCode Java
    Search in Rotated Sorted Array leetcode java
  • 原文地址:https://www.cnblogs.com/jackylee92/p/6171897.html
Copyright © 2020-2023  润新知