脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - Go语言的type func()用法详解

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

2022-09-08 11:29西京刀客 Golang

在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句,这篇文章主要介绍了Go语言的type func()用法,需要的朋友可以参考下

一、前置基础

1. go 函数基础

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

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

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

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

?
1
2
3
func addTwoNumber(a int, b int) (int, int) {
return a+b, a-b
}

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

?
1
2
3
func addTwoNumber(a int, b int) (sum, dif int) {
return a+b, a-b
}

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

?
1
2
3
4
5
func addTwoNumber(a int, b int) (sum, dif int) {
sum = a+b
dif = a-b
return
}

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

2) 函数可变参数

?
1
2
3
4
5
6
7
8
9
10
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 个函数的函数类型完全一样。

?
1
2
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

?
1
2
3
4
5
6
7
8
9
10
11
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 可以定义函数类型,格式如下

?
1
type typeName func(arguments) retType

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

验证demo

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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()用法内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/inthat/article/details/123648827

延伸 · 阅读

精彩推荐
  • GolangGo语言数据结构之插入排序示例详解

    Go语言数据结构之插入排序示例详解

    这篇文章主要为大家介绍了Go语言数据结构之插入排序示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    宇宙之一粟9262022-08-26
  • Golang详解golang开发中select多路选择

    详解golang开发中select多路选择

    这篇文章主要介绍了golang开发中select多路选择,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参...

    二十四桥明月夜335332020-09-27
  • Golanggolang值接收者和指针接收者的区别介绍

    golang值接收者和指针接收者的区别介绍

    这篇文章主要介绍了golang值接收者和指针接收者的区别,它和函数的区别在于方法有一个接收者,给一个函数添加一个接收者,那么它就变成了方法,接收者...

    蔡蔡2178382022-08-30
  • Golang使用Go语言创建WebSocket服务的实现示例

    使用Go语言创建WebSocket服务的实现示例

    这篇文章主要介绍了使用Go语言创建WebSocket服务的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    kevinyan3472020-06-07
  • GolangGo语言单元测试超详细解析

    Go语言单元测试超详细解析

    本文介绍了了Go语言单元测试超详细解析,测试函数分为函数的基本测试、函数的组测试、函数的子测试,进行基准测试时往往是对函数的算法进行测验,有时...

    酷尔。8952022-02-25
  • GolangGoLang之go build命令的具体使用

    GoLang之go build命令的具体使用

    本文主要介绍了GoLang之go build命令的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    GoGo在努力6212022-08-17
  • Golang一篇带你了解Go vs. Ruby

    一篇带你了解Go vs. Ruby

    对于企业、行业来说,通过合适的编程创建出出色的软件解决方案成为了竞争的关键。我们来对比一下近年来比较出名的两种编程语言——Go和Ruby。...

    班博编程10192022-02-23
  • GolangGolang爬虫框架 colly的使用

    Golang爬虫框架 colly的使用

    本文主要介绍了Golang爬虫框架 colly的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小...

    小馨whisper6852022-07-11