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

2018-09-04  本文已影响0人  pp_5793

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切片时,可以切到后面(也就是图中阴影部分)的值。

上一篇下一篇

猜你喜欢

热点阅读