Go语言中的函数

函数就是一段代码的封装,把一段抽象的逻辑封装成一个函数,给他起个名,每次需要用到的时候直接调用函数名就可以。

函数的写法

基本语法:

func 函数名 (形式参数 形式参数类型) (返回值 返回值类型) { }

返回值

一个函数的返回值可以有一个,可以有多个,也可以没有返回值。

package main

import "fmt"

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

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

func multR(a int, b int) (int, int) {
	return a + b, a - b
}

func printNum(a int) {
	fmt.Println(a)
}

func main() {
	fmt.Println(add(1, 2))
	fmt.Println(multR(5, 2))
	printNum(23)
}

当给返回值起名的时候,可以直接在函数体内使用该变量,return语句后可以不加内容

参数

一个函数可以拥有多个或者一个或者没有参数,当参数类型相同时,可以简写

func foo(x int, y int, z int) {
	// come code here
}

func foo1(x, y, z int, a, b string, p, q bool) {
	// some code here
}

可变参数

可变参数只能放在参数的最后一个,在传入实际参数的时候可以传入一个、多个或者零个,该参数会形成一个该数据类型的切片

func foo2(name string, ints ...int) (res string) {
	// some code here
}

defer

defer关键字修饰的语句可以延时运行,他们会在函数返回前逆序运行

func deferFunc() {
	fmt.Println("Now, I open a resource.")
	defer fmt.Println("I will close the resource!")
	defer fmt.Println("I will be fine.")
	fmt.Println("I'm doing somthing with the resource...")
}

{% p red, 如果一个函数有返回值,那么defer语句会在返回值赋值之后、真正返回之前执行!%}

函数类型

函数也属于一种类型,但是参数和返回值类型不同的函数又属于不同的类型,比如func(int, int) intfunc(string, string)func(float64, int) bool

函数也可以作为参数或者返回值传递,这种函数称为高阶函数

func f1(x, y int) int {
	return x + y
}

func f2(f func(int, int) int, x, y int) (int, int) {
	return f(x, y), x - y
}

func f3(x int) func(int) int {
	ret := func(p int) int {
		return x + p
	}
	return ret
}

匿名函数

对于那些没有名字的函数称为匿名函数,通常用于一个函数的内部

func(类型)类型{}

如果是只用一次的函数可以在匿名函数的最后加上一对()形成立即执行函数

package main

import "fmt"

func main() {
	var calFunc = func(x, y int) (int, int, int, int) {
		return x + y, x - y, x * y, x / y
	}

	sum, _, _, quotient := calFunc(10, 2)

	func(x, y int) {
		fmt.Println(x + y)
	}(sum, quotient)
}

闭包函数

闭包(Closure)对于初学者来说肯定是晦涩难懂的,要理解闭包,我们首先必须得理解Go中变量的作用域函数可以作为返回值这两个概念。

我们先来看一个函数:

func paraClosure(x int) func() int {
    res := func () int {
        return x + 200
    }
    return res
}

这个函数它接收一个int类型的变量,返回一个func() int类型的函数

在声明匿名函数的期间,用到了paraClosure函数中的x变量,这种函数就叫做闭包函数

闭包的实际使用

如果在工作期间,你的同事写了这样的一个函数

func exec(f func()) {
	fmt.Println("This is func exec")
	f()
}

然后你有这样的一个函数

func variable(x, y int) {
	fmt.Println("This is func variable")
	fmt.Println(x + y)
}

现在你需要把variable函数作为参数传递给exec函数

这时候你就需要用到闭包函数(closure function)

这个闭包函数(closure function)需要接收一个两个int类型参数的函数,返回一个无参无返回值的函数

func closure(f func(int, int), m, n int) func() {
	return func() {
		f(m, n)
	}
}

GO语言中的内置函数

内置函数 介绍
close 主要用来关机channel
len 用来求长度,比如string、array、slice、map、channel
new 用来分配内存,主要用来分配值类型,比如int、struct。返回的是指针
make 也是用来分配内存的,主要用于分配应用类型比如chan、map、slice。返回的是具体的引用
append 用来追加元素到数组、slice中
panic、recover 用来做错误处理
posted @ 2021-01-29 11:49  FarajMujey  阅读(113)  评论(0)    收藏  举报