ishowcode.eth

ishowcode.eth

区块链小白

Go變量語法基礎

Golang 變數#

1. 變數是程式的基本組成單位#

  • 不論是使用哪種高級程式語言編寫程式,變數都是其程式的基本組成單位。

sum,sub 都是變數
sum,sub 都是變數

2. 變數的介紹#

2.1 變數的概念#

變數相當於記憶體中一個資料儲存空間的表示,你可以把變數看做是一個房間的門牌號,通過門牌號我們可以找到房間,同樣的道理,通過變數名可以訪問到變數 (值)。

2.2 變數的使用步驟#

  • 聲明變數 (也叫:定義變數)
  • 非變數賦值
  • 使用變數

2.3 變數快速入門案例#

在這裡插入圖片描述
輸出:
在這裡插入圖片描述

2.4 變數使用注意事項#

  • 變數表示記憶體中的一個儲存區域
  • 該區域有自己的名稱(變數名)和類型(資料類型)
    示意圖:
    在這裡插入圖片描述
  • Golang 變數使用的三種方式
  1. 第一種:指定變數類型,聲明後若不賦值,使用預設值
    在這裡插入圖片描述

  2. 第二種:根據值自行判定變數類型 (類型推導)
    在這裡插入圖片描述

  3. 第三種:省略 var, 注意 := 左側的變數不應該是已經聲明過的,否則會導致編譯錯誤
    在這裡插入圖片描述

  4. 多變數聲明
    在程式中,有時我們需要一次性聲明多個變數,Golang 也提供這樣的語法舉例說明:
    在這裡插入圖片描述
    如何一次性聲明多個全域變數【在 go 中函數外部定義變數就是全域變數】:
    在這裡插入圖片描述

  5. 該區域的資料值可以在同一類型範圍內不斷變化 (重點)
    在這裡插入圖片描述

  6. 變數在同一個作用域 (在一個函數或者在程式碼區塊) 內不能重名
    在這裡插入圖片描述

  7. 變數 = 變數名 + 值 + 資料類型,這一點請大家注意,變數的三要素

  8. Golang 的變數如果沒有賦初值,編譯器會使用預設值,比如 int 預設值 0 string 預設值為空串,小數默認為 0

2.5 變數的聲明,初始化和賦值#

在這裡插入圖片描述

2.6 程式中 + 號的使用#

  1. 當左右兩邊都是數值型時,則做加法運算
  2. 當左右兩邊都是字串,則做字串拼接
    在這裡插入圖片描述

2.7 資料類型的基本介紹#

在這裡插入圖片描述

2.8 整數類型#

2.8.1 基本介紹#

簡單的說,就是用於存放整數值的,比如 0, -1, 2345 等等。

2.8.2 整數的各個類型#

在這裡插入圖片描述
在這裡插入圖片描述
int 的無符號的類型:
在這裡插入圖片描述
在這裡插入圖片描述
int 的其它類型的說明:
在這裡插入圖片描述
在這裡插入圖片描述

2.8.4 整型的使用細節#

  1. Golang 各整數類型分:有符號和無符號,int uint 的大小和系統有關。
  2. Golang 的整型預設聲明為 int 型
    在這裡插入圖片描述
  3. 如何在程式查看某個變數的位元大小和資料類型 (使用較多)
    在這裡插入圖片描述
  4. Golang 程式中整型變數在使用時,遵守保小不保大的原則,即:在保證程式正確運行下,盡量使用佔用空間小的資料類型。【如:年齡】
    在這裡插入圖片描述
  5. bit: 計算機中的最小儲存單位。byte: 計算機中基本儲存單元。[二進制再詳細說] 1byte = 8 bit

2.9 小數類型 / 浮點型#

2.9.1 基本介紹#

小數類型就是用於存放小數的,比如 1.2 0.23 -1.911

2.9.2 案例演示#

在這裡插入圖片描述

2.9.3 小數類型分類#

在這裡插入圖片描述
對上圖的說明:

  1. 關於浮點數在機器中存放形式的簡單說明,浮點數 = 符號位 + 指數位 + 尾數位說明:浮點數都是有符號的.
    在這裡插入圖片描述

  2. 尾數部分可能丟失,造成精度損失。 -123.0000901
    在這裡插入圖片描述
    說明:float64 的精度比 float32 的要準確.
    說明:如果我們要保存一個精度高的數,則應該選用 float64

  3. 浮點型的儲存分為三部分:符號位 + 指數位 + 尾數位 在儲存過程中,精度會有丟失

2.9.4 浮點型使用細節#

  1. Golang 浮點類型有固定的範圍和欄位長度,不受具體 OS (作業系統) 的影響。
  2. Golang 的浮點型預設聲明為 float64 類型。
    在這裡插入圖片描述
  3. 浮點型常量有兩種表示形式
    十進制數形式:如:5.12 .512 (必須有小數點)
    科學計數法形式:如:5.1234e2 = 5.12 * 10 的 2 次方 5.12E-2 = 5.12/10 的 2 次方
    在這裡插入圖片描述
  4. 通常情況下,應該使用 float64 ,因為它比 float32 更精確。[開發中,推薦使用 float64]

2.10 字元類型#

2.10.1 基本介紹#

Golang 中沒有專門的字元類型,如果要儲存單個字元 (字母),一般使用 byte 來保存。
字串就是一串固定長度的字元連接起來的字元序列。Go 的字串是由單個位元組連接起來的。也就是說對於傳統的字串是由字元組成的,而 Go 的字串不同,它是由位元組組成的。

2.10.2 案例演示#

在這裡插入圖片描述

對上面程式碼說明

  1. 如果我們保存的字元在 ASCII 表的,比如 [0-1, a-z,A-Z..] 直接可以保存到 byte
  2. 如果我們保存的字元對應碼值大於 255, 這時我們可以考慮使用 int 類型保存
  3. 如果我們需要按照字元的方式輸出,這時我們需要格式化輸出,即 fmt.Printf (“% c”, c1)..

2.10.3 字元類型使用細節#

  1. 字元常量是用單引號 ('') 括起來的單個字元。例如:var c1 byte = 'a' var c2 int = ' 中 ' var c3 byte = '9'
  2. Go 中允許使用轉義字元 '\’來將其後的字元轉變為特殊字元型常量。例如:var c3 char = ‘\n’ // '\n' 表示換行符
  3. Go 語言的字元使用 UTF-8 編碼 , 如果想查詢字元對應的 utf8 碼值http://www.mytju.com/classcode/tools/encode_utf8.asp
    英文字母 - 1 個位元組 漢字 - 3 個位元組
  4. 在 Go 中,字元的本質是一個整數,直接輸出時,是該字元對應的 UTF-8 編碼的碼值。
  5. 可以直接給某個變數賦一個數字,然後按格式化輸出時 % c,會輸出該數字對應的 unicode 字元
    在這裡插入圖片描述
  6. 字元類型是可以進行運算的,相當於一個整數,因為它都對應有 Unicode 碼

2.10.4 字元類型本質探討#

  1. 字元型 儲存到 計算機中,需要將字元對應的碼值(整數)找出來
    儲存:字元 ---> 對應碼值 ----> 二進制 --> 儲存
    讀取:二進制 ----> 碼值 ----> 字元 --> 讀取
  2. 字元和碼值的對應關係是通過字元編碼表決定的 (是規定好)
  3. Go 語言的編碼都統一成了 utf-8。非常的方便,很統一,再也沒有編碼亂碼的困擾了

2.11 布林類型#

2.11.1 基本介紹#

  1. 布林類型也叫 bool 類型,bool 類型資料只允許取值 true 和 false
  2. bool 類型佔 1 個位元組。
  3. bool 類型適於邏輯運算,一般用於程式流程控制 [注:這個後面會詳細介紹]:
  • if 條件控制語句;
  • for 循環控制語句

2.11.2 案例演示#

在這裡插入圖片描述

2.12string 類型#

2.12.1 基本介紹#

字串就是一串固定長度的字元連接起來的字元序列。Go 的字串是由單個位元組連接起來的。Go 語言的字串的位元組使用 UTF-8 編碼標識 Unicode 文本

2.12.2 案例演示#

在這裡插入圖片描述

2.12.3string 使用注意事項和細節#

  1. Go 語言的字串的位元組使用 UTF-8 編碼標識 Unicode 文本,這樣 Golang 統一使用 UTF-8 編碼,中文
    亂碼問題不會再困擾程式員。
  2. 字串一旦賦值了,字串就不能修改了:在 Go 中字串是不可變的。
    在這裡插入圖片描述
  3. 字串的兩種表示形式
    (1) 雙引號,會識別轉義字元
    (2) 反引號,以字串的原生形式輸出,包括換行和特殊字元,可以實現防止攻擊、輸出源碼等效果
    【案例演示】
    在這裡插入圖片描述
  4. 字串拼接方式
    在這裡插入圖片描述
  5. 當一行字串太長時,需要使用到多行字串,可以如下處理
    image

2.13 基本資料類型的預設值#

2.13.1 基本介紹#

在 go 中,資料類型都有一個預設值,當程式員沒有賦值時,就會保留預設值,在 go 中,預設值又叫零值。

2.13.2 基本資料類型的預設值如下#

在這裡插入圖片描述
案例:
在這裡插入圖片描述

2.14 基本資料類型的相互轉換#

2.14.1 基本介紹#

Golang 和 java /c 不同,Go 在不同類型的變數之間賦值時需要顯式轉換。也就是說 Golang 中資料類型不能自動轉換。

2.14.2 基本語法#

表達式 T (v) 將值 v 轉換為類型 T

T: 就是資料類型,比如int 32 ,int 64 ,float 32 等等
v:就是需要轉換的變數

2.14.3 案例演示#

在這裡插入圖片描述

3 14 4 基本資料類型相互轉換的注意事項#

1 )Go中,資料類型的轉換可以是從 表示範圍小-->表示範圍大,也可以 范圍大--->範圍小
2 )被轉換的是變數儲存的資料(即值),變數本身的資料類型並沒有變化!
3 )在轉換中,比如將int 64 轉成int 8 【- 128 - -- 127 】,編譯時不會報錯,只是轉換的結果是按溢出處理,和我們希望的結果不一樣。因此在轉換時,需要考慮範圍.

在這裡插入圖片描述

在這裡插入圖片描述

2.15 基本資料類型和 STRING 的轉換#

2.15.1 基本介紹#

在程式開發中,我們經常將基本資料類型轉成 string, 或者將 string 轉成基本資料類型。

2.15.2 基本類型轉 string 類型#

 方式 1 :fmt.Sprintf ("% 參數", 表達式) 【個人習慣這個,靈活】

函數的介紹:
在這裡插入圖片描述

參數需要和表達式的資料類型相匹配
fmt.Sprintf()..會返回轉換後的字串

 案例演示
在這裡插入圖片描述

 方式 2 :使用 strconv 包的函數
在這裡插入圖片描述

 案例說明
在這裡插入圖片描述

2.15.3 string 類型轉基本資料類型#

 使用時 strconv 包的函數
在這裡插入圖片描述

 案例演示
在這裡插入圖片描述

 說明一下

在這裡插入圖片描述

2.15.4 string 轉基本資料類型的注意事項#

在將 String 類型轉成 基本資料類型時,要確保 String 類型能夠轉成有效的資料,比如我們可以把 "123", 轉成一個整數,但是不能把 "hello" 轉成一個整數,如果這樣做,Golang 直接將其轉成 0 ,
其它類型也是一樣的道理.float=> 0 bool=>false
案例說明:
在這裡插入圖片描述

2.16 指標#

2.16.1 基本介紹#

1 )基本資料類型,變數存的就是值,也叫值類型
2 )獲取變數的地址,用&,比如:varnumint,獲取num的地址:&num
分析一下基本資料類型在記憶體的佈局.
3 )指標類型,指標變數存的是一個地址,這個地址指向的空間存的才是值
比如:varptr*int=&num
舉例說明:指標在記憶體的佈局.
4 )獲取指標類型所指向的值,使用:*,比如:varptr*int,使用*ptr獲取ptr指向的值

2.16.2 案例演示#

1 )寫一個程式,獲取一個int變數num的地址,並顯示到終端
2 )將num的地址賦給指標 ptr,並通過ptr去修改num的值.

在這裡插入圖片描述

2.16.3 指標的使用細節#

1 ) 值類型,都有對應的指標類型,形式為 資料類型,比如 int 的對應的指標就是int,float 32

對應的指標類型就是 *float 32 , 依次類推。

2 ) 值類型包括:基本資料類型 int 系列,float 系列,bool,string 、陣列和結構體 struct

2.17 值類型和引用類型#

2.17.1 值類型和引用類型的說明#

1 ) 值類型:基本資料類型 int 系列,float 系列,bool,string 、陣列和結構體 struct
2 ) 引用類型:指標、slice 切片、map、管道 chan、interface 等都是引用類型

2.17.2 值類型和引用類型的使用特點#

1 )值類型:變數直接儲存值,記憶體通常在堆疊中分配
示意圖:

在這裡插入圖片描述

2 )引用類型:變數儲存的是一個地址,這個地址對應的空間才真正儲存資料(值),記憶體通常在堆上分配,當沒有任何變數引用這個地址時,該地址對應的資料空間就成為一個垃圾,由GC來回收

示意圖:
在這裡插入圖片描述

3 )記憶體的堆疊區和堆區示意圖

在這裡插入圖片描述

2.18 標識符的命名規範#

2.18.1 標識符概念#

1 )Golang 對各種變數、方法、函數等命名時使用的字元序列稱為標識符
2 )凡是自己可以起名字的地方都叫標識符

2.18.2 標識符的命名規則#

1 )由 26 個英文字母大小寫, 0 - 9 ,_組成
2 )數字不可以開頭。varnumint//ok var 3 numint//error
3 )Golang中嚴格區分大小寫。
var num int
var Num int
說明:在golang中,num 和Num 是兩個不同的變數
4 )標識符不能包含空格。
5 )下劃線"_"本身在Go中是一個特殊的標識符,稱為空標識符。可以代表任何其它的標識符,但是它對應的值會被忽略(比如:忽略某個返回值)。所以僅能被作為佔位符使用,不能作為標識符使用
6 )不能以系統保留關鍵字作為標識符(一共有 25 個),比如 break,if等等...

2.18.3 標識符的案例#

hello //ok
hello 12 //ok
1 hello//error,不能以數字開頭
h-b //error,不能使用 -
xh //error,不能含有空格h_ 4 //ok
_ab //ok
int //ok,我們要求大家不要這樣使用
float 32 //ok,我們要求大家不要這樣使用
_ //error
Abc //ok

2.18.4 標識符命名注意事項#

1 ) 包名:保持 package 的名字和目錄保持一致,儘量採取有意義的包名,簡短,有意義,不要和標準庫不要衝突 fmt
在這裡插入圖片描述

2 )變數名、函數名、常量名:採用駝峰法
舉例:
varstuNamestring=“tom” 形式:xxxYyyyyZzzz...
vargoodPricefloat 32 = 1234. 5

3 ) 如果變數名、函數名、常量名首字母大寫,則可以被其他的包訪問;如果首字母小寫,則只能在本包中使用 (注:可以簡單的理解成,首字母大寫是公開的,首字母小寫是私有的), 在 golang 沒有 public,private 等關鍵字。
案例演示:
在這裡插入圖片描述
在這裡插入圖片描述

2.19 系統保留關鍵字#

在這裡插入圖片描述

2.20 系統的預定義標識符#

在這裡插入圖片描述

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。