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语言编写一个简易聊天室服务端的实现

    Go语言编写一个简易聊天室服务端的实现

    本文介绍用Go语言构建TCP聊天室服务端,通过Goroutine实现多客户端并发通信,提供基础聊天功能,具有一定的参考价值,感兴趣的可以了解一下
    2025-08-08
  • golang程序打包成脚本部署到Linux系统方式

    golang程序打包成脚本部署到Linux系统方式

    Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完成自动化部署
    2025-07-07
  • golang实现webgis后端开发的步骤详解

    golang实现webgis后端开发的步骤详解

    这篇文章主要介绍如何用golang结合postgis数据库,使用gin、grom框架实现后端的MVC的接口搭建,文中有详细的流程步骤及代码示例,需要的朋友可以参考下
    2023-06-06
  • Go语言之ORM(对象关系映射)库详解

    Go语言之ORM(对象关系映射)库详解

    GORM是Go语言流行ORM库,支持多数据库与结构体映射表,具备链式API、自动迁移、关联操作等功能,原仓库已归档,推荐使用GORMv2,性能优化且API更清晰,适合快速开发,不适用于性能极致需求
    2025-07-07
  • 深入了解Golang interface{}的底层原理实现

    深入了解Golang interface{}的底层原理实现

    在 Go 语言没有泛型之前,接口可以作为一种替代实现,也就是万物皆为的 interface。那到底 interface 是怎么设计的底层结构呢?下面咱们透过底层分别看一下这两种类型的接口原理。感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助
    2022-10-10
  • Go标准库http server的优雅关闭深入理解

    Go标准库http server的优雅关闭深入理解

    这篇文章主要为大家介绍了Go标准库http server的优雅有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪关闭深入理解
    2024-01-01
  • golang整合日志zap的实现示例

    golang整合日志zap的实现示例

    Go语言中的zap库提供了强大的日志管理功能,支持日志记录到文件、日志切割、多日志级别、结构化日志输出等,它通过三种方法zap.NewProduction()、zap.NewDevelopment()和zap.NewExample(),快速构建适用于不同环境的logger,感兴趣的可以了解一下
    2024-10-10
  • Golang学习笔记(四):array、slice、map

    Golang学习笔记(四):array、slice、map

    这篇文章主要介绍了Golang学习笔记(四):array、slice、map,本文分别讲解了这3个类型的声明&赋值、元素访问、其它操作,需要的朋友可以参考下
    2015-05-05
  • golang中struct和interface的基础使用教程

    golang中struct和interface的基础使用教程

    Go不同于一般的面向对象语言,需要我们好好的学习研究,下面这篇文章主要给大家介绍了关于golang中struct和interface的基础使用的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2018-03-03
  • golang进程在docker中OOM后hang住问题解析

    golang进程在docker中OOM后hang住问题解析

    这篇文章主要介绍了golang进程在docker中OOM后hang住问题解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10

最新评论