首頁 後端開發 Golang Go語言中變數是什麼

Go語言中變數是什麼

Dec 02, 2022 pm 07:53 PM
go golang go語言

在Go語言中,變數是程式運行過程中,內容可以改變(修改)的量; 變數是程式的基本組成單位,是記憶體中一個資料儲存空間的表示,可以透過變數名稱找到變數值。變數的功能是儲存使用者的數據,是計算機語言中能儲存計算結果或能表示值抽象概念。

Go語言中變數是什麼

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

1、概述

變數(Variable)是程式運作過程中,內容可以改變(修改)的量; 變數是程式的基本組成單位,是記憶體中一個資料儲存空間的表示,可以透過變數名稱找到變數值。

變數的功能是儲存使用者的數據,是電腦語言中能儲存計算結果或能表示值抽象概念。 

變量,是透過變數的識別碼定位值的過程。變數的記憶體模擬示範:

Go語言中變數是什麼

2、定義:宣告與初始化

2、定義:宣告與初始化

##定義變使用var關鍵字,需要指定其類型,可以同時初始化,如果沒有指定初始化值,則使用類型的預設值,語法如下:

// 声明变量,未初始化(默认值初始化)
var name string
// 声明变量,特定值初始化
var user string = "Hank"
登入後複製
Go語言中的變數必須聲明後才可以使用,不能直接使用未定義的變數。

3、型別預設值(零值)

#Go語言的型別預設值如下所示:

整數型與浮點型變數的預設值為0。 字串變數的預設值為空字串。 布林型變數預設為 bool。 切片、函數、指標變數的預設為 nil。

4、強型別

Go語言是強型別語言,變數必須有型別,同時變數僅能儲存特定型別的資料。 【相關推薦:Go影片教學

5、類型推導

定義變數時,如果指定了初始值,則可以省略類型的定義,Go語言可以自己由資料推導出類型。語法為:

// 声明变量,特定值初始化,类型推导出user为字符串string型
var user = "Hank"
登入後複製

6、短宣告(定義)

為了簡化定義變數,使用運算子: = 配合類型推導,可以快速完成變數的定義,語法為:

user := "hank"
登入後複製

#7、批次定義

使用var或:=都可以一次定義多個變量,語法為: 

var

#
var (
  v1 = 42
  v2 = "hank"
  )
也可以
var v1, v2 = 42, "hank"
登入後複製

##:=

v1, v2 := 42, "hank"
登入後複製

建議使用var() 宣告區塊語法,因為程式碼維護容易。

8、批次賦值

一次為多個變數進行賦值。 (類似短定義。v1, v2, v3 := 42, "hank", false) 當變數定義完畢後,再批量對其賦值,沒有定義功能!語法為:
var (
  v1 int
  v2 int
)
// 批量赋值
v1, v2 = 42, 1024
登入後複製

此語法,通常配合函數的批次回傳來使用,一次接收多個回傳值,語法為:

func main() {
  var (
    v1 int
    v2 int
  )
  // 调用函数,接收其返回值
  v1, v2 = getData()
}
// 返回两个值的函数
func getData() (int, int) {
  // 返回了两个值(假设42为最小值,1024为最大值)
  return 42, 1024
}
登入後複製

非常方便的可以交換兩個變數的值:

var (
  v1 = 42
  v2 = 1024
)
// 交换
v1, v2 = v2, v1
登入後複製
執行後,v1==1024, v2==42############ 9.匿名變數############標識符為_(底線)的變量,是系統保留的匿名變量,在賦值後,會立即釋放,稱為匿名變數。其作用是變數佔位符,對其變數賦值結構。通常會在批量賦值時使用。例如,函數傳回多個值,我們只需要其中部分,則不需要的使用_來佔位,示範:######
func main() {
  var (
    v int
  )
  // 调用函数,仅仅需要第二个返回值,第一,三使用匿名变量占位
  _, v, _ = getData()
}
// 返回两个值的函数
func getData() (int, int, int) {
  // 返回3个值
  return 42, 1024, 2012
}
登入後複製
############10、變數作用域############Go語言中的變數是區塊作用域。區塊,指的是使用{}定義的程式碼段,包括函數,if/switch/for語句,或獨立的{}都是區塊。在區塊內定義的變數僅在本區塊內可用。定義,指的是 var 或 := 定義的變數。 Go語言的作用域是層疊的,是說內層塊可以直接存取到外層塊的變量,前提是內層塊沒有定義同名的外層變量。示範如下:######
// 全局(函数外)定义3个变量
var (
  v1 = 1
  v2 = 2
  v3 = 3
)
func main() {

  // main{}函数块,定义2个变量
  var (
    v2 = 22
    v3 = 33
  )
  fmt.Println(v1, v2, v3)
  // 结果 1 22 33

  {
    // main()函数内部{}块,定义1个变量
    var (
      v3 = 333
    )
    fmt.Println(v1, v2, v3)
    // 结果 1 22 333
  }
}
登入後複製
####

上面代码中: 在main()中,v2,v3被重新定义,则在main()中,v1是外部,而v2, v3是main函数局部的。 在main()内部的{}中,v3被重新定义,则在main()内部的{}中,v1是外部,而v2是main()定义的, v3是main()内部{}定义的的。

变量可以沿内部作用域向外部作用域查找变量的过程。

带有{}的语句,其中的变量也仅仅在内部有效,例如for,if,switch等,演示:

for i := 0; i < 10; i++ {
  fmt.Println(i)
}
fmt.Println(i)
// 会提示变量i未定义, undefined: i
登入後複製

注意i,是通过短声明在for内部定义的变量,仅仅在for内部有意义。

互不嵌套的{}见作用域不可见,不可互相访问。

func main() {
  {
    v := 42
  }
  {
    fmt.Println(v)
    // 会提示变量v未定义, undefined: v
  }
}
登入後複製

更多编程相关知识,请访问:编程教学!!

以上是Go語言中變數是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1250
24
在Go語言中使用Redis Stream實現消息隊列時,如何解決user_id類型轉換問題? 在Go語言中使用Redis Stream實現消息隊列時,如何解決user_id類型轉換問題? Apr 02, 2025 pm 04:54 PM

Go語言中使用RedisStream實現消息隊列時類型轉換問題在使用Go語言與Redis...

GoLand中自定義結構體標籤不顯示怎麼辦? GoLand中自定義結構體標籤不顯示怎麼辦? Apr 02, 2025 pm 05:09 PM

GoLand中自定義結構體標籤不顯示怎麼辦?在使用GoLand進行Go語言開發時,很多開發者會遇到自定義結構體標籤在�...

Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Apr 02, 2025 pm 04:12 PM

Go語言中哪些庫是大公司開發或知名開源項目?在使用Go語言進行編程時,開發者常常會遇到一些常見的需求,�...

Golang的目的:建立高效且可擴展的系統 Golang的目的:建立高效且可擴展的系統 Apr 09, 2025 pm 05:17 PM

Go語言在構建高效且可擴展的系統中表現出色,其優勢包括:1.高性能:編譯成機器碼,運行速度快;2.並發編程:通過goroutines和channels簡化多任務處理;3.簡潔性:語法簡潔,降低學習和維護成本;4.跨平台:支持跨平台編譯,方便部署。

在Go編程中,如何正確管理Mysql和Redis的連接與釋放資源? 在Go編程中,如何正確管理Mysql和Redis的連接與釋放資源? Apr 02, 2025 pm 05:03 PM

Go編程中的資源管理:Mysql和Redis的連接與釋放在學習Go編程過程中,如何正確管理資源,特別是與數據庫和緩存�...

多進程日誌寫入如何保證並發安全又高效? 多進程日誌寫入如何保證並發安全又高效? Apr 02, 2025 pm 03:51 PM

高效處理多進程日誌寫入的並發安全問題多進程同時寫入同一個日誌文件,如何保證並發安全且高效?這是一個...

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

使用Go語言連接Oracle數據庫時是否需要安裝Oracle客戶端? 使用Go語言連接Oracle數據庫時是否需要安裝Oracle客戶端? Apr 02, 2025 pm 03:48 PM

使用Go語言連接Oracle數據庫時是否需要安裝Oracle客戶端?在使用Go語言開發時,連接Oracle數據庫是一個常見需求�...

See all articles