Go语言学习笔记(四)

一 使用函数

函数是编程的一个核心要素,在Go语言中,函数的重要性不言而喻,在学习关于函数的使用上,可以结合python中的函数来学习,因为和python一样,Go也支持数量不定的参数和多个返回值(返回值列表)

1.1 函数是什么?

函数是一个接收输入产生输出或执行一定动作的元件,可以类比与数字逻辑中的芯片(74136,74147???)

1.1.1 函数的结构

这一点在之前的笔记中有提到

	func <函数名> (<参数名> <参数类型>) <返回值类型>{
		<函数体>
		return <value>(或空)
	}

这里要注意{要和关键词func位于同一行,如果函数声明了返回值,函数体必须用return语句结束

1.1.2 编写函数要注意什么

在这里插入图片描述在这里插入图片描述

1.1.3 函数返回多个值

package main

import "fmt"

func getPrize()(int,string){
	i := 2
	s := "goldfish"
	return i,s
}

func main(){
	quantity, prize := getPrize()
	fmt.Printf("You won %v %v\n",quantity,prize)
}

当函数返回多个值时要注意三个元素之间一一对应:
1.返回类型列表
2.返回值列表
3.调用列表
简单来说就是对应位置的类型要保持一直

1.2 定义不定参数函数

不定参数函数是指参数数量不确定的而函数。通俗地说,这意味着它们可以接受可变数量的参数。在Go语言中,能够传递可变数量的参数,但他们的类型必须与函数签名指定的类型相同。要指定不定参数,可以使用...(注意这里不是省略号的一半,而是三个小数点,对没错,是键盘右下角的那个)、实例如下:

package main

import "fmt"

func sumNumber(numbers ...int) int {
	total := 0
	for _, number := range numbers {
		total += number
	}
	return total
}

func main() {
	result := sumNumber(1, 2, 3, 4)
	fmt.Printf("The result is %v\n", result)
}

我觉得这里for后面的_是和number联合使用的,目的是保证:=的左边始终存在新的变量

1.3 使用具名返回值

具名返回值让函数能够在返回前将值赋给具名变量,这将助于提升函数的可读性,使其功能更明确。要使用具名返回值,可在函数签名的返回值部分指定变量名。如下:

func sayHi()(x , y string){
	x = "hello"
	y = "world"
	return
}

这个签名指定将返回两个值,它们类型都为string:它还制定了变量名(x和y),可以在函数体中给它们赋值。
这个函数体中,在终止语句return前给具名变量进行赋值。使用具名返回值时,无须显式地返回相应的变量。这被称为裸(naked)return语句。

package main
import "fmt"
func sayHi() (x, y string) {
	x = "hello"
	y = "world"
	return
}
func main() {
	fmt.Println(sayHi())//输出hello world
}

调用具名返回值函数时,将按声明顺序返回具名变量。这里的函数中的x,y并没有使用简短变量声明,因为在函数声明后面声明返回值的时候已经声明了x,y

func swyHi() (x,y string) {
	x = "hello"
	y = "world"
	z := "ubu"
	a := "dasad"
	return z,a
}

这个函数返回的将是ubu dasad,这是因为我们显式地定义了返回值

1.4 使用递归函数

递归函数是不断调用自己直到满足特定条件的函数。要在函数中实现递归,可将 调用自己的代码 作为终止语句中的返回值。

package main
import "fmt"
func feedMe(portion int, eaten int) int {
	eaten = portion + eaten
	if eaten >= 5 {
		fmt.Printf("I'm full! I've eaten %d\n", eaten)
		return eaten
	}
	fmt.Printf("I'm still hungry! I've eaten %d\n", eaten)
	return feedMe(portion, eaten)
}
func main() {
	fmt.Println(feedMe(1, 0))
}

输出结果如下:
在这里插入图片描述

1.5 将函数作为值传递

Go语言提供了一些函数式编程功能,如能够将一个函数作为参数传递给其他函数(类似于C++的函数指针)。从本质上来说,Go将函数视为一种类型,因此可将函数赋给变量,以后在通过变量来调用他们。

package main
import "fmt"
func anotherFunction(f func() string)string{
	return f()
}
func main(){
	fn := func() string{
		return "function called"
	}
	fmt.Println(anotherFunction(fn))
}

函数anotherFunction的签名中包含一个子函数签名,这表明这个参数是一个返回字符串的函数。接受函数依然需要声明其返回类型,它可以是任何类型,但这里是字符串。

 参考书籍
 [1]: 【Go语言入门经典】[英] 乔治·奥尔波 著 张海燕 译
题外话
  1. 高产的一天,这本书关于Go语言的讲解有些浅只能这么说
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是兔不是秃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值