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
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...