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

Go 語言的變量與常量

開發 后端
go 語言的變量聲明和大多數語言類似,通過 var 關鍵字聲明變量,只是 go 語言作為靜態類型語言,聲明變量時需要指定其類型。

[[391525]]

變量

go 語言的變量聲明和大多數語言類似,通過 var 關鍵字聲明變量,只是 go 語言作為靜態類型語言,聲明變量時需要指定其類型。

下面的代碼表示聲明一個『name』變量,類型為『string』,并給其賦值『"Shenfq"』。

  1. var name string = "Shenfq" 

如果我們不進行賦值,這變量會獲得一個默認值,下面列舉一些 go 語言中的基礎類型及其默認值。

多變量聲明

上面介紹 go 語言通過 var 關鍵字進行單個變量聲明,我們還可以通過 var 關鍵字進行多個變量的聲明:

  1. // 聲明兩個變量為同一類型 
  2. var firstName, lastName string 
  3. // 給兩個變量同時賦值 
  4. firstName, lastName = "frank""shen" 

  1. // 聲明兩個變量為不同類型 
  2. var ( 
  3.   age int 
  4.  name string 
  5. // 給兩個變量同時賦值 
  6. age, name = 25, "Shenfq" 

類型推導

如果我們在變量聲明階段,對變量進行了賦值操作,這時候我們是可以直接省略變量類型的,因為 go 在編譯過程中會依據所賦予的初始值推導出其類型。

  1. var age = 25 
  2.  
  3. fmt.Printf("age 類型為:%T", age) // age 類型為:int 

  1. var ( 
  2.   age = 18 
  3.   name = "Shenfq" 
  4. fmt.Printf("age 類型為:%T", age) // age 類型為:int 
  5. fmt.Printf("name 類型為:%T"name) // name 類型為:string 

簡短格式

前面介紹了變量聲明的時候,如果給定了初始值,go 在編譯階段可以進行類型推導。這種情況,go 提供了一種更簡單的聲明方式,通過 := 的方式進行變量聲明,可以省略 var 關鍵字。

  1. func main() { 
  2.   age := 25 
  3.  name := "Shenfq" 

  1. // 也可以進行多個變量同時賦值 
  2. func main() { 
  3.   age, name := 25, "Shenfq" 

⚠️注意事項一

這種聲明方式只能用于函數體內,不能用于全局變量的聲明。

  1. // ⚠️ 不能在全局使用這種方式聲明變量 
  2. age, name := 25, "Shenfq" 
  3.  
  4. // 只能在函數體內使用該方式 
  5. func main() { 
  6.  age, name := 25, "Shenfq" 
  7.  fmt.Printf("age 類型為:%T", age) 
  8.  fmt.Printf("name 類型為:%T"name

 

warning

⚠️注意事項二

已經聲明過的變量,不能使用 := 的方式進行賦值。

  1. func main() { 
  2.   var age int 
  3.  age := 25 

 

已經聲明過的變量,只能通過 = 的方式進行賦值。

  1. func main() { 
  2.   var age int 
  3.  age = 25 

全局變量與局部變量

簡單來說,聲明在函數體外的變量為全局變量,聲明在函數體內的變量為局部變量。

局部變量如果有聲明,沒有進行使用,則不會通過編譯。

  1. func main() { 
  2.   var age int 

 

但是,全局變量是可以聲明而不使用的。

  1. var age int 
  2. func main() { 
  3.  name := "Shenfq" 
  4.  //fmt.Printf("age 類型為:%T", age) 
  5.  fmt.Printf("name 類型為:%T"name

上面的代碼中,我們聲明了 age 全局變量,但是并未使用,可以正常編譯。

空白標識符

前面介紹過,go 在變量賦值的時候,可以一次性對多個變量賦值。同時,go 的函數在 return 的時候,也能一次返回多個結果。

  1. func double(num int) (string, int) { 
  2.  var err string 
  3.  if num < 0 { 
  4.   err = "num 不能為負數" 
  5.   return err, -1 
  6.  } 
  7.  result := num * 2 
  8.  return err, result 

上面我們實現了一個 double 函數,該函數接受一個 int 類型的變量(num),返回兩個值,一個為異常提示(string 類型),一個為 num * 2 的結果。如果 num < 0 , 則提示 num 不能負數。

  1. func main() { 
  2.  err, res := double(10) 
  3.  if err != "" { 
  4.   fmt.Printf(err) 
  5.  } else { 
  6.   fmt.Printf("結果為:%v", res) 
  7.  } 

如果,我們并不關心 err ,只想執行 double 之后,輸出其結果。

  1. func main() { 
  2.  err, res := double(10) 
  3.  fmt.Printf("結果為:%v", res) 

 

運行后,我們會收到一個編譯錯誤,err 變量并未使用。這時候,就需要用到空白標識符(_)。

  1. func main() { 
  2.  _, res := double(10) 
  3.  fmt.Printf("結果為:%v", res) 

我們可以通過 _ 來接受 err 值,這個地方的值就會被拋棄掉,就能順利通過編譯。

常量

常量就是不會發生變化的變量,一旦聲明就不會改變。go 語言中,常量的聲明只需要將變量聲明時的 var 關鍵字替換為 const 關鍵字。

  1. // 隱式類型定義 
  2. const PI = 3.14 
  3. // 顯式類型定義 
  4. const PI2 float  = 3.14 

多常量聲明

與變量類似,常量也支持一次性聲明多個。

  1. func main() { 
  2.  const ( 
  3.   PI = 3.14 
  4.   PI2 = 3.14 
  5.  ) 
  6.  fmt.Printf("結果為:%v\n", PI) 
  7.  fmt.Printf("結果為:%v\n", PI2) 

 

如果一次聲明多個常量時,某個常量如果為進行賦值,默認會與上一個常量的值進行同步。下面代碼的運行結果,與上面的代碼一致。

  1. func main() { 
  2.  const ( 
  3.   PI = 3.14 
  4.   PI2 
  5.  ) 
  6.  fmt.Printf("結果為:%v\n", PI) 
  7.  fmt.Printf("結果為:%v\n", PI2) 

特殊常量

有個叫做 iota 的特殊常量,在常量的賦值過程中,會進行累加。

  1. func main() { 
  2.  const ( 
  3.   A = iota 
  4.   B 
  5.   C 
  6.  ) 
  7.  fmt.Println(A, B, C) // 0 1 2 

在 iota 累加的過程中,可以對其進行打斷。

  1. func main() { 
  2.  const ( 
  3.   A = iota 
  4.   B 
  5.   C = "Shenfq" 
  6.     D 
  7.     E 
  8.  ) 
  9.  fmt.Println(A, B, C, D, E) 

這時候輸出的結果為:

這是由于我們將常量 C 修改為了字符串 "Shenfq",常量 D、E 會默認與上一條常量保持同步,所以會得到上述結果。但是, iota 是支持重新恢復累加,只需要在指定位置重新賦值一次 iota 即可。

  1. func main() { 
  2.  const ( 
  3.   A = iota 
  4.   B 
  5.   C = "Shenfq" 
  6.   D = iota // 恢復累加狀態 
  7.   E 
  8.  ) 
  9.  fmt.Println(A, B, C, D, E) 

由于 C 占用了原本 2 的位置,所以 D 恢復后,也是從 3 開始的。

iota 這種累加的特性,特別像我們在其他語言中使用的枚舉,所以在 go 語言中,我們可以直接將 iota 當做枚舉來使用。

  1. type ButtonType int 
  2. const ( 
  3.   Default ButtonType = iota 
  4.   Primary 
  5.   Warning 
  6.   Error 

 

責任編輯:姜華 來源: 自然醒的筆記本
相關推薦

2022-07-31 23:05:55

Go語言短變量

2021-03-25 12:00:18

Python變量常量

2021-04-13 07:58:42

Go語言函數

2021-07-30 07:28:15

WorkerPoolGo語言

2024-01-04 07:49:00

Go語言方法

2021-04-20 09:00:48

Go 語言結構體type

2021-07-13 06:44:04

Go語言數組

2020-07-07 07:00:00

RustGo語言編程語言

2021-04-25 08:11:57

C語言常量與變量標識符命名規范

2024-12-13 16:28:43

2023-12-15 14:38:00

GoRust編程語言

2012-10-08 09:25:59

GoGo語言開發語言

2010-03-22 13:49:20

2023-09-21 22:02:22

Go語言高級特性

2022-06-22 09:24:30

云原生Go 語言

2024-03-01 20:16:03

GoRust語言

2021-11-06 10:18:30

Python變量常量

2018-03-12 22:13:46

GO語言編程軟件

2025-03-31 00:29:44

2011-12-15 09:00:51

PHP 7
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产资源在线播放 | 欧美日本韩国一区二区 | 国产精品国产馆在线真实露脸 | 欧美一区二区在线观看 | 成人免费视频一区 | 国产精品中文在线 | 国产成人综合在线 | 精品乱码久久久久 | www.久久| 亚洲精品国产成人 | 91精品国产综合久久福利软件 | 午夜羞羞| 成人欧美一区二区三区黑人孕妇 | 欧美一区二区三区的 | 国产精品久久久久久久久婷婷 | 91精品国产欧美一区二区成人 | 国产99免费 | 亚洲欧美日本在线 | 一区二区三区中文字幕 | 在线一区视频 | 中文字幕一区二区三 | 91精品国产综合久久久久 | 国内精品视频 | 91精品国产91久久久久福利 | 国产三区在线观看视频 | www国产成人免费观看视频,深夜成人网 | 精品永久 | 成人在线电影在线观看 | 日韩欧美精品在线播放 | 国产成视频在线观看 | 欧美aⅴ在线观看 | 国产一区免费视频 | 日日摸夜夜爽人人添av | 精品国产欧美一区二区三区成人 | 成人激情视频在线观看 | 国产精品二区三区在线观看 | 99精品视频一区二区三区 | 免费人成在线观看网站 | 日韩av美女电影 | 天天操伊人 | 巨大黑人极品videos精品 |