天天看點

3.Go語言中常量,變量, 及其命名規則以及代碼風格1. Go語言中變量的聲明2. Go語言中的常量3. Go語言變量, 常量命名規則4. Go語言代碼風格

1. Go語言中變量的聲明

Go 語言變量名由字母, 數字, 下劃線組成; 其中首個字元不能為數字; Go語言中關鍵字和保留字都不能作變量名;

Go 語言中的變量需要聲明後才能使用, 同一作用域内不支援重複聲明; 并且Go語言的變量聲明後必須使用;

1.1 var聲明變量

var 變量名稱 變量類型

  • 變量聲明後沒有初始化的話, 值為空
func main() {
	// 變量名  :=  表達式
	var name string
	var a1 = "張三"         //可以省略類型
	fmt.Println(name, a1) //變量聲明後沒有初始化的話,  值為空
}
           

1.2 變量的初始化

Go 語言在聲明變量的時候,會自動對變量對應的記憶體區域進行初始化操作。每個變量會被初始化成其類型的預設值;

例如:

  1. 整型和浮點型變量的預設值為 0。
  2. 字元串變量的預設值為空字元串。
    3.  布爾型變量預設為 false。
             4.  切片、函數、指針變量的預設為 nil。
               
  • 初始化第一種方式, 先聲明後指派
    func main() {
    	var name string //變量聲明
    	name = "張三"     //變量初始化指派
    	fmt.Printf(name)
    }
               
  • 第二種方式, 聲明的時候直接指派
    //定義入口檔案
    func main() {
    	var name string = "張三" 
    	fmt.Println(name, age)
    }
               
  • 第三種初始化方式, 類型推導的方式直接指派, 省略 變量類型, 推薦使用
    func main() {
    	var age = 18 //類型可以省略, 可以根據類型推導自動判斷類型
    	fmt.Println(age)
    }
               

1.3 一次聲明多個變量

  • var 變量名稱, 變量名稱 類型

    ; 聲明的變量類型必須一緻
    //定義入口檔案
    func main() {
    	var name, sex string  //聲明的變量類型必須一緻
    	fmt.Printf("name的類型是%T sex的類型是%T", name, sex)
    }
               
  • 聲明的變量類型可以不一緻
    func main() {
    	var (
    		name string
    		age  int
    		sex  = "男" //聲明的時候可以直接指派,可以省略資料類型,自動推導類型
    	)
    	fmt.Printf("name的類型是%T age的類型是%T sex的值是=%v", name, age, sex)
    }
               
    注意:
    • go語言中, 聲明的變量類型和指派的類型必須保持一緻, 比如,聲明為string,就必須指派為string
    • 變量聲明之後, 必須要使用, 不然會報錯

1.4 短變量聲明法(推薦使用)

  • 在函數的内部, 可以使用更簡略的

    :=

    方式聲明并初始化變量
  • 注意: 短變量隻能用于聲明局部變量; 不能用于全局變量的聲明
var a = 10
//定義入口檔案
func main() {
	b := "男"
	fmt.Printf("a=%v b=%v", a, b)
}
           
  • 聲明多個變量
    func main() {
    	a, b, c := 12, 13, "學習" //類型可以不一緻,  var聲明必須保持類型一緻, 不能類型推導
    	fmt.Println(a, b, c)
    }
               

1.5 類型推導

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

1.6 匿名變量(忽略某個值)

  • 在使用多重指派時,如果想要忽略某個值,可以使用匿名變量(anonymous variable)。 匿名變量用一個下劃線_表示
  • 匿名變量不占用命名空間, 不會配置設定記憶體, 是以匿名變量之間不存在重複聲明
//(int, string) 表示要傳回資料的類型
func getInfo() (int, string) {
	return 10, "張三"
}

func main() {
	// 下劃線_ 忽略了10, 張三指派給了username
	_, username := getInfo()
	fmt.Println(username)
}
           

2. Go語言中的常量

2.1 使用const定義常量

相對于變量,常量是恒定不變的值,多用于定義程式運作期間不會改變的那些值。 常量的聲明和變量聲明非常類似,隻是把 var 換成了 const,常量在定義的時候必須指派。
  • 常量在定義的時候必須指派
  • const 同時聲明多個常量時,如果省略了值則表示和上面一行的值相同
func main() {
	const p = 3.1415
	// p = 1.123 不能重新指派, 變量可以
	fmt.Println(p) //在整個程式運作期間它們的值都不能再發生變化了
	const (
		n1 = 100
		n2  //如果省略了值則表示和上面一行的值相同
		n3  //如果省略了值則表示和上面一行的值相同
	)
	fmt.Println(n1, n2, n3) 
}

輸出:
I:\goiteam>go run main.go
3.1415
100 100 100
           

2.2 const常量和iota的使用

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

iota 在 const 關鍵字出現時将被重置為 0(const 内部的第一行之前);

const 中每新增一行常量聲明将使 iota 計數一次(iota 可了解為 const 語句塊中的行索引)。

2.2.1 iota 隻能在常量的表達式中使用;

2.2.2 每次 const 出現時, 都會讓 iota 初始化為0 (自增長)

func main() {
	const p = iota //p=0
	const (
		n1 = iota //0
		n2        //1
		n3        //2
	)
	fmt.Println(p, n1, n2, n3) //0 0 1 2
}
           

2.2.3 const iota 使用_跳過某些值

func main() {
	const (
		n1 = iota //0
		n2        //1
		_
		n3 //3
	)
	fmt.Println(n1, n2, n3) // 0 1 3
}
           

2.2.4 iota 聲明中間插隊

func main() {
	const (
		n1 = iota //0
		n2 = 100  //100
		n3 = iota //2
		n4        //3
	)
	fmt.Println(n1, n2, n3, n4) //0 100 2 3
}
           

2.2.5 多個 iota 定義在一行

func main() {
	const (
		n1     = iota               //0
		n2, n3 = iota + 1, iota + 2 //2,3
		n4, n5                      //3,4
	)
	fmt.Println(n1, n2, n3, n4, n5) //0 2 3 3 4
}
           

3. Go語言變量, 常量命名規則

  • 變量名稱必須由數字、字母、下劃線組成
  • 辨別符開頭不能是數字
  • 辨別符不能是保留字和關鍵字
  • 變量的名字是區分大小寫的如: age 和 Age 是不同的變量。在實際的運用中,也建議,不要用一個單詞大小寫區分兩個變量。
  • 辨別符(變量名稱)一定要見名思意 :變量名稱建議用名詞,方法名稱建議用動詞;
  • 變量命名一般采用駝峰式(大駝峰或小駝峰),當遇到特有名詞(縮寫或簡稱,如 DNS)的時候,特有名詞根據是否私有全部大寫或小寫;

4. Go語言代碼風格

  • 代碼每一行結束後不用寫分号( ;)
  • 運算符左右建議各加一個空格:

    var username string = "itying"

  • Go 語言程式員推薦使用駝峰式命名; 當名字有幾個單詞組成的時優先使用大小寫分隔

    小駝峰表示私有, 大駝峰表示公有

  • 強制的代碼風格
    左括号必須緊接着語句不換行,這個特性剛開始會使開發者不習慣,但随着對 Go 語言的不斷熟悉,就會發現風格統一讓大家在閱讀代碼時把注意力集中到了解決問題上,而不是代碼風格上
  • go fmt 主要用于格式化文檔,讓所有人的代碼風格保持一緻, 現在一般編輯器儲存都自動格式化了
D:\golang\src\demo01>go fmt main.go main.go