網站首頁 編程語言 正文
一、前置基礎
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)
原文鏈接:https://blog.csdn.net/inthat/article/details/123648827
相關推薦
- 2022-06-16 Go項目編寫Makefile規則文件概述_Golang
- 2023-02-02 redis中的配置以及密碼設置方式_Redis
- 2022-09-06 C#面向對象編程中開閉原則的示例詳解_C#教程
- 2022-08-01 C++鏈式二叉樹深入分析_C 語言
- 2022-05-16 淺談react?16.8版本新特性以及對react開發的影響_React
- 2023-02-06 shell腳本實戰之部署nginx腳本實例_nginx
- 2022-09-24 ASP.NET?MVC實現路由功能_實用技巧
- 2022-12-29 React引入css的三種方式小結_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支