Go語言基礎之變數和常量

来源:https://www.cnblogs.com/Golanguage/archive/2020/02/10/12293327.html
-Advertisement-
Play Games

變數和常量是編程中必不可少的部分,也是很好理解的一部分。 標識符與關鍵字 標識符 在編程語言中標識符就是程式員定義的具有特殊意義的詞,比如變數名、常量名、函數名等等。 Go語言中標識符由字母數字和_(下劃線)組成,並且只能以字母和_開頭。 舉幾個例子:abc, _, _123, a123。 關鍵字 ...


變數和常量是編程中必不可少的部分,也是很好理解的一部分。

標識符與關鍵字

標識符

在編程語言中標識符就是程式員定義的具有特殊意義的詞,比如變數名、常量名、函數名等等。 Go語言中標識符由字母數字和_(下劃線)組成,並且只能以字母和_開頭。 舉幾個例子:abc, _, _123, a123

關鍵字

關鍵字是指編程語言中預先定義好的具有特殊含義的標識符。 關鍵字和保留字都不建議用作變數名。

Go語言中有25個關鍵字:

    break        default      func         interface    select
    case         defer        go           map          struct
    chan         else         goto         package      switch
    const        fallthrough  if           range        type
    continue     for          import       return       var

此外,Go語言中還有37個保留字。

    Constants:    true  false  iota  nil

        Types:    int  int8  int16  int32  int64  
                  uint  uint8  uint16  uint32  uint64  uintptr
                  float32  float64  complex128  complex64
                  bool  byte  rune  string  error

    Functions:   make  len  cap  new  append  copy  close  delete
                 complex  real  imag
                 panic  recover

變數

變數的來歷

程式運行過程中的數據都是保存在記憶體中,我們想要在代碼中操作某個數據時就需要去記憶體上找到這個變數,但是如果我們直接在代碼中通過記憶體地址去操作變數的話,代碼的可讀性會非常差而且還容易出錯,所以我們就利用變數將這個數據的記憶體地址保存起來,以後直接通過這個變數就能找到記憶體上對應的數據了。

變數類型

變數(Variable)的功能是存儲數據。不同的變數保存的數據類型可能會不一樣。經過半個多世紀的發展,編程語言已經基本形成了一套固定的類型,常見變數的數據類型有:整型、浮點型、布爾型等。

Go語言中的每一個變數都有自己的類型,並且變數必須經過聲明才能開始使用。

變數聲明

Go語言中的變數需要聲明後才能使用,同一作用域內不支持重覆聲明。 並且Go語言的變數聲明後必須使用。

標準聲明

Go語言的變數聲明格式為:

var 變數名 變數類型

變數聲明以關鍵字var開頭,變數類型放在變數的後面,行尾無需分號。 舉個例子:

var name string
var age int
var isOk bool

批量聲明

每聲明一個變數就需要寫var關鍵字會比較繁瑣,go語言中還支持批量變數聲明:

var (
    a string
    b int
    c bool
    d float32
)

變數的初始化

Go語言在聲明變數的時候,會自動對變數對應的記憶體區域進行初始化操作。每個變數會被初始化成其類型的預設值,例如: 整型和浮點型變數的預設值為0。 字元串變數的預設值為空字元串。 布爾型變數預設為false。 切片、函數、指針變數的預設為nil

當然我們也可在聲明變數的時候為其指定初始值。變數初始化的標準格式如下:

var 變數名 類型 = 表達式

舉個例子:

var name string = "Q1mi"
var age int = 18

或者一次初始化多個變數

var name, age = "Q1mi", 20

類型推導

有時候我們會將變數的類型省略,這個時候編譯器會根據等號右邊的值來推導變數的類型完成初始化。

var name = "Q1mi"
var age = 18

短變數聲明

在函數內部,可以使用更簡略的 := 方式聲明並初始化變數。

package main

import (
	"fmt"
)
// 全局變數m
var m = 100

func main() {
	n := 10
	m := 200 // 此處聲明局部變數m
	fmt.Println(m, n)
}

匿名變數

在使用多重賦值時,如果想要忽略某個值,可以使用匿名變數(anonymous variable)。 匿名變數用一個下劃線_表示,例如:

func foo() (int, string) {
	return 10, "Q1mi"
}
func main() {
	x, _ := foo()
	_, y := foo()
	fmt.Println("x=", x)
	fmt.Println("y=", y)
}

匿名變數不占用命名空間,不會分配記憶體,所以匿名變數之間不存在重覆聲明。 (在Lua等編程語言里,匿名變數也被叫做啞元變數。)

註意事項:

  1. 函數外的每個語句都必須以關鍵字開始(var、const、func等)
  2. :=不能使用在函數外。
  3. _多用於占位,表示忽略值。

常量

相對於變數,常量是恆定不變的值,多用於定義程式運行期間不會改變的那些值。 常量的聲明和變數聲明非常類似,只是把var換成了const,常量在定義的時候必須賦值。

const pi = 3.1415
const e = 2.7182

聲明瞭pie這兩個常量之後,在整個程式運行期間它們的值都不能再發生變化了。

多個常量也可以一起聲明:

const (
    pi = 3.1415
    e = 2.7182
)

const同時聲明多個常量時,如果省略了值則表示和上面一行的值相同。 例如:

const (
    n1 = 100
    n2
    n3
)

上面示例中,常量n1n2n3的值都是100。

iota

iota是go語言的常量計數器,只能在常量的表達式中使用。

iota在const關鍵字出現時將被重置為0。const中每新增一行常量聲明將使iota計數一次(iota可理解為const語句塊中的行索引)。 使用iota能簡化定義,在定義枚舉時很有用。

舉個例子:

const (
		n1 = iota //0
		n2        //1
		n3        //2
		n4        //3
	)

幾個常見的iota示例:

使用_跳過某些值

const (
		n1 = iota //0
		n2        //1
		_
		n4        //3
	)

iota聲明中間插隊

const (
		n1 = iota //0
		n2 = 100  //100
		n3 = iota //2
		n4        //3
	)
	const n5 = iota //0

定義數量級 (這裡的<<表示左移操作,1<<10表示將1的二進位表示向左移10位,也就是由1變成了10000000000,也就是十進位的1024。同理2<<2表示將2的二進位表示向左移2位,也就是由10變成了1000,也就是十進位的8。)

const (
		_  = iota
		KB = 1 << (10 * iota)
		MB = 1 << (10 * iota)
		GB = 1 << (10 * iota)
		TB = 1 << (10 * iota)
		PB = 1 << (10 * iota)
	)

多個iota定義在一行

const (
		a, b = iota + 1, iota + 2 //1,2
		c, d                      //2,3
		e, f                      //3,4
	)

轉載自李文周博客


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

-Advertisement-
Play Games
更多相關文章
  • 類的屬性的處理: 1. 一般使用private訪問許可權。 2. 提供相應的get/set方法來訪問相關屬性,這些方法通常是public修飾的,以提供對屬性的賦值與讀取操作(註意:boolean變數的get方法是is開頭!)。 3. 一些只用於本類的輔助性方法可以用private修飾,希望其他類調用的 ...
  • 今日內容 模塊知識 內置模塊 time datetime json 其他 內容回顧 & 作業題 重要知識點 構造字典和函數對應關係,避免重覆的if else a=1 b=2 == a,b = b,a 裝飾器 找文件路徑 腳本參數 sys.exit range / xrange 讀大文件 面試題如果遇 ...
  • 1. 第一個程式 1.1 Hello Python書寫步驟 步驟一:新建文本文檔文件,修改名稱為hello.py 步驟二:使用記事本打開文件,書寫程式內容如下: 步驟三:打開命令行,輸入執行指令:python hello.py 運行結果:屏幕顯示hello python 1.2 Bug 軟體的Bug ...
  • Java是使用“訪問控制符”來控制哪些細節需要封裝,哪些細節需要暴露的。 Java中4種“訪問控制符”分別為private、default、protected、public,它們說明瞭面向對象的封裝性,所以我們要利用它們儘可能的讓訪問許可權降到最低,從而提高安全性。 下麵詳細講述它們的訪問許可權問題。其 ...
  • 1. Python語言 1.1 編程語言 語言是人類最重要的交際工具,是人類之間進行信息交換的主要表達方式。 編程語言是用來定義電腦程式的語言,用來向電腦發出指令。 1.2 Python語言 Python語言是一種面向對象的解釋型電腦程式設計語言。 Python語言創始人為吉多·範羅蘇姆(Gu ...
  • 我要看電視,只需要按一下開關和換台就可以了。有必要瞭解電視機內部的結構嗎?有必要碰碰顯像管嗎?製造廠家為了方便我們使用電視,把複雜的內部細節全部封裝起來,只給我們暴露簡單的介面,比如:電源開關。具體內部是怎麼實現的,我們不需要操心。 需要讓用戶知道的才暴露出來,不需要讓用戶知道的全部隱藏起來,這就是 ...
  • 一步一步,從零搭建Go語言開發環境。 安裝Go語言及搭建Go語言開發環境 下載 Go官網下載地址:https://golang.org/dl/ Go官方鏡像站(推薦):https://golang.google.cn/dl/ 版本的選擇 Windows平臺和Mac平臺推薦下載可執行文件版,Linux ...
  • VS Code是微軟開源的一款編輯器,插件系統十分的豐富。本文就介紹瞭如何使用VS Code搭建Go語言開發環境。 VS Code配置Go語言開發環境 說在前面的話,Go語言是採用UTF8編碼的,理論上使用任何文本編輯器都能做Go語言開發。大家可以根據自己的喜好自行選擇。編輯器/IDE沒有最好只有最 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...