Golang | 函数的定义和使用
函数
函数是go
语言最基本的单位,每一个程序都包含着很多函数,编写多个函数的主要目的是将一个需要很多行代码的复杂问题分解决为一系列简单的问题,通过解决简单的问题,最终解决这个复杂的问题。
“不要重造轮子”,相信你已经听过很多这样的话,这里的轮子指的就是代码中的 函数 或者 方法,一个好的程序一定非常注意 DRY原则
(不要重复你自己 Don't Repeat Yourself),意思是执行特定任务的代码只能在程序里面出现一次。
函数的分类
在 Go 语言中,函数分为三类:
- 普通的函数
- 匿名函数
- 特定结构体的方法
函数声明
函数声明包括 函数名、形式参数列表、返回值列表、函数体。
func 函数名(形式参数列表) (返回值列表){
函数体
}
func
:定义函数的关键字。
函数名: 不可以重复。
形式参数列表:函数的参数名和参数类型,这些参数会作为局部参数参加运算,由调用者提供。
返回值列表:返回值的类型,也可直接在返回值上面定义变量名。返回值列表也是可以为空,当返回值为一个的时候,括号可以省略。
函数体:这个函数具体的执行内容。
函数的简单使用
函数最重复的作用就是提高代码可读性和减少代码重复率,所以我们在设计函数的时候,需要考虑到这两点才行。
比如说我们需要打印一段话,并且这段话非常的常用,我们就可以把这段话给提取出来。例如:
func main() {
// 多次调用这个函数
printHelloWorld()
printHelloWorld()
printHelloWorld()
}
func printHelloWorld() {
fmt.Println("Hello world!")
fmt.Println("你好 世界!")
}
当代码量少的时候,看不出来函数的作用,但是当代码量加大的时候,函数重要性就体现出来了。现在随便一个程序代码量都2、3万行往上,所以必须要使用函数。
函数的参数传递
函数的参数传递和返回值是函数之间进行数据传递的主要方式,有几种方式:
不传参数,没有返回值:
func printHelloWorld(){
fmt.Println("Hello world!")
}
传参数,没有返回仠
func addNum(a,b int){
// 两个值相加,并打印
fmt.println("a + b = ",a + b)
}
当两个参数类型相同时,可以省略前面参数的类型
传参数,有一个返回值
func addNum1(a,b int) int {
// 两个值相加,并返回
return a + b
}
func addNum2(a,b int) (c int) {
c = a + b
return
}
当返回值定义变量名时,返回时就不用指定返回那个变量了,直接 return
就可以返回了
传参数,有多个返回值
func compareNUm(a,b int) (max,min int){
if a > b {
max = a
min = b
}else {
max = b
min = a
}
return
}
有多个返回值时,返回值列表必须加 ()
实参
实参就是调用函数时,传递的参数列表:
func main(){
max, min := compareNUm(1,2)
fmt.Printf(max,min)
}
compareNUm(1,2)
括号中传递的两个参数就是实参。
形参
形参就是函数接收参数的地方:
func compareNUm(a,b int) (max,min int){
if a > b {
max = a
min = b
}else {
max = b
min = a
}
return
}
compareNUm(a,b int)
括号中的内容的两个参数就是形参。
不定参数
当传递参数时,如果参数太多,如果一一传递的话,会非常的不好看,并且也不知道到底有多少参数时,可以用不定参数来解决这个问题。
先定义一个不定参数的函数:
func add(arr ...int) int {
sum := 0
for _, v := range arr {
sum += v
}
return sum
}
不定参数也可以接收不同的值,比如 fmt 包里面的 Println 方法,它的形参列表就是一个不定参数据:
// Println formats using the default formats for its operands and writes to standard output.
// Spaces are always added between operands and a newline is appended.
// It returns the number of bytes written and any write error encountered.
func Println(a ...interface{}) (n int, err error) {
return Fprintln(os.Stdout, a...)
}
不定参数,只可以为参数列表的最后一个值
关注公众号,随时获取最新资讯
细节决定成败!
个人愚见,如有不对,恳请斧正!