19、函数的类型

1.函数也是有类型的

func (参数列表类型的数据类型)(返回值列表的数据类型)

/**
 * @author ly (个人博客:https://www.cnblogs.com/qbbit)
 * @date 2023/5/11  22:49
 * @tags 喜欢就去努力的争取
 */
package main

import "fmt"

func main() {

	a := 10
	fmt.Printf("%T\n", a)

	b := [4]int{1, 2, 3, 4}
	fmt.Printf("%T\n", b)

	c := []string{"Python", "Java", "GO"}
	fmt.Printf("%T\n", c)

	d := make(map[int]string)
	d[1] = "zs"
	fmt.Printf("%T\n", d)

	// 函数的数据类型
	fmt.Printf("%T\n", funType)

	fmt.Printf("%T\n", funType2)

	fmt.Printf("%T\n", funType3)

	fmt.Printf("%T\n", funType4)
}

func funType() {

}

func funType2(num int) string {
	return "ly"
}

func funType3(s string) string {
	return "ly"
}

func funType4(a, b, c string, d map[int]string, e []int, f [2]string) (m1 map[string][]int, s1 string, arr [4]int) {
	arr1 := [4]int{1, 2, 3, 4}
	return nil, "", arr1
}

image

2.函数的本质

函数的本质是一个特殊类型的变量

/**
 * @author ly (个人博客:https://www.cnblogs.com/qbbit)
 * @date 2023/5/15  20:52
 * @tags 喜欢就去努力的争取
 */
package main

import "fmt"

func main() {

	// 定义一个函数类型的变量
	var f1 func(int, int)
	// 把fun1赋值给f1
	f1 = fun1
	// 调用函数
	f1(2, 3)

	/**
	注意加括号和不加括号的区别
		不加括号:指的是函数的内存地址
		加括号:指的是函数的调用
	*/
}

func fun1(a, b int) {
	fmt.Println(a, b)
}

3.匿名函数

匿名:没有名字
匿名函数:没有名字的函数

/**
 * @author ly (个人博客:https://www.cnblogs.com/qbbit)
 * @date 2023/5/15  20:59
 * @tags 喜欢就去努力的争取
 */
package main

import "fmt"

func main() {

	// 正常的函数调用
	fun2("在学习GO语言")

	// 匿名函数调用
	res := func(a int) int {
		return a * 10
	}(20) // 调用函数,立即把匿名函数的返回值赋值给res
	// 这个匿名函数就有点类似js中的立即调用函数
	fmt.Println(res)

	func2 := func(a int) int {
		return a + 100
	} // 把匿名函数赋值给一个func2变量
	res2 := func2(10) // 调用func2函数
	fmt.Println(res2)
}

func fun2(a string) string {
	return "ly" + a
}

定义一个匿名函数,直接进行调用。通常只能使用一次这个匿名函数。因为前面我们知道函数其实也是一个特殊的变量,那么我们可以吧匿名函数赋值给某一个变量,然后我们就可以进行多次调用了

4.Go语言中支持函数式编程

  • (1) 将一个匿名函数作为另外一个函数的参数,回调函数
  • (2) 将匿名函数作为另外一个函数的返回值,可以形成闭包的结构

这一块后面学习整理

posted @   我也有梦想呀  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示