最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語(yǔ)言的type?func()用法詳解

 更新時(shí)間:2022年03月23日 09:09:09   作者:西京刀客  
在Go語(yǔ)言中,函數(shù)的基本組成為:關(guān)鍵字func、函數(shù)名、參數(shù)列表、返回值、函數(shù)體和返回語(yǔ)句,這篇文章主要介紹了Go語(yǔ)言的type?func()用法,需要的朋友可以參考下

一、前置基礎(chǔ)

1. go 函數(shù)基礎(chǔ)

在Go語(yǔ)言中,函數(shù)的基本組成為:關(guān)鍵字func、函數(shù)名、參數(shù)列表、返回值、函數(shù)體和返回語(yǔ)句。

func 函數(shù)名(參數(shù)列表) 返回值類(lèi)型 {函數(shù)體內(nèi)部}

Go語(yǔ)言是強(qiáng)數(shù)據(jù)類(lèi)型的語(yǔ)言,參數(shù)是要指定類(lèi)型的不然就報(bào)錯(cuò)。func 是函數(shù)的聲明關(guān)鍵字。

1) 返回值
返回值的定義,是可以給返回值取一個(gè)名稱(chēng)的,還有一點(diǎn)是和其他的編程語(yǔ)言不一樣的是在Go語(yǔ)言中函數(shù)的返回值可以有多個(gè)的

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

同時(shí)可以給返回值取一個(gè)別名

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兩個(gè)值的。

2) 函數(shù)可變參數(shù)

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函數(shù)多個(gè)值了。

2. 函數(shù)簽名

函數(shù)類(lèi)型 又叫 函數(shù)簽名 , 一個(gè)函數(shù) 的類(lèi)型就是函數(shù)定義首行去掉函數(shù)名、參數(shù)名和{,可以 使用 fmt.Printf 的”%T”格式化參數(shù)打印函數(shù)的類(lèi)型。

函數(shù)類(lèi)型相同
兩個(gè)函數(shù)類(lèi)型相同的條件是**:擁有相同的形參列表和返回值列表(列表元素的次序、個(gè)數(shù)和類(lèi)型都相同),形參名可以不同 。** 以下 3 個(gè)函數(shù)的函數(shù)類(lèi)型完全一樣。

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 }

驗(yàn)證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)
}

執(zhí)行g(shù)o run test.go輸出結(jié)果如下:

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

二、Go語(yǔ)言的type func()用法 | type func() 自定義函數(shù)類(lèi)型

1. golang通過(guò)type定義函數(shù)類(lèi)型

在 Go 語(yǔ)言中,type 可以定義任何自定義的類(lèi)型

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

所以 func 也是可以作為類(lèi)型自定義的,type myFunc func(int) int,意思是自定義了一個(gè)叫 myFunc 的函數(shù)類(lèi)型,這個(gè)函數(shù)的簽名必須符合輸入為 int,輸出為 int。

golang通過(guò)type定義函數(shù)類(lèi)型
通過(guò) type 可以定義函數(shù)類(lèi)型,格式如下

type typeName func(arguments) retType

函數(shù)類(lèi)型也是一種類(lèi)型,故可以將其定義為函數(shù)入?yún)?/strong>,在 go 語(yǔ)言中函數(shù)名可以看做是函數(shù)類(lèi)型的常量,所以我們可以直接將函數(shù)名作為參數(shù)傳入的函數(shù)中。

驗(yàn)證demo

package main

import "fmt"
func add(a, b int) int {
	return a + b
}
//sub作為函數(shù)名可以看成是 op 類(lèi)型的常量
func sub(a, b int) int {
	return a - b
//定義函數(shù)類(lèi)型 op
type op func(a, b int) int
//形參指定傳入?yún)?shù)為函數(shù)類(lèi)型op
func Oper(fu op, a, b int) int {
	return fu(a, b)
func main() {
	//在go語(yǔ)言中函數(shù)名可以看做是函數(shù)類(lèi)型的常量,所以我們可以直接將函數(shù)名作為參數(shù)傳入的函數(shù)中。
	aa := Oper(add, 1, 2)
	fmt.Println(aa)
	bb := Oper(sub, 1, 2)
	fmt.Println(bb)

到此這篇關(guān)于Go語(yǔ)言的type func()用法的文章就介紹到這了,更多相關(guān)Go語(yǔ)言type func()用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言編寫(xiě)一個(gè)簡(jiǎn)易聊天室服務(wù)端的實(shí)現(xiàn)

    Go語(yǔ)言編寫(xiě)一個(gè)簡(jiǎn)易聊天室服務(wù)端的實(shí)現(xiàn)

    本文介紹用Go語(yǔ)言構(gòu)建TCP聊天室服務(wù)端,通過(guò)Goroutine實(shí)現(xiàn)多客戶(hù)端并發(fā)通信,提供基礎(chǔ)聊天功能,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-08-08
  • golang程序打包成腳本部署到Linux系統(tǒng)方式

    golang程序打包成腳本部署到Linux系統(tǒng)方式

    Golang程序通過(guò)本地編譯(設(shè)置GOOS為linux生成無(wú)后綴二進(jìn)制文件),上傳至Linux服務(wù)器后賦權(quán)執(zhí)行,使用nohup命令實(shí)現(xiàn)后臺(tái)運(yùn)行,完成自動(dòng)化部署
    2025-07-07
  • golang實(shí)現(xiàn)webgis后端開(kāi)發(fā)的步驟詳解

    golang實(shí)現(xiàn)webgis后端開(kāi)發(fā)的步驟詳解

    這篇文章主要介紹如何用golang結(jié)合postgis數(shù)據(jù)庫(kù),使用gin、grom框架實(shí)現(xiàn)后端的MVC的接口搭建,文中有詳細(xì)的流程步驟及代碼示例,需要的朋友可以參考下
    2023-06-06
  • Go語(yǔ)言之ORM(對(duì)象關(guān)系映射)庫(kù)詳解

    Go語(yǔ)言之ORM(對(duì)象關(guān)系映射)庫(kù)詳解

    GORM是Go語(yǔ)言流行ORM庫(kù),支持多數(shù)據(jù)庫(kù)與結(jié)構(gòu)體映射表,具備鏈?zhǔn)紸PI、自動(dòng)遷移、關(guān)聯(lián)操作等功能,原倉(cāng)庫(kù)已歸檔,推薦使用GORMv2,性能優(yōu)化且API更清晰,適合快速開(kāi)發(fā),不適用于性能極致需求
    2025-07-07
  • 深入了解Golang?interface{}的底層原理實(shí)現(xiàn)

    深入了解Golang?interface{}的底層原理實(shí)現(xiàn)

    在?Go?語(yǔ)言沒(méi)有泛型之前,接口可以作為一種替代實(shí)現(xiàn),也就是萬(wàn)物皆為的?interface。那到底?interface?是怎么設(shè)計(jì)的底層結(jié)構(gòu)呢?下面咱們透過(guò)底層分別看一下這兩種類(lèi)型的接口原理。感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助
    2022-10-10
  • Go標(biāo)準(zhǔn)庫(kù)http?server的優(yōu)雅關(guān)閉深入理解

    Go標(biāo)準(zhǔn)庫(kù)http?server的優(yōu)雅關(guān)閉深入理解

    這篇文章主要為大家介紹了Go標(biāo)準(zhǔn)庫(kù)http?server的優(yōu)雅有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪關(guān)閉深入理解
    2024-01-01
  • golang整合日志zap的實(shí)現(xiàn)示例

    golang整合日志zap的實(shí)現(xiàn)示例

    Go語(yǔ)言中的zap庫(kù)提供了強(qiáng)大的日志管理功能,支持日志記錄到文件、日志切割、多日志級(jí)別、結(jié)構(gòu)化日志輸出等,它通過(guò)三種方法zap.NewProduction()、zap.NewDevelopment()和zap.NewExample(),快速構(gòu)建適用于不同環(huán)境的logger,感興趣的可以了解一下
    2024-10-10
  • Golang學(xué)習(xí)筆記(四):array、slice、map

    Golang學(xué)習(xí)筆記(四):array、slice、map

    這篇文章主要介紹了Golang學(xué)習(xí)筆記(四):array、slice、map,本文分別講解了這3個(gè)類(lèi)型的聲明&賦值、元素訪問(wèn)、其它操作,需要的朋友可以參考下
    2015-05-05
  • golang中struct和interface的基礎(chǔ)使用教程

    golang中struct和interface的基礎(chǔ)使用教程

    Go不同于一般的面向?qū)ο笳Z(yǔ)言,需要我們好好的學(xué)習(xí)研究,下面這篇文章主要給大家介紹了關(guān)于golang中struct和interface的基礎(chǔ)使用的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • golang進(jìn)程在docker中OOM后hang住問(wèn)題解析

    golang進(jìn)程在docker中OOM后hang住問(wèn)題解析

    這篇文章主要介紹了golang進(jìn)程在docker中OOM后hang住問(wèn)題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10

最新評(píng)論

武平县| 缙云县| 桐乡市| 红桥区| 徐州市| 全州县| 偏关县| 正蓝旗| 四子王旗| 公安县| 昌江| 辽中县| 高雄县| 尼勒克县| 阿拉善左旗| 山阴县| 山丹县| 大城县| 志丹县| 大埔区| 沿河| 盐津县| 奇台县| 洛南县| 德保县| 凭祥市| 浙江省| 鹤山市| 梅河口市| 义乌市| 综艺| 榆中县| 保亭| 锦州市| 嵊泗县| 华蓥市| 海淀区| 宜昌市| 买车| 和静县| 安溪县|