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

输出如下:

相关推荐
LDR00614 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术14 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
通信小呆呆14 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
码云数智-园园14 天前
C++20 Modules 模块详解
java·开发语言·spring
H__Rick14 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee14 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
swordbob14 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享14 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.14 天前
C语言--day30
c语言·开发语言
Alsn8614 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker