Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實(shí)例詳解
函數(shù)介紹
為了完成某一功能的程序指令(語句)的集合,稱為函數(shù)。
Go 語言的函數(shù)可以分為:自定義函數(shù)和系統(tǒng)函數(shù)。Go 語言函數(shù)與其他語言函數(shù)最大的不同是,Go 語言的函數(shù)可以支持返回任意多個(gè)值,而其他語言的函數(shù)一般只支持返回一個(gè)值。
比如C語言函數(shù)返回值只能是一種類型。
Go 語言的函數(shù)也支持普通函數(shù)、匿名函數(shù)和閉包三種形式。
函數(shù)特點(diǎn)
- 無需聲明原型
- 支持不定變參
- 支持多返回值
- 支持命名返回參數(shù)
- 支持匿名函數(shù)和閉包 (變向的高階函數(shù))
- 函數(shù)也是一種類型,一個(gè)函數(shù)可以賦值給變量
- 不支持嵌套 (nested) 一個(gè)包不能有兩個(gè)名字一樣的函數(shù)
- 不支持重載 (overload)
- 不支持默認(rèn)參數(shù) (default parameter)
函數(shù)聲明
函數(shù)聲明包括函數(shù)名、形式參數(shù)列表、返回值列表(可省略)以及函數(shù)體。
func name(parameter-list) (result-list) { // 聲明函數(shù)名
// 函數(shù)體
}如果函數(shù)返回一個(gè)無名變量或者沒有返回值,返回值列表的括號(hào)是可以省略的。如果一個(gè)函數(shù)聲明不包括返回值列表,那么函數(shù)體執(zhí)行完畢后,不會(huì)返回任何值。
傳參方式
值傳遞
指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)復(fù)制一份傳遞到函數(shù)中,這樣在函數(shù)中如果對參數(shù)進(jìn)行修改,將不會(huì)影響到實(shí)際參數(shù)。
func num(x, y int) int {
// 處理邏輯
}引用傳遞
是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)的地址傳遞到函數(shù)中,那么在函數(shù)中對參數(shù)所進(jìn)行的修改,將影響到實(shí)際參數(shù)。
func swap(x, y *int) {
var temp int
temp = *x /* 保存 x 的值 */
*x = *y /* 將 y 值賦給 x */
*y = temp /* 將 temp 值賦給 y*/
}無論是值傳遞,還是引用傳遞,傳遞給函數(shù)的都是變量的副本,不過,值傳遞是值的拷貝。
引用傳遞是地址的拷貝,一般來說,地址拷貝更為高效。而值拷貝取決于拷貝的對象大小,對象越大,則性能越低。
map、slice、chan、指針、interface默認(rèn)以引用的方式傳遞。
不定參數(shù)傳值
函數(shù)的參數(shù)不是固定,后面的類型是固定的。 (可變參數(shù))
golang可變參數(shù)本質(zhì)上就是slice。
在參數(shù)賦值時(shí)可以不用一一的賦值,可以直接傳遞一個(gè)數(shù)組或者切片,注意在參數(shù)后加上 … 即可。
func myfunc(args ...int) { //0個(gè)或多個(gè)參數(shù)
}
func add(a int, args ...int) int { //1個(gè)或多個(gè)參數(shù)
}
func add(a int, b int, args ...int) int { //2個(gè)或多個(gè)參數(shù)
}其中args是一個(gè)slice類型,我們可以通過 arg[index] 依次訪問所有參數(shù),通過 len(arg) 來判斷傳遞參數(shù)的個(gè)數(shù)。
使用slice對象做變參時(shí),必須展開。
package main
import (
"fmt"
)
func sum(s string, n ...int) string {
var x int
for _, i := range n {
x += i
}
return fmt.Sprintf(s, x) // 字符串拼接
}
func main() {
s := []int{1, 2, 3}
res := sum("sum: %d", s...) // slice... 展開slice
println(res)
}輸出結(jié)果
sum: 6
任意類型的不定參數(shù)
函數(shù)的參數(shù)和每個(gè)參數(shù)的類型都不是固定的。
用 interface{} 傳遞任意類型數(shù)據(jù)是Go語言的慣例用法,而且 interface{} 的類型是安全的。
func myfunc(args ...interface{}){ // 示例用法
...
}返回值
_ 標(biāo)識(shí)符,用來忽略函數(shù)的某個(gè)返回值。
Go 的返回值可以被命名, 返回值的名稱應(yīng)當(dāng)具有一定意義。
沒有參數(shù)的 return 語句返回各個(gè)返回變量的當(dāng)前值,這種用法被稱作“裸”返回。
func myfunc(arg int) (arg int) { // 示例用法
return arg
}以上就是Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于Golang函數(shù)參數(shù)傳值的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
go?REST?API設(shè)計(jì)模式和反模式示例解析
在這篇文章中,我們將探討一些常見的REST?API設(shè)計(jì)模式和開發(fā)者應(yīng)該注意的反模式,我們還將提供Golang和Open?API?Schema的代碼片段來幫助說明這些概念,有需要的朋友可以借鑒參考下2023-09-09
golang小游戲開發(fā)實(shí)戰(zhàn)之飛翔的小鳥
這篇文章主要給大家介紹了關(guān)于golang小游戲開發(fā)實(shí)戰(zhàn)之飛翔的小鳥的相關(guān)資料,,本文可以帶你你從零開始,一步一步的開發(fā)出這款小游戲,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03
golang 并發(fā)編程之生產(chǎn)者消費(fèi)者詳解
這篇文章主要介紹了golang 并發(fā)編程之生產(chǎn)者消費(fèi)者詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05

