<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
GO是編譯性語言,所以函數的順序是無關緊要的,為了方便閱讀,建議入口函數main
寫在最前面,其餘函數按照功能需要進行排列
GO的函數不支援巢狀,過載和預設引數GO的函數支援 無需宣告變數,可變長度,多返回值,匿名,閉包等GO的函數用func
來宣告,且左大括號{
不能另起一行
一個簡單的範例:
package main import "fmt" func main(){ fmt.Println("呼叫函數前。。。") hello() fmt.Println("呼叫函數後。。。") } func hello() { fmt.Println("呼叫函數中...") }
輸出為:
呼叫函數前。。。 呼叫函數中... 呼叫函數後。。。
引數:可以傳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)
,我們不想要中間的返回值,可以以這種形式來捨棄掉
在引數後面以變數 ... 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
,那麼它的執行順序是先進後出;
當某個函數出現嚴重錯誤時,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
列印出來的內容來進行判斷,非常快速,這種留給你們去實現
一個函數在函數體內自己呼叫自己我們稱之為遞迴函數,在做遞迴呼叫時,經常會將記憶體給佔滿,這是非常要注意的,常用的比如,快速排序就是用的遞迴呼叫
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 包
本篇重點介紹了GO函數(func)的宣告與使用,更多關於GO語言函數知識請檢視下面的相關連結
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45