当前位置: 首页 > 科技观察

Go语言中的函数和指针

时间:2023-03-11 20:32:46 科技观察

函数函数是一个基本的代码块,一般用于复用需要重复执行的代码。在go中,函数是“一等公民”,这和js类似,就是函数可以作为变量传递。由于函数声明是强类型语言,所以不同于js。在函数声明的过程中,需要指定参数和返回值的类型。funcmax(n1,n2int)int{varresultintifn1>=n2{result=n1}ifn1=n2{result=n1}ifn1=n2{result=n1}ifn1=length{returntrue,0}varresult=slice[i]i++returnfalse,result}}funcmain(){slice:=[]int{1,2,3,4,5}nextNum:=generate(slice)done,result:=nextNum()//直到完成notequalFalse,stopfordone==false{fmt.Println(result,done)done,result=nextNum()}fmt.Println(result,done)}pointer我们之前常说的变量一般指的是一个值,而指针是指向此变量在内存中存储的位置。指针也可以存储在变量中,称为“指针变量”。指针变量声明在声明指针变量时,需要知道指针指向的是哪一种类型,因为不同类型的值占用的内存空间大小不同。仅仅知道内存地址是不够的,还需要知道变量在内存中占用了多少空间。声明一个指针变量,只需要在类型前加*即可。varpoint*int//声明int类型的指针变量赋值给指针变量,需要在相应类型的变量前加上&符号,表示变量的地址。vari=1varpoint*intpoint=&i值传递和引用传递一般情况下,我们传入函数的参数只是变量的值。这种传递称为值传递,函数内参数的修改不会影响外部变量。.funcaddOne(slice[]int,numberint){slice=append(slice,number)fmt.Println("innerslice=",slice)}slice:=[]int{1,2,3}addOne(slice,100)fmt.Println("outerslice=",slice)在上面的代码中,我们编写了一个函数,将一个值附加到传入的切片中。调用之后,我们会发现外层切片的值并没有改变。如果外部变量的值需要在函数调用后改变,则需要将变量的指针传递给函数。这种转移称为参考转移。这样,在函数中修改参数,就会影响到外部变量。//此时slice是一个指针变量funcaddOne(slice*[]int,numberint){//可以通过*slice*slice=append(*slice,number)fmt取出slice指针对应的值.Println("innerslice=",*slice)}slice:=[]int{1,2,3}addOne(&slice,100)fmt.Println("outerslice=",slice)