Go语言入门到实战——09.Go语言里的函数

本文介绍了Go语言中函数的特性,包括支持多个返回值、值传递(特别是slice等的引用行为)、函数作为变量及参数、延迟执行函数(defer)以及可变长参数的使用。通过实例展示了如何在Go中定义和使用这些特性,帮助读者深入理解Go的函数机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Go语言入门到实战——00主目录
在上一讲中我们学习了Go语言的string类型的使用和相关知识。

一.Go语言里的函数的特点

1.可以有多个返回值
2.所有的参数都是值传递:slice,map,channel可能会造成传引用错觉(这个没有必要纠结)
3.函数可以作为变量的值
4.函数可以作为参数和返回值
5.函数存在返回值就必须返回,不会像一些主流语言那样返回默认的0

1.多返回值例子

package test

import (
	"math/rand"
	"testing"
)

func getMultiReturns() (int, int) {//指明返回值为两个int
	return rand.Intn(10), rand.Intn(20)
}

func TestFunc(t *testing.T) {
	t.Log(getMultiReturns())
}


2.作为参数和返回值以及变量

package test
import (
	"fmt"
	"testing"
	"time"
)
func timeSpent(inner func(op int) int) func(op int) int { //参数是函数,返回值也是函数
	return func(n int) int { //自定义函数并进行返回
		start := time.Now()
		ret := inner(n)//运行n秒
		fmt.Println("time spent is: ", time.Since(start).Seconds())//打印运行时间
		return ret //调用inner函数返回当前函数的值
	}
}

func inner(op int) int {
	time.Sleep((time.Second) * time.Duration(op))
	fmt.Println("I am inner,runtime is ", op)
	return op
}
func TestFunc(t *testing.T) {
	fun := timeSpent(inner)
	t.Log(fun(3))
}


补充1:函数参数如果类型一致的时候,不必每一个参数都写类型,只需要写最后一个即可,如下

func Test(a,b,c int){//都是整型,只需要写最后一个即可
	fmt.Println(a,b,c)
}

补充2:直接定义函数执行,例子如下

func(a int,b string,c float32) string{
	//执行的内容
}(1,"abc",1.3)

二.可变长参数和延迟运行

1.可变长参数

package test

import (
	"testing"
)

func Sum(args ...int) int {
	res := 0
	for _, val := range args {
		res += val
	}
	return res
}
func TestFunc(t *testing.T) {
	t.Log(Sum(1, 2, 3, 4))
}


2.延迟执行函数defer

package test

import (
	"fmt"
	"testing"
)

func clear() {
	fmt.Println("Clear Resources")
}
func TestFunc(t *testing.T) {
	defer clear()    //在函数执行完返回前执行或者函数执行过程中报错
					 //也会执行完改defer函数再去退出(如果是os.Exit则会失效,下面的painc
					 //是有效的,再讲错误处理章节的时候我们会继续讲解)
	t.Log("Started") //clear()由于是在最后执行,因此在"Started"之后
	panic("Err Fatal")
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值