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")
}

输出如下:

相关推荐
水云桐程序员11 分钟前
量子力学概论,量子力学概念总结
笔记·科技·学习·量子计算
shmily麻瓜小菜鸡1 小时前
TDD(测试驱动开发)详解
开发语言·javascript·typescript·node.js·ecmascript
三克的油2 小时前
java-学习1
java·开发语言·学习
j7~2 小时前
【C++微服务项目开发脚手架】(接口篇一)gflags + gtest + spdlog 接口学习笔记
c++·学习·gtest·项目开发·spdlog·gflags·c++项目微服务开发脚手架
星期八不上发条2 小时前
智能指针是什么?使用场景,循环引用解决办法,面试回答
开发语言·c++·stl
彧azz2 小时前
图的最短路径:Dijkstra与Floyd算法
数据结构·笔记·学习
OKkankan2 小时前
Python 基础进阶(三):从函数、类到 asyncio 与 FastAPI 后端开发实战
开发语言·python
泡海椒3 小时前
jquick-pdf 防止 PDF 内容分页断裂:keepTogether 属性妙用
java·开发语言·pdf
笨鸟先飞的橘猫3 小时前
系统设计复盘2026-09-18
学习