【Golang】Go语言函数

Go语言函数

文章目录

Go函数特点

  • 无需声明原型
  • 支持不定 变参
  • 支持多返回值
  • 支持匿名函数和闭包
  • 函数也是一种类型,一个函数可以赋值给变量
  • 不支持嵌套,一个包不能有两个名字一样的函数
  • 不支持 重载
  • 不支持 默认参数

一、函数的基本格式定义

go 复制代码
package main

import "fmt"

func main() {
    // 调用函数
	a(3, "现在是大于1")

}

// 定义一个名为 a 的函数
// 传递两个变量 (类型: int string)
func a(data1 int, data2 string) {

	if data1 > 1 {
		fmt.Println(data1)
	} else {
		fmt.Println(data2)
	}

}
go 复制代码
package main

import "fmt"

func main() {
    // r1和r2将会对应接收返回参数ret1和ret2
	r1, r2 := a(0, "现在是小于1")
	fmt.Println(r1, r2)

}

func a(data1 int, data2 string) (ret1 int, ret2 string) {

	ret1 = data1
	ret2 = data2
    // 直接写一个return相当中: return ret1, ret2
	return

}

二、匿名函数

bash 复制代码
func main() {

	b := func(data1 string) {
		fmt.Printf(data1)
	}
	b("我是匿名函数")

}

三、自执行函数

  • 自执行函数只会执行一次
go 复制代码
func main() {

	(func() {
		fmt.Println("执行一次函数")
	})()

}

四、闭包函数

  • 一个函数返回一个函数就叫闭包函数
go 复制代码
func main() {
	mo()(4)
}

func mo() func(int) {
	return func(num int) {
		fmt.Println("闭包函数", num)
	}

}

五、延迟调用

go 复制代码
func main() {
	defer mo()  // 虽然放在了第一个, 但是前面加上defer就会变为最后一个执行
	fmt.Println("这是第一个执行")
	fmt.Println("这是第二个执行")

}

func mo() {
	fmt.Println("我想第一个执行")
}
相关推荐
MrSYJ10 分钟前
UserDetailService是在什么环节生效的,为什么自定义之后就能被识别
java·spring boot·后端
张志鹏PHP全栈11 分钟前
Rust第一天,安装Visual Studio 2022并下载汉化包
后端
estarlee18 分钟前
公交线路规划免费API接口详解
后端
无责任此方_修行中30 分钟前
从 HTTP 轮询到 MQTT:我们在 AWS IoT Core 上的架构演进与实战复盘
后端·架构·aws
考虑考虑36 分钟前
postgressql更新时间
数据库·后端·postgresql
科大饭桶1 小时前
C++入门自学Day11-- String, Vector, List 复习
c语言·开发语言·数据结构·c++·容器
范范之交1 小时前
JavaScript基础语法two
开发语言·前端·javascript
Felven1 小时前
C. Game of Mathletes
c语言·开发语言
long3161 小时前
构建者设计模式 Builder
java·后端·学习·设计模式
点云SLAM1 小时前
C++中内存池(Memory Pool)详解和完整示例
开发语言·c++·内存管理·内存池·new/delete·malloc/free