首页 > 编程语言 >Go基础编程:自定义函数

Go基础编程:自定义函数

时间:2022-09-28 18:09:53浏览次数:58  
标签:自定义 int 编程 v1 v2 参数 func Go 返回值


定义格式

函数构成代码执行的逻辑结构。在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句。

Go 语言函数定义格式如下:

func FuncName(/*参数列表*/) (o1 type1, o2 type2/*返回类型*/) {
//函数体

return v1, v2 //返回多个值

函数定义说明:

  • func:函数由关键字 func 开始声明
  • FuncName:函数名称,根据约定,函数名首字母小写即为private,大写即为public
  • 参数列表:函数可以有0个或多个参数,参数格式为:变量名 类型,如果有多个参数通过逗号分隔,不支持默认参数
  • 返回类型:
    ① 上面返回值声明了两个变量名o1和o2(命名返回参数),这个不是必须,可以只有类型没有变量名
    ② 如果只有一个返回值且不声明返回值变量,那么你可以省略,包括返回值的括号
    ③ 如果没有返回值,那么就直接省略最后的返回信息
    ④ 如果有返回值, 那么必须在函数的内部添加return语句

函数定义

无参无返回值

func Test() { //无参无返回值函数定义
fmt.Println("this is a test func")
}

func main() {
Test() //无参无返回值函数调用

有参无返回值

普通参数列表

func Test01(v1 int, v2 int) { //方式1
fmt.Printf("v1 = %d, v2 = %d\n", v1, v2)
}

func Test02(v1, v2 int) { //方式2, v1, v2都是int类型
fmt.Printf("v1 = %d, v2 = %d\n", v1, v2)
}

func main() {
Test01(10, 20) //函数调用
Test02(11, 22) //函数调用

不定参数列表

不定参数类型

不定参数是指函数传入的参数个数为不定数量。为了做到这点,首先需要将函数定义为接受不定参数类型:

//形如...type格式的类型只能作为函数的参数类型存在,并且必须是最后一个参数
func Test(args ...int) {
for _, n := range args { //遍历参数列表
fmt.Println(n)
}
}

func main() {
//函数调用,可传0到多个参数
Test()
Test(1)
Test(1, 2, 3, 4)
}

不定参数的传递

func MyFunc01(args ...int) {
fmt.Println("MyFunc01")
for _, n := range args { //遍历参数列表
fmt.Println(n)
}
}

func MyFunc02(args ...int) {
fmt.Println("MyFunc02")
for _, n := range args { //遍历参数列表
fmt.Println(n)
}
}

func Test(args ...int) {
MyFunc01(args...) //按原样传递, Test()的参数原封不动传递给MyFunc01
MyFunc02(args[1:]...) //Test()参数列表中,第1个参数及以后的参数传递给MyFunc02
}

func main() {
Test(1, 2, 3) //函数调用

无参有返回值

有返回值的函数,必须有明确的终止语句,否则会引发编译错误。

一个返回值

func Test01() int { //方式1
return 250
}

//官方建议:最好命名返回值,因为不命名返回值,虽然使得代码更加简洁了,但是会造成生成的文档可读性差
func Test02() (value int) { //方式2, 给返回值命名
value = 250
return value
}

func Test03() (value int) { //方式3, 给返回值命名
value = 250
return
}

func main() {
v1 := Test01() //函数调用
v2 := Test02() //函数调用
v3 := Test03() //函数调用
fmt.Printf("v1 = %d, v2 = %d, v3 = %d\n", v1, v2, v3)
}

多个返回值

func Test01() (int, string) { //方式1
return 250, "sb"
}

func Test02() (a int, str string) { //方式2, 给返回值命名
a = 250
str = "sb"
return
}

func main() {
v1, v2 := Test01() //函数调用
_, v3 := Test02() //函数调用, 第一个返回值丢弃
v4, _ := Test02() //函数调用, 第二个返回值丢弃
fmt.Printf("v1 = %d, v2 = %s, v3 = %s, v4 = %d\n", v1, v2, v3, v4)
}

有参有返回值

//求2个数的最小值和最大值
func MinAndMax(num1 int, num2 int) (min int, max int) {
if num1 > num2 { //如果num1 大于 num2
min = num2
max = num1
} else {
max = num2
min = num1
}

return
}

func main() {
min, max := MinAndMax(33, 22)
fmt.Printf("min = %d, max = %d\n", min, max) //min = 22, max = 33

标签:自定义,int,编程,v1,v2,参数,func,Go,返回值
From: https://blog.51cto.com/u_3002289/5720676

相关文章

  • Go基础编程:递归函数、函数类型、匿名函数与闭包
    1.递归函数递归指函数可以直接或间接的调用自身。递归函数通常有相同的结构:一个跳出条件和一个递归体。所谓跳出条件就是根据传入的参数判断是否需要停止递归,而递归体则是......
  • Go基础编程:工作区
    工作区介绍Go代码必须放在工作区中。工作区其实就是一个对应于特定工程的目录,它应包含3个子目录:src目录、pkg目录和bin目录。src目录:用于以代码包的形式组织并保存Go源码文......
  • Go基础编程:作用域
    作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。局部变量在函数体内声明的变量、参数和返回值变量就是局部变量,它们的作用域只在函数体内:fu......
  • Go基础编程:工程管理
    概述在实际的开发工作中,直接调用编译器进行编译和链接的场景是少而又少,因为在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系。如果这样一个文件一个......
  • Go基础编程:复合类型—指针
    指针是一个代表着某个内存地址的值。这个内存地址往往是在内存中存储的另一个变量的值的起始位置。Go语言对指针的支持介于Java语言和C/C++语言之间,它既没有想Java语言那样......
  • Go基础编程:Socket编程
    1什么是SocketSocket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都可以用“打开open–>读写write/read–>关闭close”模式来操作。Socket就是该模式的一个实现,网......
  • Go基础编程:网络概述
    1网络协议从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。假设,A、B双方欲传输文件。规定:第一次,传输文件名,接收方接收到文件名,应答OK给传输方;第二次,发......
  • Go基础编程:文件操作
    1相关api介绍1.1建立与打开文件新建文件可以通过如下两个方法:funcCreate(namestring)(file*File,errError)根据提供的文件名创建新的文件,返回一个文件对象,默认权限......
  • Go语言版黑白棋(七):初始化棋子、改变角色
    功能说明启动程序时,棋盘默认有黑白棋各2枚,落子时,黑白子交替下(角色切换)原理说明示例代码packagemainimport("fmt""os""unsafe""github.com/mattn/go-gtk......
  • element的el-table表格自定义表头解决数据不更新问题
    解决方法element官网上el-table上使用插槽slot=“header”来实现自定义表头,在表头中使用el-select组件选择不同的状态,无法展示选择后的状态,或者其他需要动态更新表头数......