網站首頁 編程語言 正文
GO語言函數介紹
GO是編譯性語言,所以函數的順序是無關緊要的,為了方便閱讀,建議入口函數main
寫在最前面,其余函數按照功能需要進行排列
GO的函數不支持嵌套,重載和默認參數GO的函數支持 無需聲明變量,可變長度,多返回值,匿名,閉包等GO的函數用func
來聲明,且左大括號{
不能另起一行
一個簡單的示例:
package main import "fmt" func main(){ fmt.Println("調用函數前。。。") hello() fmt.Println("調用函數后。。。") } func hello() { fmt.Println("調用函數中...") }
輸出為:
調用函數前。。。 調用函數中... 調用函數后。。。
GO語言函數參數與返回值
參數:可以傳0個或多個值來供自己用
返回:通過用return
來進行返回
package main import "fmt" func main(){ a, b, c := 1, 2, 3 d, e, f := test(a, b, c) fmt.Println(a, b, c, d, e, f) } func test(a int, b int, c int) (d int, e int, f int) { d = a + 3 e = b + 3 f = c + 3 return d, e, f }
輸出為:
1 2 3 4 5 6
上面就是一個典型的多參數傳遞與多返回值
對例子的說明:
- 首先定義了
a,b,c
三個變量,并進行賦值為1,2,3
- 調用
test()函數
,因為預先知道這個會返回三個值,所以我們用d,e,f
進行接收返回的值 - 在
test
函數中func test(a int, b int, c int)
這一段是接收傳入的參數,(d int, e int, f int) {
這一段是定義返回的值 - 在
test
里,對d,e,f
變量分別在a,b,c
的基礎上加上了3,并返回 - 打印所有變量
按值傳遞與按引用傳遞
按值傳遞:是對某個變量進行復制,不能更改原變量的值
引用傳遞:相當于按指針傳遞,可以同時改變原來的值,并且消耗的內存會更少,只有4或8個字節的消耗
命名的返回值
在上例中,返回值(d int, e int, f int) {
是進行了命名,如果不想命名可以寫成(int,int,int){
,返回的結果都是一樣的,但要注意:
- 寫成后面這種形式時,在函數內剖,像
d,e,f
這些變量就不能直接使用,要先定義才能使用; - 返回值
return d,e,f
一定要跟返回的值,前一種方式是可以不寫返回值,可以直接return
- 在正常工作,當然是建意第一種寫法,這樣會讓代碼的可讀性更高
返回空白符
當返回了多個值,我們某些變量不想要,或實際用不到,我們可以使用_
來補位,例如上例的返回我們可以寫成d,_,f := test(a,b,c)
,我們不想要中間的返回值,可以以這種形式來舍棄掉
GO語言函數傳遞可變長度的參數
在參數后面以變量 ... type
這種形式的,我們就要以判斷出這是一個可變長度的參數
package main import "fmt" func main(){ ke("a", "b", "c", "d", "e") } func ke(a string, strs ...string) { fmt.Println(a) fmt.Println(strs) for _, v := range strs { fmt.Println(v) } }
輸出為:
a [b c d e] b c d e
在上例中,strs ...string
中,strs
的實際值是b,c,d,e,這就是一個最簡單的傳遞可變長度的參數的例子,更多一些演變的形式,都非常類似
GO語言函數defer 的應用
在GO中defer
關鍵字非常重要,相當于面相對像中的析構函數,也就是在某個函數執行完成后,GO會自動這個;
如果在多層循環中函數里,都定義了defer
,那么它的執行順序是先進后出;
當某個函數出現嚴重錯誤時,defer
也會被調用
package main import "fmt" func main(){ defers("a", "b") } func defers(a string, b string) { fmt.Println(a) defer fmt.Println("最后調用...") fmt.Println(b) }
輸出為
a b 最后調用...
這是一個最簡單的測試了,當然還有更復雜的調用,比如調試程序時,判斷是哪個函數出了問題,完全可以根據defer
打印出來的內容來進行判斷,非常快速,這種留給你們去實現
GO語言遞歸函數
一個函數在函數體內自己調用自己我們稱之為遞歸函數,在做遞歸調用時,經常會將內存給占滿,這是非常要注意的,常用的比如,快速排序就是用的遞歸調用
GO語言內置函數
append -- 用來追加元素到數組、slice中,返回修改后的數組、slice
close -- 主要用來關閉channel delete -- 從map中刪除key對應的value
panic -- 停止常規的goroutine (panic和recover:用來做錯誤處理)
recover -- 允許程序定義goroutine的panic動作
imag -- 返回complex的實部 (complex、real imag:用于創建和操作復數)
real -- 返回complex的虛部 make -- 用來分配內存,返回Type本身(只能應用于slice, map, channel)
new -- 用來分配內存,主要用來分配值類型,比如int、struct。返回指向Type的指針
cap -- capacity是容量的意思,用于返回某個類型的最大容量(只能用于切片和 map)
copy -- 用于復制和連接slice,返回復制的數目 len -- 來求長度,比如string、array、slice、map、channel ,返回長度
print、println -- 底層打印函數,在部署環境中建議使用 fmt 包
原文鏈接:https://www.jianshu.com/p/da12ba332006
相關推薦
- 2022-07-06 C++使用easyx實現打磚塊游戲_C 語言
- 2022-11-27 Python?Django教程之實現待辦事項應用程序_python
- 2022-09-24 pytorch使用nn.Moudle實現邏輯回歸_python
- 2022-08-06 C語言實現簡單登錄操作_C 語言
- 2022-05-08 Python函數命名空間和作用域(Local與Global)_python
- 2022-04-07 Qt實現邊加載數據邊顯示頁面的示例代碼_C 語言
- 2022-09-16 JQuery實現電梯導航效果_jquery
- 2022-05-12 Android textAppearance 使用
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支