成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么 Go 有兩種聲明變量的方式,有什么區別,哪種好?

開發 后端
有一位讀者剛入門 Go ,提了一個很有意思的問題:Go 有幾種聲明變量的方式,作為初學者,到底用哪種,有什么區別,又為什么要有多種聲明方式呢?

本文轉載自微信公眾號「腦子進煎魚了」,作者陳煎魚 。轉載本文請聯系腦子進煎魚了公眾號。

大家好,我是煎魚。

有一位讀者剛入門 Go ,提了一個很有意思的問題:Go 有幾種聲明變量的方式,作為初學者,到底用哪種,有什么區別,又為什么要有多種聲明方式呢?

為此,煎魚將和大家一起探索這個問題。

變量聲明

在 Go 中,一共有 2 種變量聲明的方式,各有不同的使用場景。

分別是:

  • 標準變量聲明(Variable declarations)。
  • 簡短變量聲明(Short variable declarations)

標準聲明

變量聲明創建了一個或多個變量,為它們綁定了相應的標識符,并給每個變量一個類型和初始值。

使用語法:

  1. VarDecl     = "var" ( VarSpec | "(" { VarSpec ";" } ")" ) . 
  2. VarSpec     = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) . 

案例代碼:

  1. var i int 
  2. var U, V, W float64 
  3. var k = 0 
  4. var x, y float32 = -1, -2 
  5. var ( 
  6.  i       int 
  7.  u, v, s = 1.0, 2.0, "腦子進煎魚了" 

簡短聲明

一個短變量聲明。使用語法:

  1. ShortVarDecl = IdentifierList ":=" ExpressionList . 

案例代碼:

  1. s := "煎魚進腦子了" 
  2. i, j := 0, 10 
  3. f := func() int { return 7 } 
  4. ch := make(chan int
  5. r, w, _ := os.Pipe() 
  6. _, y, _ := coord(p)  

網友疑惑

在我們群里的 Go 讀者提了這問題后,我也搜了搜相關資料。發現在 stackoverflow 上也有人提出了類似的疑惑:

問題是:使用哪一種聲明方式,令人困惑。

題主糾結的原因在于:

  • 如果一個只是另一個的速記方式,為什么它們的行為會不同?
  • Go 的作者出于什么考慮,讓兩種方式來聲明一個變量(為什么不把它們合并成一種方式)?只是為了迷惑我們?
  • 有沒有其他方面需要我在使用時留心的,以防掉進坑里?

下面我們結合 stackoverflow 的這個提問內容和回答,進一步展開,帶大家看看里面到底賣的是什么 “藥”。

先思考一下:標準聲明和短聲明,這兩者的區別的在哪那里,又或是憑喜好隨意使用?

區別在哪

代碼塊的分組聲明

使用包含關鍵字 var 的聲明語法時,和其他 package、import、const、type、var 等關鍵字一樣,是可以進行分組的代碼塊聲明的。

例如:

  1. var ( 
  2.  i       int 
  3.  u, v, s = 1.0, 2.0, "腦子進煎魚了" 

而短聲明,是不支持的。

變量的初始值指定

使用標準的變量定義時,我們可以只聲明,不主動地定義該變量的初始值(缺省會給零值)。

例如:

  1. var ( 
  2.  i    int 
  3.  s    string 

而短聲明則不行,必須要在程序中主動地去對變量定義一個值。

例如:

s := "腦子進煎魚了"

此處即使是定義的空字符串,那也屬于是用戶側主動定義的,而非缺省的零值。

局部變量,區分作用域

在編寫程序時,我們經常會有一些局部變量聲明,且作用域是有限的。

可以看看自己的代碼,這種時候,我們都會采取短聲明的方式。

例如:

  1. for idx, value := range array { 
  2.     // Do something with index and value 
  3.  
  4. if num := runtime.NumCPU(); num > 1 { 
  5.     fmt.Println("Multicore CPU, cores:", num) 

短聲明在這類場景下有明確的優勢,標準的變量聲明在這類場景不討好。

重新聲明變量

在 Go 語言規范中有明確提到,短變量聲明是可以重新聲明變量的,這是一個高頻重新聲明的覆蓋動作。

如下:

  1. var name = "煎魚.txt" 
  2.  
  3. fi, err := os.Stat(name
  4. if err != nil { 
  5.     log.Fatal(err) 
  6.  
  7. data, err := ioutil.ReadFile(name
  8. if err != nil { 
  9.     log.Fatal(err) 
  10. ... 

上述代碼中,err 變量就是不斷地被反復定義。在 if err != nil 猖狂的現在,短變量在此處的優勢,簡直是大殺器了。

總結

相信很多小伙伴初入門時都為此糾結過一下,又或是很多教程壓根就沒有說清楚兩者變量聲明的區別。

在今天這篇文章中,我們介紹了 Go 的兩種變量聲明放水。并且針對短聲明存在的場景進行了說明。

主要是:

  • 代碼塊的分組聲明。
  • 變量的初始值指定。
  • 局部變量,區分作用域。
  • 重新聲明變量。

你覺得變量聲明上,還有沒有別的優缺點呢,歡迎在評論區交流:)

參考

GoLang Variable Declaration

Why there are two ways of declaring variables in Go, what's the difference and which to use?

 

What is the best practice when declaring variables in go (golang)? E.G. should I use "var x int = 1" or just "x := 1"?

 

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2024-01-05 08:31:08

C語言

2020-09-04 06:27:22

編碼命令式聲明式代碼

2019-09-26 06:27:59

FTPSFTPTCP

2022-08-31 08:33:54

Bash操作系統Linux

2020-12-22 13:46:48

APISKD

2011-08-08 14:09:55

dhcpbootp

2021-05-16 14:26:08

RPAIPACIO

2020-09-25 08:19:51

SecOps vs D

2022-09-13 10:23:52

MLOpsDevOps開發

2024-05-27 00:40:00

2021-12-17 14:40:02

while(1)for(;;)語言

2022-08-02 08:23:37

SessionCookies

2024-09-09 13:10:14

2024-03-05 18:59:59

前端開發localhost

2022-02-27 15:33:22

安全CASBSASE

2018-07-13 17:05:22

SQLMySQL數據庫

2023-10-13 15:48:17

OT系統

2020-11-09 14:07:53

PyQtQt編程

2020-03-09 20:56:19

LoRaLoRaWAN無線技術

2022-09-08 18:38:26

LinuxWindowsmacOS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: gav成人免费播放视频 | 在线a视频 | 亚洲网站在线播放 | 日韩成人在线网址 | 一区二区三区小视频 | 日韩成人av在线 | 国产欧美在线 | 久久久久国产一级毛片高清网站 | 欧美大片一区 | 免费一区二区 | 国产精品国产 | 高清国产午夜精品久久久久久 | 亚洲伊人a | 国产精品精品久久久 | 国产日韩91 | 国产免费拔擦拔擦8x高清 | 亚洲精品乱码久久久久久蜜桃91 | 伊人av在线播放 | 国产成人精品免高潮在线观看 | 中文字幕在线观看一区 | 日韩欧美在线播放 | 欧美精品综合在线 | 精品国产乱码一区二区三 | 狠狠干天天干 | 精品视频久久久久久 | 欧美日韩在线播放 | 久在线 | 亚洲一区亚洲二区 | 欧产日产国产精品国产 | 国产乱码精品一品二品 | 五月婷婷视频 | 特黄毛片 | 在线不卡视频 | 久久久久国产 | 一区视频在线 | 久久久久精 | 91精品国产乱码久久蜜臀 | 成年人免费网站 | 日产精品久久久一区二区福利 | аⅴ资源新版在线天堂 | 亚洲欧美日韩精品久久亚洲区 |