【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("我想第一个执行")
}
相关推荐
Charlie_Byte13 分钟前
Spring AI 2 手把手:把 filesystem MCP Server 跑通(SSE / stdio + 真调工具)
后端
程序猿DD21 分钟前
OctaFuse Gateway 2.11.0:流式请求优化、用户折扣策略与错误契约升级
前端·后端
Bs_MoneyMagnet26 分钟前
基于springboot+vue的非遗物质文化遗产系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
计算机毕设定制辅导-无忧学长40 分钟前
《基于SpringBoot的未成年人健康知识科普平台的设计与实现》
java·开发语言·vue.js·spring boot·未成年人健康知识科普平台
打工仔折腾 AI1 小时前
Prometheus 告警推钉钉:从单群 Webhook 到跨网络 Alertmanager 实战
人工智能·后端·python·性能优化
Ivanqhz1 小时前
Ping-Pong 双缓冲
开发语言·人工智能·python·深度学习·mlir
m0_734571761 小时前
深入理解C++ RAII
开发语言·c++
console.log('npc')1 小时前
06 — Model 层:数据模型与操作
前端·后端·node.js·express
泡海椒1 小时前
jquick-pdf 表格实战:动态数据 PDF 报表生成
java·开发语言·pdf
aramae1 小时前
模拟实现memset()(C语言)
c语言·开发语言·后端