国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

一篇文章帶你了解Go語言基礎之函數(中篇)

開發 后端
通常來說,defer會用在釋放數據庫連接,關閉文件等需要在函數結束時處理的操作。

[[433020]]

前言

Hey,大家好呀,我是星期八,上篇文章學了些基礎:一篇文章帶你了解Go語言基礎之函數(上篇),這次咱們繼續學習Go基礎之函數進階叭。

Go函數內存分配圖

Go的函數內存分配,有點像堆分配,有點像,但是本質不是。

可以理解像堆內存一樣,棧中保存的是堆的地址。

驗證

代碼

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5.  
  6. func say() string { 
  7.     return "ok" 
  8.  
  9. func main() { 
  10.     fmt.Printf("say棧上的內容:%p\n",say) 

結果

本質

函數的作用域

作用域這個問題,以前可能或多或少提過,再來復習一下叭。

全局變量

全局變量就是在所有函數外部定義的變量,程序不結束,變量就一直存在。

當然,任何函數都可以訪問全局變量。

注:全局變量盡量全部用大寫。

小試牛刀

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5.  
  6. var NAME = "張三" 
  7. func say() string { 
  8.     fmt.Println(NAME
  9.     return "ok" 
  10.  
  11. func main() { 
  12.     say() 
  13.     fmt.Println(NAME

結果:

上述可能會有個問題,全局變量,全局變量,大家共用一個,要是誰傻不拉幾修改了不就完蛋了,整個程序都涼了。

var引發的問題

就像這樣。

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. var NAME = "張三" 
  6.  
  7. func say() string { 
  8.     fmt.Println(NAME
  9.     NAME = "李四" 
  10.     return "ok" 
  11.  
  12. func main() { 
  13.     say() 
  14.     fmt.Println(NAME

結果:

這不就完犢子了嗎???所以,一定要有解決辦法。

使用const解決問題

解決辦法:使用常量定義全局變量。

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. const NAME = "張三" 
  6.  
  7. func say() string { 
  8.     fmt.Println(NAME
  9.     //NAME = "李四"//會報錯:cannot assign to NAME 
  10.     return "ok" 
  11.  
  12. func main() { 
  13.     say() 
  14.     fmt.Println(NAME
  15.  

總結

在定義全局變量時,需要用const修飾,并且變量名全部大寫。

局部變量

局部變量,局部變量就是在某個函數內定義的變量,只能在自己函數內使用。

更專業點,在{}內定義的,只能在{}內使用,for同理。

代碼

  1. package main 
  2.  
  3. import ( 
  4.     "fmt" 
  5.  
  6. func say() string { 
  7.     var name = "張三" 
  8.     fmt.Println(name
  9.     return "ok" 
  10.  
  11. func main() { 
  12.     say() 
  13.     //fmt.Println(name)//會報錯:undefined: name 
  14.     //for同理 
  15.     for i := 0; i <= 1; i++ { 
  16.         var c = "66" 
  17.         fmt.Println(c) //66 
  18.     //fmt.Println(c)//會報錯:undefined: c 

defer

在Go中,defer語句,可以理解為在return之前執行的一個語句。

如果函數沒有return,會有一個默認的return,只是看不見而已。

一個defer

代碼

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func say() { 
  6.     //defer盡量往前放 
  7.     defer fmt.Println("我是666"
  8.     fmt.Println("你們都是最棒的"
  9.  
  10. func main() { 
  11.     say() 

執行結果

多個defer

代碼

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func say() { 
  6.     //defer盡量往前放 
  7.     defer fmt.Println(1) 
  8.     defer fmt.Println(2) 
  9.     defer fmt.Println(3) 
  10.     fmt.Println("你們都是最棒的"
  11.  
  12. func main() { 
  13.     say() 

執行結果

可以發現,defer的執行結果是反著的。

結論:最先執行的defer,會最后執行,最后執行的defer,會最先執行,有點像棧,先進后出。

defer的作用

通常來說,defer會用在釋放數據庫連接,關閉文件等需要在函數結束時處理的操作。

這里暫時先不舉例子。

panic和recover

這倆,可以理解為Python中的try和raise,因為在Go中,是沒有try的,是不能像其他語言一樣,try所有異常。

應用場景:比如某個web,在啟動時,數據庫都沒連接成功,必定要啟動失敗,就像電腦,沒有電源必不能開機一樣。

panic

先看一下語法吧

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func say() { 
  6.     var flag = true 
  7.     if flag{ 
  8.         //引發錯誤,直接中斷程序的錯誤 
  9.         panic("OMG,撤了撤了,必須撤了"
  10.  
  11. func main() { 
  12.     say() 
  13.     fmt.Println("繼續呀...")//不會執行,程序掛了 

執行效果

可以看淡,繼續呀就沒打印,程序直接掛了,但是上述好像并沒有解決這個問題。

recover

嘗試捕捉

代碼

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func say() { 
  6.   //匿名函數,defer執行的是一個匿名函數 
  7.   defer func() { 
  8.     var err = recover() 
  9.     //如果有panic錯誤,err!=nil,在此處步驟,嘗試恢復 
  10.     if err != nil { 
  11.       fmt.Println("嘗試恢復..."
  12.     } 
  13.   }() 
  14.   var flag = true 
  15.   if flag { 
  16.     panic("OMG,撤了撤了,必須撤了"
  17.   } 
  18.  
  19. func main() { 
  20.   say() 
  21.   fmt.Println("繼續呀..."

執行結果

可以看到,如果recover捕捉了,并且沒有panic,程序就會繼續正常執行。

注意

defer必須在panic語句之前。

recover必須配合defer使用。

總結

上述我們學習了Go基礎之函數進階。如果在操作過程中有任何問題,記得下面討論區留言,我們看到會第一時間解決問題。

本文轉載自微信公眾號「Go語言進階學習」,可以通過以下二維碼關注。轉載本文請聯系Go語言進階學習公眾號。

 

責任編輯:武曉燕 來源: Go語言進階學習
相關推薦

2020-10-25 07:33:13

Go語言

2021-10-30 10:43:04

語言Go函數

2020-11-05 09:58:16

Go語言Map

2022-02-16 10:03:06

對象接口代碼

2020-10-22 08:33:22

Go語言

2020-11-11 10:52:54

Go語言C語言

2020-12-27 10:15:44

Go語言channel管道

2022-04-27 10:01:43

切片Go封裝

2020-12-09 09:59:32

Go語言技術

2020-10-23 08:38:19

Go語言

2021-10-09 07:10:31

Go語言基礎

2020-12-30 09:04:32

Go語言TCPUDP

2020-12-07 05:59:02

語言Go接口

2021-10-13 10:00:52

Go語言基礎

2021-09-29 10:00:07

Go語言基礎

2020-10-22 11:15:47

Go語言變量

2021-10-16 10:17:51

Go語言數據類型

2020-12-23 08:39:11

Go語言基礎技術

2021-01-29 18:41:16

JavaScript函數語法

2021-02-20 10:06:14

語言文件操作
點贊
收藏

51CTO技術棧公眾號

久久久999精品免费| 欧美成人高清视频| 免费播放av| 国产精品一区二区你懂的| 成人国产精品免费视频| 免费萌白酱国产一区二区三区| 精品国产美女在线| 不卡一二三区| 日韩成人在线网站| 大片免费在线看视频| 欧美日韩精品是欧美日韩精品| 一区二区三区视频国产日韩 | 久久久久久久久综合| 精品欧美一区二区三区在线观看 | 亚洲欧美综合区自拍另类| 色女人在线视频| 日韩一区国产二区欧美三区| 黄色电影免费在线看| 日本高清不卡视频| 国际av在线| 欧美日韩在线播| 八戒八戒神马在线电影| 亚洲精品一区二区三区99 | 欧美图片一区二区三区| 国产在线视频资源| 91 com成人网| 成人在线免费观看黄色| 亚洲黄页视频免费观看| 高潮一区二区| 欧美日韩国产成人高清视频| 人体久久天天| 亚洲aaaaaa| 亚洲一区网站| 一级一片免费播放| 不卡av电影在线播放| 超碰网在线观看| 亚洲女同一区二区| 人操人视频在线观看| 日韩精品一区二区三区在线观看| 在线观看涩涩| 欧美成人免费网| 精品国产中文字幕第一页| 51成人做爰www免费看网站| 日韩午夜精品| wwwwww欧美| 亚洲人成网站影音先锋播放| 三级视频网站在线| 亚洲精品国产成人| 国产成人tv| 国产精品美女久久久久av福利| 日本在线不卡视频一二三区| 大陆极品少妇内射aaaaa| 国产日韩欧美精品一区| 在线看片你懂得| 日韩欧美中文字幕精品| 国产一区二区三区免费观看在线| 日本伊人精品一区二区三区介绍| 欧美一区二区| 中文字幕在线中文| 成人免费在线视频观看| 免费黄色网页在线观看| 免费av一区二区| 国产在线不卡| 免费看毛片的网址| 一区二区三区中文在线| 黄在线免费观看| 欧美www在线| 狠狠爱成人网| 久久黄色免费看| 精品视频一区二区三区免费| 99精品在线免费观看| 国产精品一区二区三区免费观看| 国产91高潮流白浆在线麻豆| 日色在线视频| 久久国产精品久久久| 伊人天天综合| 99.玖玖.com| 精品久久一区二区| 国产欧美日韩视频在线| 一区二区视频国产| 欧美日韩一区二区精品| 香蕉久久一区| 欧美在线一二三区| 夜夜精品视频一区二区| 日韩另类视频| 精品福利影视| 亚洲激情五月婷婷| 亚洲视频自拍| 亚洲精品8mav| 好吊成人免视频| 网站一区二区| 综合视频免费看| 一本大道av一区二区在线播放| 国产精品一区二区美女视频免费看 | 久久久久久国产精品美女| 亚洲性色视频| 国产xxxxx| xxxxx91麻豆| 石原莉奈在线亚洲三区| 性一爱一乱一交一视频| 一区二区三区四区视频| 亚洲专区在线| 中文在线天堂网| 97久久伊人激情网| 99久久er热在这里只有精品66| 日本高清成人vr专区| 99久久99久久精品国产片| 国产精品久久二区二区| 精品亚洲a∨| 在线观看成人av| 6080国产精品一区二区| 性xxxx欧美老肥妇牲乱| 毛片视频免费| 午夜精品久久久久久久99黑人| 成人综合婷婷国产精品久久| 国产在线69| 91久久精品www人人做人人爽| 亚洲精品亚洲人成人网| 日韩一级淫片| 99999精品视频| 国产一区二区三区丝袜| 欧美aⅴ一区二区三区视频| 青草久久伊人| 亚洲最大成人免费视频| 欧美日韩精品国产| 97精品国产福利一区二区三区| 骚视频在线观看| 国产精品视频自在线| 一二三四社区欧美黄| 狠狠综合久久av一区二区蜜桃| 理论片播放午夜国外| 热草久综合在线| 亚洲一区二区三区国产| 精品一区二区三区的国产在线观看| 交换国产精品视频一区| 欧美亚洲在线视频| 一区二区三区.www| 久久久久美女| 国产剧情在线| 亚洲欧美在线网| 在线观看欧美日韩| 久久综合狠狠综合久久综合88 | 最新国产精品久久久| 中文字幕在线免费观看| 国产日韩av高清| 欧美日韩激情视频8区| 亚洲欧美网站在线观看| 在线免费看黄| 在线精品日韩| 久久久国产一区| 亚洲天堂2014| 久久精品亚洲人成影院| www 日韩| 欧美性视频在线播放| 亚洲午夜av电影| 国产午夜精品久久久久久久| 久久99青青| av网站在线免费播放| 午夜精品区一区二区三| 亚洲视频在线观看网站| 久久嫩草精品久久久精品| 久9re热视频这里只有精品| 亚洲国产资源| 一区一区视频| 国模吧一区二区| 一本大道综合伊人精品热热 | 久久久久国产精品人| 亚洲精品亚洲人成在线观看| 欧美日本韩国一区二区| 日韩av高清| 美女撒尿一区二区三区| 亚洲在线一区二区三区| 久久国产精品99国产| 欧美黄页在线免费观看| 中文字幕在线一二| 一区二区三区四区久久| 欧美一级黑人aaaaaaa做受| 欧美唯美清纯偷拍| 波多野结衣亚洲一区| 欧洲杯什么时候开赛| 超免费在线视频| 波多野结衣在线中文| 欧美中文娱乐网| 97久久精品人人澡人人爽缅北| 色婷婷av一区二区| 国产一区二区三区视频在线播放| 国产成人澳门| 男人资源在线播放| 久久精品一区二| 福利视频久久| 欧美精品一本久久男人的天堂| 懂色aⅴ精品一区二区三区蜜月| 久久精品国产**网站演员| 亚洲女娇小黑人粗硬| 高端美女服务在线视频播放| 大地资源高清播放在线观看| 欧美黄网在线观看| 激情小说网站亚洲综合网| 91精品国产91久久久久福利| 日韩精品中文字幕在线|