Go速成無壓力【四】:變量(variables)

(一)變量的定義

變量的定義可以使用關鍵字var進行定義,寫法是var 變量 類型,比如var i int定義i爲int類型的變量

1,定義並輸出變量實例演示

定義爲int類型,並沒有給予具體的數值時,輸出爲 0

package main

import "fmt"

func main() {
	var i int
	fmt.Println(i)
}

在這裏插入圖片描述

2,定義但未指定數值類型時的情況

定義爲bool型,但是在main函數中沒有給予具體的類型定義時就會輸出false

在這裏的 i 在main函數中被給予了數值類型了,但是x,y沒有被給予數值類型,輸出的時候x和y均爲false

package main

import "fmt"

var i, x, y bool

func main() {
	var i int
	fmt.Println(i, x, y)
}

在這裏插入圖片描述

3,定義的變量必須被使用

定義的變量必須被使用,否則會報錯

package main

import "fmt"

func main() {
	var i int
	fmt.Println()
}

在這裏插入圖片描述

4,定義變量不寫類型

如果定義了變量不寫類型,變量被初始化的時候該變量的類型會被進行隱式轉換

這裏的變量被隱式轉換爲了string類型 (使用fmt.Printf()進行打印,%T可以輸出變量類型)

package main

import "fmt"

var a = "今天天氣很好!"

func main() {
	fmt.Printf("該變量的類型爲:%T ;該變量的值爲:%v", a, a)
}

在這裏插入圖片描述


(二)變量的賦值

在Go中變量的賦值有兩種符號可以使用 =:=

= 符號賦值的情況

1,單個變量賦值

package main
import "fmt"
func main(){
	var a int = 1
	fmt.Println("a的值爲:",a)
}

在這裏插入圖片描述

2,多個變量賦值

package main

import "fmt"

func main() {
	var a, b int = 1, 3001
	var x, y, z = "我是X", 30, true
	fmt.Println(a, b, x, y, z)
}

在這裏插入圖片描述

:= 符號賦值的情況

:= 用於在函數中對變量進行賦值,是一種簡短聲明的語法,類型可以不寫,因爲會進行隱式轉換,使用:= 賦值的變量會被自動賦予類型

package main
import main
func main(){
	a := "今天天氣很好!"
	fmt.Println(a)
}

在這裏插入圖片描述

警告!如果這種變量短聲明使用在函數外面會報錯,:= 的寫法必須位於函數內部

在這裏插入圖片描述

相反的,= 定義的變量可以聲明在函數外面且正常輸出
在這裏插入圖片描述
在這裏插入圖片描述


(三)基本類型

Go語言的基本類型有

基本類型
bool
string
int, int8 ,uint16 ,uint32 ,uint64 ,uintptr
byte (uint8的別名)
rune (int32的別名)
float32 , float64
complex64 ,complex128

下面這個程序是Golang官網的一個案例,我們來看下輸出了啥

package main

import (
	"fmt"
	"math/cmplx"
)

var (
	ToBe   bool       = false
	MaxInt uint64     = 1<<64 - 1
	z      complex128 = cmplx.Sqrt(-5 + 12i)
)

func main() {
	fmt.Printf("Type: %T Value: %v\n", ToBe, ToBe)
	fmt.Printf("Type: %T Value: %v\n", MaxInt, MaxInt)
	fmt.Printf("Type: %T Value: %v\n", z, z)
}

在這裏插入圖片描述
注意到上面的變量的定義沒有,可以進行分步定義(因式分解factored),寫到塊裏面,比如這段

var (
	ToBe   bool       = false
	MaxInt uint64     = 1<<64 - 1
	z      complex128 = cmplx.Sqrt(-5 + 12i)
)

傳統定義是

var ToBe   bool   = false
var	MaxInt uint64 = 1<<64 - 1
var	z  complex128 = cmplx.Sqrt(-5 + 12i)

int,uint和uintptr類型在32位系統上通常爲32位寬,在64位系統上爲64位寬。 當你需要整數值時,應該使用int,除非有特殊原因要使用大小或無符號整數類型。


(四)0 值變量 (zero variable)

變量的初始化值如果沒有給予一個值,將會被自動賦予 0 值 , 字符串會變成空字符串 " " , bool型會顯示false

package main

import "fmt"

func main() {
	var x int
	var y float32
	var z string
	var a bool
	fmt.Printf("%v , %v , %q , %v", x, y, z, a)
}

在這裏插入圖片描述


(五)類型轉換

類型轉換的寫法是 T(v) ,T代表類型,v表示遍歷,比如:int(a)將a轉化爲整型

package main

import "fmt"

func main() {
	var a float32 = 12312.89
	fmt.Printf("改變前:a is %v and this type is %T \n", a, a)
	fmt.Printf("改變後:a is %v and this type is %T", int(a), int(a))
}

在這裏插入圖片描述


(六)類型推斷

被定義了類型的變量賦值給另外一個變量的時候,會將類型一併繼承下去

package main
import "fmt"

func main(){
	var b float64 = 78.1200
	a := b
	fmt.Printf("a 的值是%v ,類型是 %T",a,a)
}

在這裏插入圖片描述


(七)常量 (constant)

常量的定義使用關鍵詞 const 定義

package main

import "fmt"

const str1 = "今天天氣同樣的美好!"

func main() {
	const str2 = "today same wonderful like yesterday !"
	fmt.Println("今天天氣如何?//  ", str1, "\nHow about today ? //", str2)
}

在這裏插入圖片描述

無類型數值常量的類型定義取決於該常量的使用

package main
import "fmt"
func main(){
	const(
		a = 1010
		b = 12
	)
	fmt.Printf("a的類型爲:%T",a*10.12)
	fmt.Printf("a的類型爲:%T",a*1000)
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章