Go语言的type func()用法详解

 更新时间:2022年03月23日 09:09:09   作者:西京刀客  
在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句,这篇文章主要介绍了Go语言的type func()用法,需要的朋友可以参考下

一、前置基础

1. go 函数基础

在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句。

func 函数名(参数列表) 返回值类型 {函数体内部}

Go语言是强数据类型的语言,参数是要指定类型的不然就报错。func 是函数的声明关键字。

1) 返回值
返回值的定义,是可以给返回值取一个名称的,还有一点是和其他的编程语言不一样的是在Go语言中函数的返回值可以有多个的

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

同时可以给返回值取一个别名

func addTwoNumber(a int, b int) (sum, dif int) {
return a+b, a-b
}

像这样给返回值取完名字后可以给返回值直接赋值

func addTwoNumber(a int, b int) (sum, dif int) {
sum = a+b
dif = a-b
return
}

同样这样也是可以直接返回sum,和dif两个值的。

2) 函数可变参数

func sum(numbers ...int) int {
s := 0
for i := range numbers{
s += i
}r
eturn s
}f
unc main() {
fmt.Println(sum(1,2,3,4,5))
}

像这样我们就可以传给sum函数多个值了。

2. 函数签名

函数类型 又叫 函数签名 , 一个函数 的类型就是函数定义首行去掉函数名、参数名和{,可以 使用 fmt.Printf 的”%T”格式化参数打印函数的类型。

函数类型相同
两个函数类型相同的条件是**:拥有相同的形参列表和返回值列表(列表元素的次序、个数和类型都相同),形参名可以不同 。** 以下 3 个函数的函数类型完全一样。

func add (a , b int) int { return a + b }
func sub (c int, d int) int { return c - d }
func mul (e int, f int) int { return e * f }

验证demo

package main
import "fmt"

func add(a, b int) int     { return a + b }
func sub(c int, d int) int { return c - d }
func mul(e int, f int) int { return e * f }
func main() {
	fmt.Printf("%T\n", add)
	fmt.Printf("%T\n", sub)
	fmt.Printf("%T\n", mul)
}

执行go run test.go输出结果如下:

func(int, int) int
func(int, int) int
func(int, int) int

二、Go语言的type func()用法 | type func() 自定义函数类型

1. golang通过type定义函数类型

在 Go 语言中,type 可以定义任何自定义的类型

比如熟悉的:type dog struct{},type myInt int 等等

所以 func 也是可以作为类型自定义的,type myFunc func(int) int,意思是自定义了一个叫 myFunc 的函数类型,这个函数的签名必须符合输入为 int,输出为 int。

golang通过type定义函数类型
通过 type 可以定义函数类型,格式如下

type typeName func(arguments) retType

函数类型也是一种类型,故可以将其定义为函数入参,在 go 语言中函数名可以看做是函数类型的常量,所以我们可以直接将函数名作为参数传入的函数中。

验证demo

package main

import "fmt"
func add(a, b int) int {
	return a + b
}
//sub作为函数名可以看成是 op 类型的常量
func sub(a, b int) int {
	return a - b
//定义函数类型 op
type op func(a, b int) int
//形参指定传入参数为函数类型op
func Oper(fu op, a, b int) int {
	return fu(a, b)
func main() {
	//在go语言中函数名可以看做是函数类型的常量,所以我们可以直接将函数名作为参数传入的函数中。
	aa := Oper(add, 1, 2)
	fmt.Println(aa)
	bb := Oper(sub, 1, 2)
	fmt.Println(bb)

到此这篇关于Go语言的type func()用法的文章就介绍到这了,更多相关Go语言type func()用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言string,int,int64 ,float之间类型转换方法

    Go语言string,int,int64 ,float之间类型转换方法

    Go语言中int类型和string类型都是属于基本数据类型,两种类型的转化都非常简单。下面通过本文给大家分享Go语言string,int,int64 ,float之间类型转换方法,感兴趣的朋友一起看看吧
    2017-07-07
  • 深入解析Go语言中上下文超时与子进程管理

    深入解析Go语言中上下文超时与子进程管理

    这篇文章小编将通过一个实际问题的案例,和大家深入探讨一下Go语言中的上下文超时和子进程管理,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • go defer避坑指南之拆解延迟语句

    go defer避坑指南之拆解延迟语句

    这篇文章主要为大家详细介绍了go defer避坑指南之如何拆解延迟语句,掌握正确使用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • Golang的第一个程序-Hello World

    Golang的第一个程序-Hello World

    这篇文章主要介绍了第一个Go程序-Hello World,在编写第一个go程序之前,我们要将系统的环境变量配好,下面来看具体的编一过程吧,需要的小伙伴可以参考一下
    2022-01-01
  • 轻松读懂Golang中的数组和切片

    轻松读懂Golang中的数组和切片

    这篇文章主要给大家介绍了关于Golang中数组和切片的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者Golang具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • Go语言实现配置热加载的方法分享

    Go语言实现配置热加载的方法分享

    web项目,经常需要热启动各种各样的配置信息,一旦这些服务发生变更,我们需要重新启动web server,以使配置生效,实现配置热加载,本文为大家整理了几个方法实现这个需求,需要的可以参考下
    2023-05-05
  • 一篇文章学会GO语言中的变量

    一篇文章学会GO语言中的变量

    Go语言是静态类型语言,因此变量有明确类型的,编译器也会检查变量类型的正确性,下面这篇文章主要给大家介绍了关于GO语言中变量的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Golang 空map和未初始化map的注意事项说明

    Golang 空map和未初始化map的注意事项说明

    这篇文章主要介绍了Golang 空map和未初始化map的注意事项说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go开发Gin项目添加jwt功能实例详解

    Go开发Gin项目添加jwt功能实例详解

    这篇文章主要为大家介绍了Go开发Gin项目中添加jwt功能实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 通过案例详细聊聊Go语言的变量与常量

    通过案例详细聊聊Go语言的变量与常量

    在任何一门现代的高级语言中,变量和常量都是它非常基础的程序结构的组成部分,下面这篇文章主要给大家介绍了关于如何通过案例详细聊聊Go语言的变量与常量的相关资料,需要的朋友可以参考下
    2023-03-03

最新评论