欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang如何通過type定義函數類型

 更新時間:2024年01月19日 10:05:33   作者:昵稱都用過了?  
這篇文章主要介紹了golang如何通過type定義函數類型問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

函數簽名

定義

函數類型 又叫 函數簽名 , 一個函數 的類型就是函數定義首行去掉函數名、參數名和{,可以 使用 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 }

舉個栗子

新建test.go

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)
}

執(zhí)行go run test.go輸出結果如下:

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

通過type定義函數類型

通過 type 可以定義函數類型,格式如下

type typeName func(arguments) retType

函數類型也是一種類型,故可以將其定義為函數入參,在 go 語言中函數名可以看做是函數類型的常量,所以我們可以直接將函數名作為參數傳入的函數中。

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微服務效率工具goctl深度解析

    基于go微服務效率工具goctl深度解析

    這篇文章主要為大家介紹了基于go微服務效率工具goctl深度解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 一文帶你了解Go語言中的I/O接口設計

    一文帶你了解Go語言中的I/O接口設計

    I/O?操作在編程中扮演著至關重要的角色,它涉及程序與外部世界之間的數據交換,下面我們就來簡單了解一下Go語言中的?I/O?接口設計吧
    2023-06-06
  • Golang Http請求返回結果處理

    Golang Http請求返回結果處理

    本文主要介紹了Golang Http請求返回結果處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Go語言實現百萬級WebSocket連接架構設計及服務優(yōu)化

    Go語言實現百萬級WebSocket連接架構設計及服務優(yōu)化

    本文將詳細介紹如何在Go中構建一個能夠支持百萬級WebSocket連接的服務,包括系統架構設計、性能優(yōu)化策略以及具體的實現步驟和代碼示例
    2024-01-01
  • Golang實現異步上傳文件支持進度條查詢的方法

    Golang實現異步上傳文件支持進度條查詢的方法

    這篇文章主要介紹了Golang實現異步上傳文件支持進度條查詢的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • GO文件創(chuàng)建及讀寫操作示例詳解

    GO文件創(chuàng)建及讀寫操作示例詳解

    這篇文章主要為大家介紹了GO文件創(chuàng)建及讀寫操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Golang內存模型教科書級講解

    Golang內存模型教科書級講解

    go官方介紹go內存模型的時候說:探究在什么條件下,goroutine?在讀取一個變量的值的時,能夠看到其它?goroutine?對這個變量進行的寫的結果,Go內存模型規(guī)定了一些條件,在這些條件下,在一個goroutine中讀取變量返回的值能夠確保是另一個goroutine中對該變量寫入的值
    2023-03-03
  • golang基于Mutex實現可重入鎖

    golang基于Mutex實現可重入鎖

    鎖可重入也就是當前已經獲取到鎖的goroutine繼續(xù)調用Lock方法獲取鎖,Go標準庫中提供了sync.Mutex實現了排他鎖,但并不是可重入的,所以本文給大家介紹了golang基于Mutex實現可重入鎖,文中有詳細的代碼示例,需要的朋友可以參考下
    2024-03-03
  • go內存緩存如何new一個bigcache對象示例詳解

    go內存緩存如何new一個bigcache對象示例詳解

    這篇文章主要為大家介紹了go內存緩存如何new一個bigcache對象示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • golang?gorm的預加載及軟刪硬刪的數據操作示例

    golang?gorm的預加載及軟刪硬刪的數據操作示例

    這篇文章主要介紹了golang?gorm的預加載及軟刪硬刪的數據操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04

最新評論