最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言變量與類型使用簡明指南

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

變量

var 關鍵字進行聲明變量

一個變量的聲明

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

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

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

package main
import "fmt"

//一個變量的聲明定義
func test1(){
	fmt.Println("聲明賦值分開進行")
	//var 進行聲明變量 
	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()
}

多個變量的聲明

package main
import "fmt"

//一個變量的聲明定義
func test1(){
	fmt.Println("聲明賦值分開進行")
	//var 進行聲明變量 
	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 test2(){
	var (
		count int = 30
		num int = 31
	)
	fmt.Println("count=",count)
	fmt.Println("num=",num)
	fmt.Println("-----------------------------")
}
func main(){
	test1()
	test2()
}

var支持的類型推斷

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

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

//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 語言中非常常用且 idiomatic (符合語言習慣) 的一種方式。它只能在函數(shù)內(nèi)部使用。

:= 操作符會做兩件事:

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

它會自動進行類型推斷,所以你不需要寫類型。

還有一個非常重要的點

:= 的一個重要特點:

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

package main

import "fmt"

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

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

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

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

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

整數(shù)類型

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

有符號整數(shù)類型

類型

有無符號

占用存儲空間

表數(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

無符號整數(shù)類型

類型

有無符號

占用存儲空間

表數(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ù)類型

類型

有無符號

占用存儲空間

表數(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

等價int32

-2³¹ ~ 2³¹-1

byte

等價uint8

0 ~ 255

上面這么多整型,在實際的開發(fā)中我們應該如何進行選擇呢?

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

浮點類型

浮點數(shù)的組成是 符號位+指數(shù)位+尾數(shù)位

類型

存儲空間

總位數(shù)

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

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

最大指數(shù)(約)

float32

4字節(jié)

32

8

23

2¹²?

float64

8字節(jié)

64

11

52

2¹?²³

注意:

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

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

字符類型

特別說明:

  1. golang 中是不存在專門的字符類型的,而是通過ASCII值來進行代表對應的字符的,golang中是使用UTF8編碼。
  2. 但是通常使用 byte 來進行存儲字符,因為byte類型代表的范圍是0~255,實際ASCII表中的字符只有0~127 完全可以進行覆蓋。
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對應的字符為:%c",c3)

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

}

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

如果將注釋掉的代碼進行放開,則會出現(xiàn)報錯

漢字字符,底層對應的是Unicode碼值

對應的碼值為20013,byte類型溢出,能存儲的范圍:可以用int

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

轉(zhuǎn)義字符

轉(zhuǎn)義符

含義

Unicode值

\b

退格 (backspace)

\u0008

\n

換行

\u000a

\r

回車

\u000d

\t

制表符 (tab)

\u0009

\"

雙引號

\u0022

\'

單引號

\u0027

\\

反斜杠

\u005c

布爾類型

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

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

字符串類型

package main
import "fmt"
func main(){
        //1.定義一個字符串:
        var s1 string = "你好全面擁抱Golang"
        fmt.Println(s1)
        //2.字符串是不可變的:指的是字符串一旦定義好,其中的字符的值不能改變
        var s2 string = "abc"
        //s2 = "def"
        //s2[0] = 't'
        fmt.Println(s2)
        //3.字符串的表示形式:
        //(1)如果字符串中沒有特殊字符,字符串的表示形式用雙引號
        //var s3 string = "asdfasdfasdf"
        //(2)如果字符串中有特殊字符,字符串的表示形式用反引號 ``
        var s4 string = `
        package main
        import "fmt"
        
        func main(){
                //測試布爾類型的數(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)
        //當一個字符串過長的時候:注意:+保留在上一行的最后
        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)
}

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

指針

學習指針必須首先進行了解一下內(nèi)存

指針中存放的就是變量的地址,指向?qū)淖兞?/p>

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

對應的內(nèi)存

總結(jié) 

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

相關文章

  • Go語言使用context控制協(xié)程取消的方法步驟

    Go語言使用context控制協(xié)程取消的方法步驟

    本文將通過一個實際案例,使用?context?控制協(xié)程的取消,避免資源泄露,實現(xiàn)優(yōu)雅退出,具有一定的參考價值,感興趣的可以了解一下
    2025-08-08
  • Golang使用Gin實現(xiàn)文件上傳的示例代碼

    Golang使用Gin實現(xiàn)文件上傳的示例代碼

    本文我們主要介紹了Golang如何使用Gin實現(xiàn)文件上傳,Go標準庫net/http對文件上傳已經(jīng)提供了非常完善的支持,而Gin框架在其基礎上進一步封裝,因此使用Gin開發(fā)文件上傳功能時,只需要簡單幾行代碼便可以實現(xiàn),需要的朋友可以參考下
    2024-02-02
  • golang協(xié)程與線程區(qū)別簡要介紹

    golang協(xié)程與線程區(qū)別簡要介紹

    這篇文章主要介紹了golang協(xié)程與線程區(qū)別簡要介紹,進程是操作系統(tǒng)資源分配的基本單位,是程序運行的實例,線程是操作系統(tǒng)調(diào)度到CPU中執(zhí)行的基本單位
    2022-06-06
  • golang如何優(yōu)雅的編寫事務代碼示例

    golang如何優(yōu)雅的編寫事務代碼示例

    這篇文章主要介紹了golang如何優(yōu)雅的編寫事務代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • 一文帶你使用golang手擼一個websocket中間件

    一文帶你使用golang手擼一個websocket中間件

    這篇文章主要為大家詳細介紹了如何使用golang手擼一個websocket中間件,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以參考一下
    2023-12-12
  • golang項目如何上線部署到Linu服務器(方法詳解)

    golang項目如何上線部署到Linu服務器(方法詳解)

    這篇文章主要介紹了golang項目如何上線部署到Linu服務器,本文通過兩種方法給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Golang中panic與recover的區(qū)別

    Golang中panic與recover的區(qū)別

    這篇文章主要介紹了Golang中panic與recover的區(qū)別,文章基于Golang的基礎內(nèi)容展開panic與recover的區(qū)別介紹,需要的小伙伴可以參考一下
    2022-06-06
  • Go語言入門教程之Arrays、Slices、Maps、Range操作簡明總結(jié)

    Go語言入門教程之Arrays、Slices、Maps、Range操作簡明總結(jié)

    這篇文章主要介紹了Go語言入門教程之Arrays、Slices、Maps、Range操作簡明總結(jié),本文直接給出操作代碼,同時對代碼加上了詳細注釋,需要的朋友可以參考下
    2014-11-11
  • 基于Go語言搭建靜態(tài)文件服務器的詳細教程

    基于Go語言搭建靜態(tài)文件服務器的詳細教程

    Go 是一個開源的編程語言,它能讓構造簡單、可靠且高效的軟件變得容易,本文給大家介紹了基于Go語言搭建靜態(tài)文件服務器的詳細教程,文中通過圖文和代碼講解的非常詳細,需要的朋友可以參考下
    2024-10-10
  • golang 跳出for循環(huán)操作

    golang 跳出for循環(huán)操作

    這篇文章主要介紹了golang 跳出for循環(huán)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論

扶沟县| 炎陵县| 夏津县| 达拉特旗| 垦利县| 临夏县| 壶关县| 鄂托克前旗| 大冶市| 襄垣县| 塔河县| 武功县| 湘阴县| 昌图县| 绿春县| 微山县| 张家港市| 台山市| 岚皋县| 田林县| 仲巴县| 基隆市| 贵德县| 万山特区| 浠水县| 柘荣县| 岐山县| 黄骅市| 十堰市| 武定县| 河北区| 宿州市| 北碚区| 达日县| 霍州市| 潜山县| 定州市| 天台县| 西平县| 浠水县| 永顺县|