欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語(yǔ)言變量與類型使用簡(jiǎn)明指南

 更新時(shí)間:2025年09月23日 08:51:59   作者:Two_brushes.  
Go語(yǔ)言是靜態(tài)編程語(yǔ)言,在Go語(yǔ)言中數(shù)據(jù)類型用于聲明函數(shù)和變量,這篇文章主要介紹了Go語(yǔ)言變量與類型使用的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

變量

var 關(guān)鍵字進(jìn)行聲明變量

一個(gè)變量的聲明

聲明一個(gè)變量,并指定類型,不立即賦值。

變量會(huì)被自動(dòng)初始化為其類型的 “零值” (例如,數(shù)值為 0,字符串為 "",布爾值為 false,指針為 nil)。

這個(gè)go語(yǔ)言進(jìn)行聲明后直接回進(jìn)行轉(zhuǎn)化成“零值”還是非常靈性的,避免的C/C++ 基本數(shù)據(jù)類型定義出來不進(jìn)行賦值時(shí)隨機(jī)值的情況。

package main
import "fmt"

//一個(gè)變量的聲明定義
func test1(){
	fmt.Println("聲明賦值分開進(jìn)行")
	//var 進(jìn)行聲明變量 
	var count int
	//變量的賦值
	count=18
	//變量的數(shù)用
	fmt.Println("count=",count)
	fmt.Println("-----------------------------")

	fmt.Println("聲明賦值放到一起")
	//聲明+賦值
	var num int = 19
	//變量的數(shù)用
	fmt.Println("num=",num)
	fmt.Println("-----------------------------")
}

func main(){
	test1()
}

多個(gè)變量的聲明

package main
import "fmt"

//一個(gè)變量的聲明定義
func test1(){
	fmt.Println("聲明賦值分開進(jìn)行")
	//var 進(jìn)行聲明變量 
	var count int
	//變量的賦值
	count=18
	//變量的數(shù)用
	fmt.Println("count=",count)
	fmt.Println("-----------------------------")

	fmt.Println("聲明賦值放到一起")
	//聲明+賦值
	var num int = 19
	//變量的數(shù)用
	fmt.Println("num=",num)
	fmt.Println("-----------------------------")
}

//多個(gè)變量的聲明定義
func test2(){
	var (
		count int = 30
		num int = 31
	)
	fmt.Println("count=",count)
	fmt.Println("num=",num)
	fmt.Println("-----------------------------")
}
func main(){
	test1()
	test2()
}

var支持的類型推斷

var是可以進(jìn)行類型推斷的,也就是說在定義變量的時(shí)候如果使用的是var關(guān)鍵字,是不用進(jìn)行聲明類型的,var是很聰明的,即使我們不寫他也能根據(jù)后面的賦值來進(jìn)行推斷。

這就很像C++中的auto ,但是auto還是沒有var智能,因?yàn)閍uto只能一次聲明定義推斷一種變量類型。

//var支持的類型判斷
func test3(){
	var (
		count = 30
		num  = 31
		name = "xiao ying"
	)
	fmt.Println("count=",count)
	fmt.Println("num=",num)
	fmt.Println("name=",name)
	fmt.Println("-----------------------------")
}

使用:=短變量聲明操作符

這是 Go 語(yǔ)言中非常常用且 idiomatic (符合語(yǔ)言習(xí)慣) 的一種方式。它只能在函數(shù)內(nèi)部使用

:= 操作符會(huì)做兩件事:

  1. 聲明一個(gè)新的變量。
  2. 初始化這個(gè)變量。

它會(huì)自動(dòng)進(jìn)行類型推斷,所以你不需要寫類型。

還有一個(gè)非常重要的點(diǎn)

:= 的一個(gè)重要特點(diǎn):

在一個(gè) := 聲明中,左側(cè)至少要有一個(gè)是新聲明的變量,才可以使用 :=。

package main

import "fmt"

// 注意::= 不能用在函數(shù)外部
// a := 10 // 這行會(huì)編譯錯(cuò)誤

func main() {
    // 等同于 var name string = "ys"
    name := "ys"

    // 等同于 var age int = 30
    age := 30

    // 等同于 var isStudent bool = true
    isStudent := true

    fmt.Printf("Name: %s, Age: %d, IsStudent: %v\n", name, age, isStudent)
    // 輸出: Name: ys, Age: 30, IsStudent: true

    // 也可以同時(shí)聲明和初始化多個(gè)變量
    // err 是一個(gè)新變量,conn 不是(假設(shè)之前已聲明),這時(shí)可以用 :=
    conn, err := connectToDB() // 這是一個(gè)非常常見的用法
}

數(shù)據(jù)類型

基本數(shù)據(jù)類

整數(shù)類型

整數(shù)類型故名思意就是用于存放整數(shù)值的,整數(shù)類型又分為 有符號(hào)整數(shù)、無符號(hào)整數(shù)以及其他整數(shù)類型

有符號(hào)整數(shù)類型

類型

有無符號(hào)

占用存儲(chǔ)空間

表數(shù)范圍

int8

1字節(jié)

-2? ~ 2?-1 (-128 ~ 127)

int16

2字節(jié)

-2¹? ~ 2¹?-1 (-32768 ~ 32767)

int32

4字節(jié)

-2³¹ ~ 2³¹-1 (-2147483648 ~ 2147483647)

int64

8字節(jié)

-2?³ ~ 2?³-1

無符號(hào)整數(shù)類型

類型

有無符號(hào)

占用存儲(chǔ)空間

表數(shù)范圍

uint8

1字節(jié)

0 ~ 255

uint16

2字節(jié)

0 ~ 2¹?-1

uint32

4字節(jié)

0 ~ 2³¹-1*

uint64

8字節(jié)

0 ~ 2?³-1*

其他整數(shù)類型

類型

有無符號(hào)

占用存儲(chǔ)空間

表數(shù)范圍

int

32位系統(tǒng)-4字節(jié)
64位系統(tǒng)-8字節(jié)

-2³¹ ~ 2³¹-1
-2?³ ~ 2?³-1

uint

32位系統(tǒng)-4字節(jié)
64位系統(tǒng)-8字節(jié)

0 ~ 2³²-1
0 ~ 2??-1

rune

等價(jià)int32

-2³¹ ~ 2³¹-1

byte

等價(jià)uint8

0 ~ 255

上面這么多整型,在實(shí)際的開發(fā)中我們應(yīng)該如何進(jìn)行選擇呢?

golang中的思想是保小不保大,在程序運(yùn)行的過程中盡量使用小的數(shù)據(jù)類型。

浮點(diǎn)類型

浮點(diǎn)數(shù)的組成是 符號(hào)位+指數(shù)位+尾數(shù)位

類型

存儲(chǔ)空間

總位數(shù)

指數(shù)位數(shù)

尾數(shù)位數(shù)

最大指數(shù)(約)

float32

4字節(jié)

32

8

23

2¹²?

float64

8字節(jié)

64

11

52

2¹?²³

注意:

①存儲(chǔ)空間是由底層內(nèi)存決定的不是由操作系統(tǒng)決定的

②尾數(shù)只是一個(gè)大概,容易出現(xiàn)精度損失

字符類型

特別說明:

  1. golang 中是不存在專門的字符類型的,而是通過ASCII值來進(jìn)行代表對(duì)應(yīng)的字符的,golang中是使用UTF8編碼。
  2. 但是通常使用 byte 來進(jìn)行存儲(chǔ)字符,因?yàn)閎yte類型代表的范圍是0~255,實(shí)際ASCII表中的字符只有0~127 完全可以進(jìn)行覆蓋。
package main
import "fmt"

func main(){
	var c1 byte = 'a'
	fmt.Println(c1)

	var c2 byte = '}'
	fmt.Println(c2)

	fmt.Println(c1+20)

	var c3 byte = 'a'
	fmt.Printf("c4對(duì)應(yīng)的字符為:%c",c3)

	//var c4 byte = '中'
	//fmt.Println(c4)

}

通過上面的現(xiàn)象我們可以驗(yàn)證我們的結(jié)論,字符的本質(zhì)就是ASCII值

如果將注釋掉的代碼進(jìn)行放開,則會(huì)出現(xiàn)報(bào)錯(cuò)

漢字字符,底層對(duì)應(yīng)的是Unicode碼值

對(duì)應(yīng)的碼值為20013,byte類型溢出,能存儲(chǔ)的范圍:可以用int

總結(jié):Golang的字符對(duì)應(yīng)的使用的是UTF-8編碼(Unicode是對(duì)應(yīng)的字符集,UTF-8是Unicode的其中的一種編碼方案)

轉(zhuǎn)義字符

轉(zhuǎn)義符

含義

Unicode值

\b

退格 (backspace)

\u0008

\n

換行

\u000a

\r

回車

\u000d

\t

制表符 (tab)

\u0009

\"

雙引號(hào)

\u0022

\'

單引號(hào)

\u0027

\\

反斜杠

\u005c

布爾類型

布爾類型也叫bool類型,bool類型數(shù)據(jù)只允許取值true和false

布爾類型占1個(gè)字節(jié)。

字符串類型

package main
import "fmt"
func main(){
        //1.定義一個(gè)字符串:
        var s1 string = "你好全面擁抱Golang"
        fmt.Println(s1)
        //2.字符串是不可變的:指的是字符串一旦定義好,其中的字符的值不能改變
        var s2 string = "abc"
        //s2 = "def"
        //s2[0] = 't'
        fmt.Println(s2)
        //3.字符串的表示形式:
        //(1)如果字符串中沒有特殊字符,字符串的表示形式用雙引號(hào)
        //var s3 string = "asdfasdfasdf"
        //(2)如果字符串中有特殊字符,字符串的表示形式用反引號(hào) ``
        var s4 string = `
        package main
        import "fmt"
        
        func main(){
                //測(cè)試布爾類型的數(shù)值:
                var flag01 bool = true
                fmt.Println(flag01)
        
                var flag02 bool = false
                fmt.Println(flag02)
        
                var flag03 bool = 5 < 9
                fmt.Println(flag03)
        }
        `
        fmt.Println(s4)
        //4.字符串的拼接效果:
        var s5 string = "abc" + "def"
        s5 += "hijk"
        fmt.Println(s5)
        //當(dāng)一個(gè)字符串過長(zhǎng)的時(shí)候:注意:+保留在上一行的最后
        var s6 string = "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" +
         "def"+ "abc" + "def" + "abc" + "def"+ "abc" + "def" + "abc" + "def"+
          "abc" + "def" + "abc" + "def"+ "abc" + "def" + "abc" + "def"+ "abc" +
           "def" + "abc" + "def"+ "abc" + "def" + "abc" + "def"+ "abc" + "def" + 
           "abc" + "def"+ "abc" + "def"
        fmt.Println(s6)
}

復(fù)雜數(shù)據(jù)類型

指針

學(xué)習(xí)指針必須首先進(jìn)行了解一下內(nèi)存

指針中存放的就是變量的地址,指向?qū)?yīng)的變量

package main
import(
        "fmt"
)
func main(){
        var age int = 18
        //&符號(hào)+變量 就可以獲取這個(gè)變量?jī)?nèi)存的地址
        fmt.Println(&age) //0xc0000a2058
        //定義一個(gè)指針變量:
        //var代表要聲明一個(gè)變量
        //ptr 指針變量的名字
        //ptr對(duì)應(yīng)的類型是:*int 是一個(gè)指針類型 (可以理解為 指向int類型的指針)
        //&age就是一個(gè)地址,是ptr變量的具體的值
        var ptr *int = &age
        fmt.Println(ptr)
        fmt.Println("ptr本身這個(gè)存儲(chǔ)空間的地址為:",&ptr)
        //想獲取ptr這個(gè)指針或者這個(gè)地址指向的那個(gè)數(shù)據(jù):
        fmt.Printf("ptr指向的數(shù)值為:%v",*ptr) //ptr指向的數(shù)值為:18
}

對(duì)應(yīng)的內(nèi)存

總結(jié) 

到此這篇關(guān)于Go語(yǔ)言變量與類型使用的文章就介紹到這了,更多相關(guān)Go變量與類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論