go语言学习(函数)

函数定义

先简单实现一个加法函数

go 复制代码
//标准写法
func add(x int, y int) int {
	return x + y
}

//等价简写,x和y类型都是int
func add(x,y int) int {
	return x + y
}

可变参数,参数个数不一致:

go 复制代码
package main

import "fmt"

// 可变参数,传进来什么就打印什么
func add(numList ...int) {
    fmt.Println(numList)
}

func main() {
    add(1, 2, 3)//[1 2 3]
    add(1, 2, 3, 4, 5)//[1 2 3 4 5]
}

返回值

Go语言特色:Go中的函数的返回值可以有多个。

go 复制代码
package main

import "fmt"

// 多返回值
func swap(x, y string) (string, string) {
    return y, x
}

func main() {
    x, y := swap("Hello", "World")
    fmt.Println(x, y)//World Hello
}

命令返回值,可直接定义返回值,函数中做修改,return 时会直接返回命名的返回值,提高代码简洁性。

go 复制代码
package main

import "fmt"

func split(sum int) (x, y int) {
    x = sum + 10
    y = sum - x
    return
}

func main() {
    x, y := split(5)
    fmt.Println(x, y) // 15 -10
}

函数特性

Go语言中,函数和其他数据类型一样,具有相同的权力和地位,可以作为参数,也可作为返回值等等。

go 复制代码
//add 函数声明
type add func(int, int) int

//函数作为参数
func applyOperator(x,y int,op add) int {
    return op(x,y)
}

//函数作为返回值
func getMultiplier(factor int) func(int) int {
    return func(x int) int {
       return x * factor
    }
}

init函数

基本特性

  • 自动执行init()函数在包导入时自动执行,无需显式调用
  • 执行时机 :在 main()函数之前执行
  • 数量限制 :一个包可以有多个 init()函数
  • 执行顺序:按照依赖关系和声明顺序执行
go 复制代码
package main

import "fmt"

func init() {
    fmt.Println("init1")
}

func init() {
    fmt.Println("init2")
}

func main() {
    fmt.Println("main")
}

输出如下:

defer函数

注意defer和init函数不同,defer是关键字。

基本特性

  • 延迟执行:函数执行结束后执行,无论是否发生 panic
  • 栈式结构:多个 defer 按照 LIFO(后进先出)顺序执行
  • 作用域:在函数返回前执行

defer是关键字,后面必须跟一个函数调用

go 复制代码
package main

import "fmt"

func main() {

    defer fmt.Println("defer1")
    defer fmt.Println("defer2")

    fmt.Println("defer3")
}

输出如下:

相关推荐
sulikey8 分钟前
个人Linux操作系统学习笔记11 - 环境变量
linux·笔记·学习
大不点wow1 小时前
Java序列化与反序列化:让对象走出JVM
java·开发语言·jvm
阿里嘎多学长1 小时前
2026-07-22 GitHub 热点项目精选
开发语言·程序员·github·代码托管
噢,我明白了1 小时前
Java中日期和字符串的处理
java·开发语言·日期
爱刷碗的苏泓舒1 小时前
C 语言 if-else 与 switch-case 分支语句对比
c语言·开发语言
治愈系贝壳1 小时前
ARM --- day 6 时钟
linux·arm开发·学习
-银雾鸢尾-1 小时前
C#中的泛型约束
开发语言·c#
雪碧透心凉_2 小时前
while 循环与循环嵌套
开发语言·python
minglie12 小时前
zynq高频小数据量PS闭环的三个实验-第0课:目的和目标
学习
乐观勇敢坚强的老彭2 小时前
信奥C++一维数组笔记
开发语言·c++·笔记