Golang学习笔记_02——函数

Golang测试功能应用
Golang学习笔记_01------包


函数

文章目录

    • 函数
      • [1. 定义](#1. 定义)
      • [2. 返回值](#2. 返回值)
      • [3. 命名返回值](#3. 命名返回值)
      • [4. 可变参数](#4. 可变参数)
    • 源码

Go语言中的函数是一种基本的编程结构,用于封装一段代码,以便在需要时多次调用。函数可以接收参数并返回结果,是实现代码复用和模块化编程的重要手段。

1. 定义

在Go语言中,函数通过func关键字定义。一个基本的函数定义包括函数名、参数列表、返回类型(如果有的话)、以及函数体。

当连续两个或多个函数的已命名形参类型相同时,除最后一个类型以外,其它都可以省略。

go 复制代码
package function_demo

func add(a int, b int) int {
	return a + b
}

add函数接收两个int类型的参数,并返回一个int类型的结果。

对刚刚定义的函数进行测试

go 复制代码
package function_demo

import (
	"fmt"
	"testing"
)

func TestFunctionDemo(t *testing.T) {
	fmt.Println("sum = ", add(1, 2))
}

测试结果

复制代码
=== RUN   TestFunctionDemo
sum =  3
--- PASS: TestFunctionDemo (0.00s)
PASS

2. 返回值

Go语言中的函数可以返回多个值。这在处理错误或其他需要返回多个结果的情况下非常有用。

go 复制代码
func AddAndSubtract(a int, b int) (int, int) {
	sum := a + b
	diff := a - b
	return sum, diff
}

测试方法

go 复制代码
func TestAddAndSubtract(t *testing.T) {

	sum, diff := AddAndSubtract(100, 99)
	fmt.Println("sum = ", sum, "\n", "diff = ", diff)

}

输出结果

复制代码
=== RUN   TestFunctionDemo2
sum =  199 
diff =  1
--- PASS: TestFunctionDemo2 (0.00s)
PASS

3. 命名返回值

Go语言支持命名返回值,这可以让代码更加清晰和简洁。

命名返回值在函数定义时指定名称,并在函数体中直接使用这些名称,最后通过裸返回(即直接写return)来返回这些值。

go 复制代码
func addAndSubtractNamed(a int, b int) (sum int, diff int) {
	sum = a + b
	diff = a - b
	return sum, diff
}

测试方法

go 复制代码
func Test_addAndSubtractNamed(t *testing.T) {
	sum, diff := AddAndSubtract(1000, 99)
	fmt.Println("sum = ", sum, "\n", "diff = ", diff)
}

输出结果

复制代码
=== RUN   Test_addAndSubtractNamed
sum =  1099 
 diff =  901
--- PASS: Test_addAndSubtractNamed (0.00s)
PASS

4. 可变参数

Go语言中的函数也支持可变参数(即接收不定数量的参数)。

通过将一个参数类型设置为...T(其中T是参数类型),可以定义一个可变参数列表。

go 复制代码
func sumAll(nums ...int) int {
	sum := 0
	for _, num := range nums {
		sum += num
	}
	return sum
}

测试方法

go 复制代码
func Test_sumAll(t *testing.T) {
	fmt.Println("sum all = ", sumAll(1, 2, 3, 100, -90))
}

输出结果

复制代码
=== RUN   Test_sumAll
sum all =  16
--- PASS: Test_sumAll (0.00s)
PASS

源码

go 复制代码
// function_demo.go
package function_demo

func add(a int, b int) int {
	return a + b
}

func AddAndSubtract(a int, b int) (int, int) {
	sum := a + b
	diff := a - b
	return sum, diff
}

func addAndSubtractNamed(a int, b int) (sum int, diff int) {
	sum = a + b
	diff = a - b
	return sum, diff
}

func sumAll(nums ...int) int {
	sum := 0
	for _, num := range nums {
		sum += num
	}
	return sum
}
go 复制代码
// function_demo_test.go
package function_demo

import (
	"fmt"
	"testing"
)

func TestFunctionDemo(t *testing.T) {
	fmt.Println("sum = ", add(1, 2))
}

func TestAddAndSubtract(t *testing.T) {

	sum, diff := AddAndSubtract(100, 99)
	fmt.Println("sum = ", sum, "\n", "diff = ", diff)

}

func Test_addAndSubtractNamed(t *testing.T) {
	sum, diff := AddAndSubtract(1000, 99)
	fmt.Println("sum = ", sum, "\n", "diff = ", diff)
}

func Test_sumAll(t *testing.T) {
	fmt.Println("sum all = ", sumAll(1, 2, 3, 100, -90))
}
相关推荐
m4Rk_5 分钟前
【论文阅读】Agent 记忆机制(72):EMA——在写入前决定什么值得记住
论文阅读·人工智能·学习·开源·github
扶风ff5 分钟前
练题簿企业培训方案:统一题库、在线任务与岗位考核
学习·小程序
动词ing13 分钟前
【学习笔记】数据结构 二分查找(二分查找模板+边界处理+查找区间+旋转数组)
笔记·学习
kkkkkkkkkk_Z16 分钟前
学嵌入式和Linux应用编程|学习日记:深入理解TCP协议与网络编程实战
linux·笔记·学习
小刘在重生~19 分钟前
十六(3)、《集合扩充》CopyOnWriteArrayList 超详细解析(线程安全集合)
java·笔记·面试·职场和发展
传奇开心果编程26 分钟前
【Go入门练中学】第1课:从零开始
后端·学习·golang
维克兜率天43 分钟前
5.3 宏观因子:抬头看天
笔记·python·深度学习·算法·量化
LuminousCPP44 分钟前
数据结构-排序(五):计数排序与排序专题阶段总结|从外部归并到线性排序,再看算法边界与选型
c语言·数据结构·笔记·算法·排序算法
钓鱼的肝1 小时前
csp-j-s总结(1)
c++·笔记·算法·青少年编程
The Chosen One9851 小时前
OS第二章随手记(2.1)
linux·运维·服务器·笔记