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

Go基本數(shù)據(jù)類型的具體使用

 更新時(shí)間:2023年11月20日 11:42:11   作者:hope_wisdom  
本文主要介紹了Go的基本數(shù)據(jù)類型,包括布爾類型、整數(shù)類型、浮點(diǎn)數(shù)類型、復(fù)數(shù)類型、字符串類型,具有一定的參考價(jià)值,感興趣的可以了解一下

概述

上一節(jié)的內(nèi)容中,我們介紹了Go的基礎(chǔ)語法,包括:標(biāo)識(shí)符、關(guān)鍵字、行分隔符、var關(guān)鍵字、:=運(yùn)算符、空格、注釋、package、import、輸入輸出、運(yùn)算符、條件控制、循環(huán)等。在本節(jié)中,我們將介紹Go的基本數(shù)據(jù)類型。Go語言是一種靜態(tài)類型的編程語言,這也就意味著,聲明變量需要指定其具體類型,或者交由編譯器進(jìn)行自動(dòng)推導(dǎo)。在Go語言中,數(shù)據(jù)類型是編程的基礎(chǔ),它定義了變量或表達(dá)式的存儲(chǔ)方式和行為。

布爾類型

布爾類型(Boolean)用于表示真或假的值,可以為true或false。布爾類型被聲明為bool,可以使用條件語句或邏輯運(yùn)算符進(jìn)行比較和操作。

package main

import "fmt"

func main() {
    var success bool = true
    if success {
        fmt.Println("Success")
    } else {
        fmt.Println("Failed")
    }
}

與C/C++語言不同,Go語言中的布爾值并不會(huì)隱式轉(zhuǎn)換為數(shù)字值0或1,反之亦然。另外,Go語言也不允許將整型強(qiáng)制轉(zhuǎn)換為布爾型。

package main

import "fmt"

func main() {
    var age int = 18
    // 不允許將整型強(qiáng)制轉(zhuǎn)換為布爾型,會(huì)發(fā)生編譯錯(cuò)誤
    var larger bool = bool(age)
    // 布爾值不會(huì)隱式轉(zhuǎn)換為數(shù)字值,會(huì)發(fā)生編譯錯(cuò)誤
    age = larger

    if larger {
        fmt.Println("Success")
    } else {
        fmt.Println("Failed")
    }
}

整數(shù)類型

整數(shù)類型(Integer)用于表示整數(shù)值,包括正數(shù)、負(fù)數(shù)和零。Go語言同時(shí)提供了有符號(hào)和無符號(hào)的整數(shù)類型,其中有符號(hào)整數(shù)包括:int8、int16、int32、int64,分別對(duì)應(yīng) 8、16、32、64位大小的有符號(hào)整數(shù),無符號(hào)整數(shù)包括:uint8、uint16、uint32、uint64,分別對(duì)應(yīng) 8、16、32、64位大小的無符號(hào)整數(shù)。

另外,還有兩種整數(shù)類型int和uint,分別對(duì)應(yīng)特定CPU平臺(tái)的字長(zhǎng)。其中int表示有符號(hào)整數(shù),應(yīng)用最為廣泛,uint表示無符號(hào)整數(shù)。由于編譯器和計(jì)算機(jī)硬件的不同,int和uint所能表示的整數(shù)大小會(huì)在32位和64位之間變化。

注意:盡管在某些特定的運(yùn)行環(huán)境下,int、uint、int32、uint32的大小可能相等,但它們?nèi)匀粚儆诓煌臄?shù)據(jù)類型。比如:int類型的大小可能是32位,但需要把int類型當(dāng)做int32類型使用時(shí),必須顯式對(duì)類型進(jìn)行轉(zhuǎn)換,反之亦然。

除了上述的基本整數(shù)類型,Go語言還提供了其他幾種整數(shù)類型,包括:

  • rune:該類型表示Unicode碼點(diǎn),通常用來表示一個(gè)Unicode字符。
  • byte:與uint8是同義詞,表示一個(gè)字節(jié)。
  • uintptr:該類型的大小不確定,與平臺(tái)和編譯器有關(guān),但足以存放指針。uintptr通常用于底層編程,特別是與C程序庫交互的地方。
package main

import "fmt"

func main() {
    var num1 int8 = 66
    var num2 uint16 = 3666
    var num3 int = 99
    fmt.Println(num1, num2, num3)

    // int不能直接轉(zhuǎn)換為int32,輸出:cannot use num3 
    // (variable of type int) as int32 value in variable declaration
    // var num4 int32 = num3
    // 使用類型轉(zhuǎn)換,可以將int轉(zhuǎn)換為int32
    var num4 int32 = int32(num3)
    fmt.Println(num4)

    var num5 byte = 100
    fmt.Println(num5)
}

浮點(diǎn)數(shù)類型

浮點(diǎn)數(shù)類型(Float)用于表示帶有小數(shù)點(diǎn)的數(shù)值,Go語言提供了float32(32位單精度浮點(diǎn)數(shù))和float64(64位雙精度浮點(diǎn)數(shù))兩種浮點(diǎn)數(shù)類型。單精度浮點(diǎn)數(shù)在內(nèi)存中占用32位(4字節(jié)),可以表示的范圍大約是±1.18E-38到±3.4E+38。雙精度浮點(diǎn)數(shù)在內(nèi)存中占用64位(8字節(jié)),可以表示的范圍更大,大約是±2.23E-308到±1.80E+308。在Go語言中,可以使用關(guān)鍵字float32、float64來分別聲明和初始化單精度浮點(diǎn)數(shù)、雙精度浮點(diǎn)數(shù)。

package main

import "fmt"
import "math"

func main() {
    var num1 float32 = 3.1415926535
    // 輸出: 3.1415927
    fmt.Println(num1)

    var num2 float64 = 3.1415926535
    // 輸出: 3.1415926535
    fmt.Println(num2)

    epsilon := 0.00001
    num3 := 3.1415926
    // 浮點(diǎn)數(shù)比較,輸出:equal
    if math.Abs(num2 - num3) < epsilon {
        fmt.Println("equal")
    } else {
        fmt.Println("not equal")
    }
}

注意:由于浮點(diǎn)數(shù)的精度問題,在進(jìn)行浮點(diǎn)數(shù)計(jì)算時(shí)可能會(huì)產(chǎn)生誤差。為了避免誤差問題,盡量避免進(jìn)行浮點(diǎn)數(shù)比較或直接比較浮點(diǎn)數(shù)的相等性,而應(yīng)使用一個(gè)小的容忍度值進(jìn)行比較。

復(fù)數(shù)類型

復(fù)數(shù)類型(Complex)用于表示復(fù)數(shù)值,由實(shí)部和虛部組成。Go語言提供了complex64(64位實(shí)數(shù)和虛數(shù)的復(fù)數(shù))和complex128(128位實(shí)數(shù)和虛數(shù)的復(fù)數(shù))兩種復(fù)數(shù)類型。

package main

import "fmt"

func main() {
    var num1 complex64 = 3.14 + 66i
    // 輸出復(fù)數(shù)的實(shí)部和虛部,輸出:3.140000 + 66.000000i
    fmt.Printf("%f + %fi\n", real(num1), imag(num1))

    var num2 complex64 = 10 + 10i
    var num = num1 + num2
    // 復(fù)數(shù)相加,輸出:13.140000 + 76.000000i
    fmt.Printf("%f + %fi\n", real(num), imag(num))
}

注意:Go語言的復(fù)數(shù)類型是支持加、減、乘、除等基本運(yùn)算的,可以使用相應(yīng)的運(yùn)算符進(jìn)行復(fù)數(shù)運(yùn)算。

字符串類型

字符串類型(String)用于表示文本數(shù)據(jù),字符串是由零個(gè)或多個(gè)字符組成的不可變序列。Go語言中的字符串是不可變的字節(jié)序列,每個(gè)字符串都由一個(gè)指向字節(jié)數(shù)組的指針和長(zhǎng)度組成。字符串的長(zhǎng)度可以通過len()函數(shù)獲取,而字符串的內(nèi)容可以通過索引訪問。

package main

import "fmt"

func main() {
    var str string = "Hello"
    length := len(str)
    // 輸出字符串長(zhǎng)度:5
    fmt.Println(length)

    // 取第一個(gè)字符
    firstChar := str[0]
    // 取最后一個(gè)字符
    lastChar := str[len(str) - 1]
    // 輸出:H, o
    fmt.Printf("%c, %c\n", firstChar, lastChar)
}

字符串還可進(jìn)行連接、切片、比較、替換、分割等操作,可參考下面的示例代碼。

package main

import "fmt"
import "strings"

func main() {
    var str1 string = "Hello"
    str2 := "CSDN"

    // 字符串連接,輸出:Hello CSDN
    str := str1 + " " + str2
    fmt.Println(str)

    // 字符串切片,從索引0開始,到索引5結(jié)束(不包括5),輸出:Hello
    slice := str[0:5]
    fmt.Println(slice)

    // 字符串比較,輸出:larger
    if str1 > str2 {
        fmt.Println("larger")
    } else {
        fmt.Println("equal or smaller")
    }

    // 字符串替換,將"CSDN"替換為"Go",第四個(gè)參數(shù)為替換的次數(shù),-1表示替換所有匹配的子字符串
    newStr := strings.Replace(str, "CSDN", "Go", -1)
    // 輸出:Hello Go
    fmt.Println(newStr)

    // 字符串分割,以空格為分隔符,輸出:[Hello CSDN]
    subStrs := strings.Split(str, " ")
    fmt.Println(subStrs)
}

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

相關(guān)文章

  • GOPROXY:解決go get golang.org/x包失敗問題

    GOPROXY:解決go get golang.org/x包失敗問題

    這篇文章主要介紹了GOPROXY:解決go get golang.org/x包失敗問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • golang 后臺(tái)進(jìn)程的啟動(dòng)和停止操作

    golang 后臺(tái)進(jìn)程的啟動(dòng)和停止操作

    這篇文章主要介紹了golang 后臺(tái)進(jìn)程的啟動(dòng)和停止操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • docker如何安裝部署golang應(yīng)用程序

    docker如何安裝部署golang應(yīng)用程序

    這篇文章主要為大家介紹了docker如何安裝部署golang應(yīng)用程序詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • golang關(guān)閉chan通道的方法示例

    golang關(guān)閉chan通道的方法示例

    在go語言中,通道(channel)是一個(gè)非常重要的概念,通道提供了一種在不同 goroutine 之間安全地傳遞數(shù)據(jù)的方式,在本文中,我們將討論如何關(guān)閉通道以及在關(guān)閉通道時(shí)需要考慮的事項(xiàng),需要的朋友可以參考下
    2024-02-02
  • 深入分析golang多值返回以及閉包的實(shí)現(xiàn)

    深入分析golang多值返回以及閉包的實(shí)現(xiàn)

    相對(duì)于C/C++,golang有很多新穎的特性,例如goroutine,channel等等,這些特性其實(shí)從golang源碼是可以理解其實(shí)現(xiàn)的原理。今天這篇文章主要來分析下golang多值返回以及閉包的實(shí)現(xiàn),因?yàn)檫@兩個(gè)實(shí)現(xiàn)golang源碼中并不存在,我們必須從匯編的角度來窺探二者的實(shí)現(xiàn)。
    2016-09-09
  • Golang使用channel實(shí)現(xiàn)一個(gè)優(yōu)雅退出功能

    Golang使用channel實(shí)現(xiàn)一個(gè)優(yōu)雅退出功能

    最近補(bǔ)?Golang?channel?方面八股的時(shí)候發(fā)現(xiàn)用?channel?實(shí)現(xiàn)一個(gè)優(yōu)雅退出功能好像不是很難,之前寫的?HTTP?框架剛好也不支持優(yōu)雅退出功能,于是就參考了?Hertz?優(yōu)雅退出方面的代碼,為我的?PIANO?補(bǔ)足了這個(gè)?feature
    2023-03-03
  • Go語言Time包的具體使用

    Go語言Time包的具體使用

    Go語言中有關(guān)于時(shí)間和日期的方法都在time包里面,本文主要介紹了Go語言Time包,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Go語言與gRPC的完美結(jié)合實(shí)戰(zhàn)演練

    Go語言與gRPC的完美結(jié)合實(shí)戰(zhàn)演練

    這篇文章主要介紹了Go語言與gRPC的完美結(jié)合實(shí)戰(zhàn)演練,gRPC(Remote?Procedure?Call)是一種遠(yuǎn)程過程調(diào)用技術(shù),通過壓縮和序列化數(shù)據(jù)來優(yōu)化網(wǎng)絡(luò)通信,可以顯著提高服務(wù)調(diào)用的性能和效率
    2024-01-01
  • golang coroutine 的等待與死鎖用法

    golang coroutine 的等待與死鎖用法

    這篇文章主要介紹了golang coroutine 的等待與死鎖用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • golang獲取prometheus數(shù)據(jù)(prometheus/client_golang包)

    golang獲取prometheus數(shù)據(jù)(prometheus/client_golang包)

    本文主要介紹了使用Go語言的prometheus/client_golang包來獲取Prometheus監(jiān)控?cái)?shù)據(jù),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03

最新評(píng)論