【Go語言系列】2.3、Go語言基本程式結構:變數及常量

来源:https://www.cnblogs.com/mrbug/archive/2020/02/27/12133647.html
-Advertisement-
Play Games

1、什麼變數 變數來源於數學,從根本上說,變數相當於是對一塊數據存儲空間的命名,程式可以通過定義一個變數來申請一塊數據存儲空間,之後可以通過引用變數名來使用這塊存儲空間。 1.1變數聲明 Go 語言變數名由字母、數字、下劃線組成,其中首個字母不能為數字。 第一種,指定變數類型,聲明後若不賦值,使用默 ...


1、什麼變數

變數來源於數學,從根本上說,變數相當於是對一塊數據存儲空間的命名,程式可以通過定義一個變數來申請一塊數據存儲空間,之後可以通過引用變數名來使用這塊存儲空間。

 

1.1變數聲明

Go 語言變數名由字母、數字、下劃線組成,其中首個字母不能為數字。

第一種,指定變數類型,聲明後若不賦值,使用預設值。

var v_name v_type
v_name = value

第二種,根據值自行判定變數類型。

var v_name = value

第三種,省略var, 註意 :=左側的變數不應該是已經聲明過的,否則會導致編譯錯誤。

v_name := value

// 例如
var a int = 10
var b = 10
c : = 10

(冒號和等號的組合:=),用於明確表達同時進行變數聲明和初始化的工作。

 

1.2、多變數聲明

1、類型相同多個變數, 非全局變數

var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3

2、自動推斷,不需要顯示聲明類型

var vname1, vname2, vname3 = v1, v2, v3 
vname1, vname2, vname3 := v1, v2, v3 //出現在:=左側的變數不應該是已經被聲明過的,否則會導致編譯錯誤

3、類型不同多個變數, 全局變數, 局部變數不能使用這種方式

var (
    vname1 v_type1
    vname2 v_type2
)

實例如下:

package main

var x, y int
var (  //這種只能出現在全局變數中,函數體內不支持
    a int
    b bool
)

var c, d int = 1, 2
var e, f = 123, "hello"

//這種不帶聲明格式的只能在函數體中出現
//g, h := 123, "hello"

func main(){
    g, h := 123, "hello"   
	fmt.Println(g) //輸出變數g
	fmt.Println(h) //輸出變數h    
}

 

1.3、變數賦值與初始化

在變數聲明時,就給變數指定一個值,這個過程叫變數初始化,如:

package main

//初始化變數c的值為2;變數d的值為2。
var c, d int = 1, 2
//初始化變數e的值為123;變數f的值為'hello'。
var e, f = 123, "hello"

func main(){
    //初始化變數g的值為123;變數h的值為'hello'。
    g, h := 123, "hello"    
	fmt.Println(g) //輸出變數g
	fmt.Println(h) //輸出變數h    
}

在Go語法中,變數初始化和變數賦值是兩個不同的概念。下麵為聲明一個變數之後的賦值過程:

package main

import "fmt"

func main() {
	//初始化變數g的值為123;變數h的值為'hello'。
	g, h := 123, "hello"
	g = 234        //將 234 賦值給變數g
	fmt.Println(g) //輸出變數g
	fmt.Println(h) //輸出變數h
}

 

1.4、匿名變數

在Go語言中,單個的下劃線“_”是一個特殊的變數,我們稱之為匿名變數(anonymous variable),匿名變數不占用命名空間,不會分配記憶體。匿名變數與匿名變數之間也不會因為多次聲明而無法使用

我們在使用傳統的強類型語言編程時,經常會出現這種情況,即在調用函數時為了獲取一個值,卻因為該函數返回多個值而不得不定義一堆沒用的變數。在Go中這種情況可以通過使用匿名變數來避免從而讓代碼看起來更加的優雅。

假設getTime()函數的定義如下,它返回2個值,分別為hour和minute:

func getTime() (hour, minute int) { 
	return 11,20
}

若只想獲得hour,則:

h,_ := getTime()

 

2、常量

在Go語言中,常量是指編譯期間就已知且不可改變的值。常量可以是數值類型(包括整型、浮點型和複數類型)、布爾類型、字元串類型等。

2.1、 常量定義

常量的定義格式:

const identifier [type] = value

你可以省略類型說明符 [type],因為編譯器可以根據變數的值來推斷其類型。舉例:

const Pi float64 = 3.14159265358979323846 
const zero = 0.0 // 無類型浮點常量
const Pi, zero float32 = 3.14159265, 0.0 // 常量的多重賦值

// Pi = 3.14159265, zero = 0.0, name = "roy", 無類型整型和字元串常量
const Pi, zero, name = 3.14159265, 0.0, "roy" 

 

2.2、枚舉

定義一組常量,在Go語言中叫做枚舉,例如:

	const (
		Sunday    = 0
		Monday    = 1
		Tuesday   = 2
		Wednesday = 3
		Thursday  = 4
		Friday    = 5
		Saturday  = 6
	)

 

2.3、預定義常量

Go語言預定義常量:true、false和iota。其中true、false是兩個bool類型的值,這個我們在後面的“數據類型”這一節會講到。

iota是一個可以被編譯器修改的常量。在每一個const關鍵字出現時,被重置為0,然後再下一個const出現之前,每出現一次iota,其所代表的數字會自動增加1,舉例:

package main

import (
	"fmt"
)

func main() {
	const (
		Sunday    = iota
		Monday    = iota
		Tuesday   = iota
		Wednesday = iota
		Thursday  = iota
		Friday    = iota
		Saturday  = iota
	)

	const (
		a = iota
		b = iota
	)
	fmt.Println(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)
	fmt.Println(a, b)

}

以上代碼輸出:

0 1 2 3 4 5 6
0 1

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 matlab概貌 MATLAB是MATrix LABoratory(矩陣實驗室)的縮寫,是一款由美國The MathWorks公司出品的商業數學軟體。matlab是一種用於演算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和互動式環境。除了矩陣運算、繪製函數/數據圖像等常用功能外,ma ...
  • 問題描述 輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。 演算法描述 由於a和b都比較大,所以不能直接使用語言中的標準數據類型來存儲。對於這種問題,一般使用數組來處理。定義一個數組A,A[0]用於存儲a的個位,A[1]用於存儲a的十位,依此類推。同樣可以用一個數組B來存儲b。計算c  ...
  • 1、格式 [數據1,數據2,數據3,...] 列表可以一次性存多個數據,可以為不同的數據類型 2、下標 從0開始循序向下分配 3、常用函數 查找 index():返回指定數據所在位置下標,不存在就報錯 count():返回某個字串在字元串中出現的次數 len():返回列表列表中的數據個數 name= ...
  • 4.單例模式詳解 4.1.課程目標 1、掌握單例模式的應用場景。 2、掌握IDEA環境下的多線程調試方式。 3、掌握保證線程安全的單例模式策略。 4、掌握反射暴力攻擊單例解決方案及原理分析。 5、序列化破壞單例的原理及解決方案。 6、掌握常見的單例模式寫法。 4.2.內容定位 1、聽說過單例模式,但 ...
  • 1、條件語句 if if…else… 多重if if嵌套 三目運算符 (化簡的if else) if 條件: 條件成立執行代碼1 條件成立執行代碼2 if False: print('if判斷為假,不執行') print('有減進的語句都在if里') print('沒有縮進,我不是if,可以執行') ...
  • c語言心形告白代碼實現 1.彩色告白 include include include include define U 0.1 define V 0.053 void SetColor(unsigned short ForeColor,unsigned short BackGroundColor) ...
  • go 語言中文網(每日資訊)_2020 02 27 一、Go 語言中文網 1. "如何正確看待 Google 宣佈 Fuchsia 操作系統沒有選 Go 作為終端開發語言 " 2. "Actor 還是 CSP?Go 中的併發模式還能講這麼細緻" 3. "【每日一庫】讓你的 json 可以 grep: ...
  • 行為模式:關註系統中對象之間的相互交互,研究運行時對象之間的相互通信和協作,明確對象職責 1.模板方法模式(template method) 定義了一個操作中的演算法骨架,將某些步驟延遲到子類中實現。這樣,新的子類可以在不改變一個演算法結構的前提下重新定義該演算法的某些特定步驟。 即:處理步驟父類中定義好 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...