【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("我想第一个执行")
}
相关推荐
老赵的博客1 分钟前
c++ 杂记
开发语言·c++
jimmy.hua3 分钟前
[C++刷怪笼]:set/map--优质且易操作的容器
开发语言·c++
程序员爱钓鱼11 分钟前
Go语言实战案例-开发一个Markdown转HTML工具
前端·后端·go
桦说编程40 分钟前
爆赞!完全认同!《软件设计的哲学》这本书深得我心
后端
thinktik1 小时前
还在手把手教AI写代码么? 让你的AWS Kiro AI IDE直接读飞书需求文档给你打工吧!
后端·serverless·aws
w2sfot1 小时前
Passing Arguments as an Object in JavaScript
开发语言·javascript·ecmascript
郝学胜-神的一滴1 小时前
避免使用非const全局变量:C++中的最佳实践 (C++ Core Guidelines)
开发语言·c++·程序人生
搞一搞汽车电子2 小时前
S32K3平台eMIOS 应用说明
开发语言·驱动开发·笔记·单片机·嵌入式硬件·汽车
总有刁民想爱朕ha2 小时前
车牌模拟生成器:Python3.8+Opencv代码实现与商业应用前景(C#、python 开发包SDK)
开发语言·python·数据挖掘