美文网首页
GO语言学习笔记2018-09-04

GO语言学习笔记2018-09-04

作者: pp_5793 | 来源:发表于2018-09-04 20:44 被阅读0次

    1 go语言在参数传递中只有值传递一种方式

    package main

    import "fmt"

    func swap(a, b int) (int, int) {

                 return b, a

    }

    func main() {

                     a, b := 3, 4      //赋值

                    a, b = swap(a, b) //接住返回的值

                    fmt.Println(a, b)

    }

    输出结果为: 4 3 

    上面的函数 swap也可以写成以下形式:

    func sawp(a,b *int) {

            *a,*b = *b,*a

    }

    调用形式为:

    a,b := 3,4

    swap(&a,&b)

    fmt.Println(a,b)

    2 go语言与数组表示:

    package main

    import "fmt"

    func main() {

                var arr1 [5]int   // 定义数组时需要做到名字和声明长度在前,类型在后

                     arr2 := [3]int{1, 2, 3}

                     arr3 := [5]int{2, 4, 6, 8, 10}

                var grid [4][5]int            /*这里是二维数组,需要注意的是表达式不能写作: grid:= [4][5] int .程序会报错*/

                fmt.Println(arr1, arr2, arr3, grid)

               for _, v := range arr3 {

                               fmt.Println(v)

    /*注意range的用法,range 是一个关键字,可以用来遍历数组,这里的下划线表示省略一个变量比如本来是写做 for i,v := range arr3{   fmt.Println(i,v)}的,现在我不想用i了,便可以用_来代替。就如同该式*/

                  }

    }

    输出结果见 jc22.go

    3 .slice

    package main

    import "fmt"

    func main() {

                          arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}

                          s := arr[2:6]

    /*在这里[2:6]的形式表示slice(切片),其中计算机语言里的[。。。]一般表示左闭右开*/

                     fmt.Println("arr[2:6]=", s)

    }

    故该程序输出结果为:arr[2,6]=2,3,4,5

    基本概念:slice可以理解为是一个数据结构,它可以理解为是对下层数组的一个view,举一个程序例子如下:

    其输出结果如下: 

    我们作出以下解释:现在的s1=[2,3,4,5,6,7],我们在s1的基础上进行updateSlice函数后,里面的s[0]变为100,注意这时原来的2的位置也变为100了,故s1=[100,3,4,5,6,7],再对s2进行同样的操作,这时s2=[100,1, 100,3,4,5,6,7].而原数组也变为[100,1,100,3,4,5,6,7]      

    我们再来看reslice操作,经过再一次reslice,s2=[100,1,100,3,4],在经过一次reclice,变为[100,3,4].

    现在我们再加深一下对slice的理解

    从图中我们可以看到阴影部分为slice隐藏的数据,再一次slice时如果没有超出阴影的长度(你切多了)我们就可以取到那里的值。

    例子:

    输出结果为:

    我们在这里加入了Extending slice,并把值变回最初的样子,以便我们观察:

    s1=[2,3,4,5],再s1基础上进行切片得到s2=[5,6].。但是这里s1只显示了[2,3,4,5],没有显示的部分是s[4]=6,s[5]=7,在S2切片时,可以切到后面(也就是图中阴影部分)的值。

    相关文章

      网友评论

          本文标题:GO语言学习笔记2018-09-04

          本文链接:https://www.haomeiwen.com/subject/lozwwftx.html