【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("我想第一个执行")
}
相关推荐
白宇横流学长14 分钟前
基于SpringBoot实现的冬奥会科普平台设计与实现【源码+文档】
java·spring boot·后端
APIshop25 分钟前
Java爬虫1688详情api接口实战解析
java·开发语言·爬虫
Mr.Jessy44 分钟前
JavaScript高级:深浅拷贝、异常处理、防抖及节流
开发语言·前端·javascript·学习
Python编程学习圈44 分钟前
Asciinema - 终端日志记录神器,开发者的福音
后端
bing.shao1 小时前
Golang 高并发秒杀系统踩坑
开发语言·后端·golang
壹方秘境1 小时前
一款方便Java开发者在IDEA中抓包分析调试接口的插件
后端
liwulin05061 小时前
【PYTHON-YOLOV8N】关于YOLO的推理训练图片的尺寸
开发语言·python·yolo
brzhang1 小时前
A2UI:但 Google 把它写成协议后,模型和交互的最后一公里被彻底补全
前端·后端·架构
lsx2024061 小时前
C语言中的强制类型转换
开发语言
coderHing[专注前端]1 小时前
告别 try/catch 地狱:用三元组重新定义 JavaScript 错误处理
开发语言·前端·javascript·react.js·前端框架·ecmascript