Golang函数

发布时间:2024年01月13日

目录

函数变量

可变参数

匿名函数与闭包


Golang中用func来声明函数,格式如下:?

func 函数名(参数列表) 返回值类型{  //若没有返回值,则不用写
  函数体
}

比如定义一个名为Add的函数,返回两数之和。

func Add(x int,y int) int {  //此处可简写:func Add(x,y int) int
  return x+y
}

函数变量

Golang中,函数也是类型,可以存在变量中。

格式:

var 变量名 func()
//赋值:
变量名=函数名

示例:

package main

import "fmt"

func Minus(x,y int) int {
  return x-y
}
func main() {
  a:=10
  b:=5
  var minu func(x,y int) int
  minu=Minus
  n:=minu(a,b)
  fmt.Print(a,"-",b,"=",n)
}

可变参数

Go支持可变参数。

格式如下:

func 函数名(固定参数列表,v ...T) 返回值类型 {  //如果有固定参数,可变参数必须放在参数列表的末尾
  函数体
}

“v ...T”代表的其实就是v为T类型的切片。

示例,还是用Add函数,但可以将任意多个数相加:

package main

import "fmt"

func Add(slice... int) int {
  sum:=0
  for _,value:=range slice {
      sum=sum+value
  }
  return sum
}
func main() {
  fmt.Print("1+2+3+4+5+6+7+8+9=",Add(1,2,3,4,5,6,7,8,9))
}

匿名函数与闭包

匿名函数就是在需要函数时定义函数,常用于实现闭包。

匿名函数格式:

func(参数列表) 返回值类型 {
  函数体
}

匿名函数的调用:

在定义的同时调用匿名函数。

示例:

package main

import "fmt"

func main() {
  func(a,b int) {
      fmt.Print(a+b)
  }(1,3)
}

输出4。

闭包就是包含了自由变量的匿名函数,其中的自由变量即使已经脱离了原有的自由变量环境也不会被删除,在闭包的作用域内可继续使用这个自由变量,同一个匿名函数和不同的引用环境组成了不同的闭包。闭包可对作用有内的变量的引用进行修改。

例子:

package main

import "fmt"
func Add(i int) func() int {
  return func() int {
      i++
      return i
  }
}

func main() {
  a1:=Add(0)
  fmt.Println(a1())
  a2:=Add(99)
  fmt.Print(a2())
  fmt.Printf("\na1闭包的地址为:%p a2闭包的地址为:%p",&a1,&a2)
}

运行结果:

1
100
a1闭包的地址为:0xc00001e018 a2闭包的地址为:0xc00001e038

小结

Golang中,用关键字func定义函数。

Go语言支持可变参数,即参数的个数没有固定(可变参数要放在参数列表的最后)

闭包就是包含了自由变量的匿名函数,其中的自由变量即使已经脱离了原有的自由变量环境也不会被删除。

附录

Golang内置函数

Go自带了许多函数,使用时直接调用。简要列举出了Go的一些内置函数。

f670181c1d7c47ac988ef3b6d0ea3a6d.png

对切片的操作做一个简单地示例:

package main

import "fmt"
func main() {
  sourceSlice:=[]int{1,2}
  sourceSlice=append(sourceSlice,3,4)
  fmt.Println("sourceSlice:",sourceSlice)
  targetSlice:=make([]int,3)
  copy(targetSlice,sourceSlice)
  fmt.Printf("复制成功!\n")
  fmt.Println("length of targetSlice:",len(targetSlice))
}

运用Go的内置函数可解决许多问题!

求个点赞!

文章来源:https://blog.csdn.net/2301_79555427/article/details/135539864
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。