Golang數(shù)據(jù)類型-函數(shù)(六)-創(chuàng)新互聯(lián)

函數(shù)的定義
func 函數(shù)名(形參列表) (返回值類型列表) {
	執(zhí)行語句......
	return 返回值列表	
}
函數(shù)的說明
  1. 形參列表:表示函數(shù)的輸入

    創(chuàng)新互聯(lián)公司長期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為天涯企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),天涯網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
  2. 函數(shù)中的執(zhí)行語句:表示為了實(shí)現(xiàn)某一功能的代碼塊

  3. return:函數(shù)的返回值。函數(shù)可以有返回值,也可以沒有。Go語言函數(shù)支持多個(gè)返回值,這一點(diǎn)是其他語言沒有的:(1)如果返回多個(gè)值時(shí),在接收時(shí),希望忽略某個(gè)返回值,則使用 _ 符號(hào)表示占位忽略(2)如果返回值只有一個(gè),(返回值類型) 可以不寫 ()

  4. 函數(shù)的形參列表可以是多個(gè),返回值列表也可以是多個(gè)

  5. 形參列表和返回值列表的數(shù)據(jù)類型可以是值類型和引用類型

  6. 函數(shù)的命名遵循標(biāo)識(shí)符的命名規(guī)范,首字母不能是數(shù)字,首字母大寫該函數(shù)可以被本包文件和其他包文件使用,首字母小寫,只能被本包文件使用,其它包文件不能使用。

  7. 函數(shù)中的變量是局部的,函數(shù)外不生效

  8. 基本數(shù)據(jù)類型和數(shù)組默認(rèn)都是值傳遞的,即進(jìn)行值拷貝。在函數(shù)內(nèi)修改,不會(huì)影響到原來的值

  9. 如果希望函數(shù)內(nèi)的變量能修改函數(shù)外的變量,可以傳入變量的地址&,函數(shù)內(nèi)以指針的方式操作變量

  10. 在Go中,函數(shù)也是一種數(shù)據(jù)類型 ,可以賦值給一個(gè)變量,則該變量是一個(gè)函數(shù)類型的變量了。通過該變量可以對函數(shù)調(diào)用。

  11. 函數(shù)既然是一種數(shù)據(jù)類型,因此在Go中函數(shù)可以作為形參,并調(diào)用

  12. 為了簡化數(shù)據(jù)類型定義,Go支持自定義數(shù)據(jù)類型
    基本語法:type 自定義數(shù)據(jù)類型名 數(shù)據(jù)類型 //理解:相當(dāng)于一個(gè)別名
    示例:type myInt int //這時(shí)myInt就等價(jià)int來使用了
    示例:type mySum func (int,int) int //這時(shí)mySum就等價(jià)于一個(gè)函數(shù)類型func (int,int) int

  13. 支持對函數(shù)返回值命名,這個(gè)時(shí)候return不必指定返回哪個(gè)變量了

package main

import (
	"fmt"
)
func cal(n1 int, n2 int) (sum int, sub int) {sum = n1 + n2
	sub = n1 - n2
	return  //這個(gè)時(shí)候return不必指定返回哪個(gè)變量了
}

func main() {fmt.Println(cal(5, 4))
}

1.4 Go支持可變參數(shù)

//支持0到多個(gè)參數(shù)
func sum(args... int) (sum int) {}

支持1到多個(gè)參數(shù)
func sum(n1 int, args... int) (sum int) {}
package main

import (
	"fmt"
)

//Go可變參數(shù)示例:支持0到多個(gè)參數(shù)
func sum0(args... int) (sum int) {sum = 0
	//遍歷args
	for i := 0; i< len(args); i++ {sum += args[i]
	}
	return
}

//Go可變參數(shù)示例:支持1到多個(gè)參數(shù)
func sum1(n1 int,args... int) (sum int) {sum = n1
	//遍歷args
	for i := 0; i< len(args); i++ {sum += args[i]
	}
	return
}

func main() {fmt.Println(sum0())  //sum0調(diào)用可以不傳入任何參數(shù)
	fmt.Println(sum1(10,-1,5,5))  //sum1調(diào)用至少傳入一個(gè)參數(shù)
}
init函數(shù)

每一個(gè)源文件都可以包含一個(gè)init函數(shù),init函數(shù)主要的做用就是完成一些初始化工作,該函數(shù)會(huì)在main函數(shù)之前執(zhí)行,被Go運(yùn)行框架調(diào)用,也就是說init會(huì)在main函數(shù)之前被調(diào)用。

package main
import "fmt"
func init(){fmt.Println("init print......")
}
func main(){fmt.Println("main print......")
}

如果一個(gè)文件同時(shí)包含全局變量定義、init函數(shù)和main函數(shù),則執(zhí)行流程為:全局變量定義—>init函數(shù)—>main函數(shù)

匿名函數(shù)

匿名函數(shù)使用方式1
在定義匿名函數(shù)時(shí)就直接調(diào)用,這種方式匿名函數(shù)只能調(diào)用一次。

package main

import "fmt"

func main() {res1 := func(n1 int, n2 int) int {return n1 + n2
	}(10, 20)   //這里的(10, 20)就是直接調(diào)用函數(shù)了
	fmt.Println("res1 = ", res1)
}

匿名函數(shù)使用方式2
將匿名函數(shù)賦給一個(gè)變量(函數(shù)變量),再通過該變量來調(diào)用匿名函數(shù)

package main

import "fmt"

func main() {a := func(n1 int, n2 int) int {return n1 + n2
	}
	res1 := a(10, 20) //這里通過 函數(shù)變量a 來調(diào)用匿名函數(shù)
	fmt.Println("res1 = ", res1)
}

匿名函數(shù)使用方式3:全局匿名函數(shù)
如果將匿名函數(shù)賦給一個(gè)全局變量,那么這個(gè)匿名函數(shù),就成為一個(gè)全局匿名函數(shù),可以再程序有效。

package main

import "fmt"

var (
	Func1 = func(n1 int, n2 int) int {return n1 + n2
	}
)

func main() {res1 := Func1(10, 20)
	fmt.Println("res1 = ", res1)
}
函數(shù)的defer

在函數(shù)種,程序員經(jīng)常需要?jiǎng)?chuàng)建資源(比如:數(shù)據(jù)庫連接、文件句柄、鎖等),為了在函數(shù)執(zhí)行完畢后,及時(shí)的釋放資源,Go的設(shè)計(jì)者提供defer(延時(shí)機(jī)制)。
(1)當(dāng)go執(zhí)行到一個(gè)defer時(shí),不會(huì)立即執(zhí)行defer后的語句,而是將defer后的語句壓入到一個(gè)棧種,然后繼續(xù)執(zhí)行函數(shù)的下一個(gè)語句
(2)當(dāng)函數(shù)執(zhí)行完畢后,再從defer棧中,依次從棧頂取出語句執(zhí)行(注:遵守棧 先入后出的機(jī)制)
(3)在defer將語句放入到棧時(shí),也會(huì)將相關(guān)的值拷貝同時(shí)入棧
在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

分享名稱:Golang數(shù)據(jù)類型-函數(shù)(六)-創(chuàng)新互聯(lián)
當(dāng)前URL:http://bm7419.com/article4/ceogie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、營銷型網(wǎng)站建設(shè)、面包屑導(dǎo)航、App設(shè)計(jì)ChatGPT、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名