Go 語言函數、參數和返回值詳解

函數是一組語句,可以在程序中重復使用。函數不會在頁面加載時自動執行。函數將通過調用函數來執行。

創建函數

要創建(通常稱為聲明)一個函數,請執行以下操作:

  • 使用 func 關鍵字。
  • 指定函數的名稱,后跟括號 ()
  • 最后,在花括號 {} 內添加定義函數應執行的代碼。

語法

func 函數名() {// 要執行的代碼
}

調用函數

函數不會立即執行。它們被“保存以供以后使用”,并在調用時執行。

在下面的示例中,我們創建了一個名為 “myMessage()” 的函數。開括號 { 表示函數代碼的開始,閉括號 } 表示函數的結束。該函數輸出 “I just got executed!”。要調用函數,只需寫下函數的名稱,后面跟著兩個括號 ()

示例

package mainimport ("fmt"
)func myMessage() {fmt.Println("I just got executed!")
}func main() {myMessage() // 調用函數
}

結果:

I just got executed!

一個函數可以被多次調用。

示例

package mainimport ("fmt"
)func myMessage() {fmt.Println("I just got executed!")
}func main() {myMessage()myMessage()myMessage()
}

結果:

I just got executed!
I just got executed!
I just got executed!

Go函數命名規則

  • 函數名必須以字母開頭。
  • 函數名只能包含字母數字字符和下劃線(A-z,0-9 和 _)。
  • 函數名區分大小寫。
  • 函數名不能包含空格。
  • 如果函數名由多個單詞組成,可以使用多詞變量命名的技巧。

參數和參數值

信息可以作為參數傳遞給函數。參數在函數內部充當變量。

在函數名后面,括號內指定參數及其類型。您可以添加任意數量的參數,只需用逗號分隔即可:

語法

func 函數名(參數1 類型, 參數2 類型, 參數3 類型) {// 要執行的代碼
}

帶參數的函數示例

下面的示例有一個帶有一個參數 fname(類型為字符串)的函數。當調用 familyName() 函數時,我們還傳遞了一個名字(例如,Liam),并且這個名字在函數內部使用,輸出多個不同的名字,但相同的姓氏:

示例

package mainimport ("fmt"
)func familyName(fname string) {fmt.Println("Hello", fname, "Refsnes")
}func main() {familyName("Liam")familyName("Jenny")familyName("Anja")
}

結果:

Hello Liam Refsnes
Hello Jenny Refsnes
Hello Anja Refsnes

注意:當將參數傳遞給函數時,它被稱為參數。因此,從上面的示例中可以看出:fname 是參數,而Liam、Jenny 和 Anja 是參數值。

多個參數

在函數內部,您可以添加任意數量的參數:

示例

package mainimport ("fmt"
)func familyName(fname string, age int) {fmt.Println("Hello", age, "歲的", fname, "Refsnes")
}func main() {familyName("Liam", 3)familyName("Jenny", 14)familyName("Anja", 30)
}

結果:

Hello 3 歲的 Liam Refsnes
Hello 14 歲的 Jenny Refsnes
Hello 30 歲的 Anja Refsnes

希望這些信息能幫助您理解Go語言中的函數、參數和參數值的使用方式。如果您有任何其他問題,請隨時提出。

返回值

如果您想讓函數返回一個值,您需要定義返回值的數據類型(如int、string等),并在函數內部使用return關鍵字:

語法

func 函數名(參數1 類型, 參數2 類型) 類型 {// 要執行的代碼return 輸出
}

函數返回示例

在下面的示例中,myFunction() 接收兩個整數(x 和 y),并返回它們的加法(x + y)作為整數(int):

示例

package mainimport ("fmt"
)func myFunction(x int, y int) int {return x + y
}func main() {fmt.Println(myFunction(1, 2))
}

結果:

3

命名返回值

在Go中,您可以為函數的返回值命名。

在這里,我們將返回值命名為 result(類型為int),并使用“裸露”的返回(即,我們使用return語句而不指定變量名)返回值:

示例

package mainimport ("fmt"
)func myFunction(x int, y int) (result int) {result = x + yreturn
}func main() {fmt.Println(myFunction(1, 2))
}

結果:

3

上面的示例也可以像這樣寫。在這里,return語句指定了變量名:

示例

package mainimport ("fmt"
)func myFunction(x int, y int) (result int) {result = x + yreturn result
}func main() {fmt.Println(myFunction(1, 2))
}

將返回值存儲在變量中

您也可以將返回值存儲在變量中,像這樣:

示例

package mainimport ("fmt"
)func myFunction(x int, y int) (result int) {result = x + yreturn
}func main() {total := myFunction(1, 2)fmt.Println(total)
}

多個返回值

Go函數也可以返回多個值。

在這里,myFunction() 返回一個整數(result)和一個字符串(txt1):

示例

package mainimport ("fmt"
)func myFunction(x int, y string) (result int, txt1 string) {result = x + xtxt1 = y + " World!"return
}func main() {fmt.Println(myFunction(5, "Hello"))
}

結果:

10 Hello World!

在這里,我們將兩個返回值存儲在兩個變量(a 和 b)中:

示例

package mainimport ("fmt"
)func myFunction(x int, y string) (result int, txt1 string) {result = x + xtxt1 = y + " World!"return
}func main() {a, b := myFunction(5, "Hello")fmt.Println(a, b)
}

結果:

10 Hello World!

如果由于某種原因不想使用其中一些返回的值,可以添加下劃線(_)來省略這個值。

在這里,我們要省略第一個返回的值(result - 存儲在變量a中):

示例

package mainimport ("fmt"
)func myFunction(x int, y string) (result int, txt1 string) {result = x + xtxt1 = y + " World!"return
}func main() {_, b := myFunction(5, "Hello")fmt.Println(b)
}

結果:

Hello World!

在這里,我們要省略第二個返回的值(txt1 - 存儲在變量b中):

示例

package mainimport ("fmt"
)func myFunction(x int, y string) (result int, txt1 string) {result = x + xtxt1 = y + " World!"return
}func main() {a, _ := myFunction(5, "Hello")fmt.Println(a)
}

遞歸函數

Go接受遞歸函數。如果一個函數調用自己并達到一個停止條件,那么這個函數就是遞歸的。

在以下示例中,testcount() 是一個調用自己的函數。我們使用x變量作為數據,每次遞歸時都會增加1(x + 1)。當x變量等于11(x == 11)時,遞歸結束。

示例

package mainimport ("fmt"
)func testcount(x int) int {if x == 11 {return 0}fmt.Println(x)return testcount(x + 1)
}func main() {testcount(1)
}

結果:

1
2
3
4
5
6
7
8
9
10

遞歸是一個常見的數學和編程概念。這有利于意味著您可以循環遍歷數據以達到一個結果。

開發人員應謹慎使用遞歸函數,因為很容易陷入編寫永遠不會終止的函數,或者使用過多的內存或處理器資源的函數。但是,當正確編寫時,遞歸可以是一種非常有效和數學上優雅的編程方法。

在以下示例中,factorial_recursion() 是一個調用自己的函數。我們使用x變量作為數據,每次遞歸時都會減小1(x - 1)。當條件不大于0時(即當它等于0時),遞歸結束。

示例

package mainimport ("fmt"
)func factorial_recursion(x float64) (y float64) {if x > 0 {y = x * factorial_recursion(x - 1)}else {y = 1}return
}func main() {fmt.Println(factorial_recursion(4))
}

結果:

24

希望這些信息對您有所幫助,幫助您理解Go語言中的返回值和遞歸函數的使用方式。如果您有任何其他問題,請隨時提出。

最后

為了方便其他設備和平臺的小伙伴觀看往期文章:公眾號搜索Let us Coding,或者掃描下方二維碼,關注公眾號,即可獲取最新文章。

看完如果覺得有幫助,歡迎點贊、收藏關注

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161076.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161076.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161076.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java編程技巧:if-else優化實踐總結歸納

文/朱季謙 說實話,其實我很討厭在代碼里大量使用if-else,一是因為該類代碼執行方式屬于面向過程的,二嘛,則是會顯得代碼過于冗余。這篇筆記,主要記錄一些自己在工作實踐當中針對if-else的優化心得,將會不定…

10年開發工程師總結,8大主流程序員兼職平臺,月入30k不是夢!

今年互聯網行業陸續裁員減薪,許多人怨聲載道的同時也開始另謀出路。而對于程序員更是應該提早做好準備,活躍在兼職接單的最前沿。 我們程序員是一門技術工種,與互聯網其他行業相比薪水會相對高一點,不過錢也不是那么好賺的&#…

C++中類和動態內存分配

new關鍵字 在C中,內存分為棧和堆。棧中的對象生命周期較短,往往在作用域結束后就會銷毀,而堆中的對象生命周期較長,只有當使用delete或者程序結束時才會銷毀。而new則是將我們創建的對象分配到堆中,使對象可以跨作用域…

2023年【廣東省安全員B證第四批(項目負責人)】報名考試及廣東省安全員B證第四批(項目負責人)復審考試

題庫來源:安全生產模擬考試一點通公眾號小程序 廣東省安全員B證第四批(項目負責人)報名考試是安全生產模擬考試一點通總題庫中生成的一套廣東省安全員B證第四批(項目負責人)復審考試,安全生產模擬考試一點…

json_to_mask

修改后的json_to_dataset文件,直接復制替換你自己原始的json_to_dataset,建議保存一下原版import argparse import base64 import json import os import os.path as ospimport imgviz import PIL.Imagefrom labelme.logger import logger from labelme …

java:springboot單元測試spring-boot-starter-test

背景 Java的單元測試可以使用多個框架,其中比較流行的包括: JUnit:JUnit是Java單元測試最常用的框架,它提供了一套豐富的API,可以方便地編寫測試用例和測試套件。JUnit 5是JUnit的最新版本,引入了許多新功…

ElMessageBox中的子組件回調關閉函數

父組件中: const closeMessageBox () > {ElMessageBox.close();getList(); };const open () > {ElMessageBox({title: 添加商品,message: h(AddTaxExemption, { onClose: closeMessageBox }),customClass: custom-message-box, showConfirmButton: false,d…

各大電商平臺雙十一“狂飆”,如何選擇商城系統?

今年是“雙十一”的第十五年。作為各大平臺和品牌的全年最重要的營銷節點,品牌們可謂是來勢洶洶,各種促銷活動和優惠力度讓人眼花繚亂。 淘天數據顯示,天貓促銷活動開售當晚,155個品牌開賣成交額突破1億元;首小時內7.1…

str轉wstr的三種方法和從網站獲取json數據到數據隨機提取,返回拼接字符串和動態數組

庫的設置 hv庫 外部包含目錄:…\include\libhv_new\hv; 庫目錄:…\include\libhv_new\lib\x86\Release; 附加依賴項:hv.lib; //Get請求 獲取json數據,然后提取符合 條件的,time值大于自定義變量的值,然后取…

【UE】用樣條線實現測距功能(上)

目錄 效果 步驟 一、創建樣條網格體組件3D模型 二、實現點擊連線功能 三、實現顯示兩點間距離功能 效果 步驟 一、創建樣條網格體組件3D模型 創建一個圓柱模型,這里底面半徑設置為10mm,高度設置為1000mm 注意該模型的坐標軸在如下位置&#xff1…

基于pytest的服務端http請求的自動化測試框架?

1、引言 我有一個朋友是做 Python 自動化測試的。前幾天他告訴我去參加一個大廠面試被刷了。 我問他是有沒有總結被刷下來的原因。他說面試官問了一些 pytest 單元測試框架相關的知識,包括什么插件系統和用力篩選。但是他所在的公司用的技術是基于 unittest 的&am…

Sentinel與SpringBoot整合

好的&#xff0c;以下是一個簡單的Spring Cloud整合Sentinel的代碼示例&#xff1a; 首先&#xff0c;在pom.xml中添加以下依賴&#xff1a; <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel&l…

swift-基礎

print區別 print(1,2,3, separator: "-", terminator: "\n")//表示用-來分割//1-2-3 //terminator表示用\n作為終止符 var a "a",b "b" print(a b) //ab print("\(a)前面是a變量\(b)后面是b變量")變量 var name "…

Win10系統無法登錄Xbox live的四種解決方法

在Win10系統中&#xff0c;用戶可以登錄Xbox live平臺&#xff0c;暢玩自己喜歡的游戲。但是&#xff0c;有用戶卻遇到了無法登錄Xbox live的問題。接下來小編給大家詳細介紹四種簡單的解決方法&#xff0c;解決后用戶在Win10電腦上就能成功登錄上Xbox live平臺。 Win10系統無法…

Linux編程 文件操作 creat open

文件描述符 文件描述符在形式上是一個非負整數。實際上&#xff0c;它是一個索引值&#xff0c;指向內核為每一個進程所維護的該進程打開文件的記錄表。當程序打開一個現有文件或者創建一個新文件時&#xff0c;內核向進程返回一個文件描述符。 啟動一個進程之后&#xff0c;…

SquareCTF-2023 Web Writeups

官方wp&#xff1a;CTFtime.org / Square CTF 2023 tasks and writeups sandbox Description&#xff1a; I “made” “a” “python” “sandbox” “”“” nc 184.72.87.9 8008 先nc連上看看&#xff0c;只允許一個單詞&#xff0c;空格之后的直接無效了。 flag就在當…

(C)一些題2

1.在 C 語言中&#xff08;以 16位 PC 機為例&#xff09;,5種基本數據類型的存儲空間長度的順序為&#xff08;&#xff09; A . char < int < long int <float < double B . char int < long int<float <double C . char < int < long int …

inux應用開發基礎知識——串口應用編程(十一)

前言&#xff1a; 在Linux系統中&#xff0c;串口設備以文件的形式存在&#xff0c;通常位于/dev目錄下&#xff0c;如ttyS0、ttyUSB0等。這些設備文件可以用于讀取和寫入數據。要使用串口設備&#xff0c;需要打開相應的設備文件。在打開串口時&#xff0c;可以使用O_RDWR選項…

哈夫曼樹你需要了解一下

哈夫曼樹介紹哈夫曼數特點哈夫曼應用場景哈夫曼構建過程哈夫曼樹示例拓展 哈夫曼樹介紹 哈夫曼樹&#xff08;Huffman Tree&#xff09;是一種特殊的二叉樹&#xff0c;也被稱為最優二叉樹。在計算機科學中&#xff0c;它是由權值作為葉子節點構造出來的一種二叉樹。哈夫曼樹的…

05 取樣器(BeanShell和JSR223 Sampler)

一、取樣器作用 1、取樣器可以理解為Jmeter的橋梁&#xff0c;或者是Jmeter的加工廠&#xff1b; 2、Jmeter使用過程中&#xff0c;經常有些數據不能直接使用&#xff0c;需要加工后才能使用&#xff1b;這樣就用到了取樣器&#xff1b;但是這里存在問題&#xff0c;Jmeter中的…