搜尋
首頁後端開發Golanggo語言有哪些資料類型

go語言有哪些資料類型

Dec 20, 2022 pm 12:00 PM
golanggo語言資料類型

go語言的資料型別有:1、布林型,值只可以是常數true或false;2、數字類型,支援整數和浮點型數字,並且支援複數;3、字串型,是一串固定長度的字元連接起來的字元序列;4、指標類型;5、陣列類型;6、結構化類型;7、Channel類型;8、函數類型;9、切片類型;10、介面類型; 11、Map類型。

go語言有哪些資料類型

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

Go 語言資料型別

在 Go 程式語言中,資料型別用於宣告函數和變數。

數據類型的出現是為了把數據分成所需內存大小不同的數據,編程的時候需要用大數據的時候才需要申請大內存,就可以充分利用內存。

Go 語言按類別有以下幾種資料類型:

#序號 #類型和描述
#1 布林型
布林型的值只可以是常數true 或false。一個簡單的例子:var b bool = true。
2 數字型別
整數型int 和浮點型float32、float64,Go 語言支援整數和浮點型數字,並且支援複數,其中位元的運算採用補碼。
3 字串型別:
#字串就是一串固定長度的字元連接起來的字元序列。 Go 的字串是由單一位元組連接起來的。 Go 語言的字串的位元組使用 UTF-8 編碼來識別 Unicode 文字。
4 衍生類型:
#包括:
  • (a) 指標類型(Pointer)

  • (b) 陣列型別

  • (c) 結構化型別(struct)

  • (d) Channel 類型

  • (e) 函數型別

  • #(f) 切片型別

  • (g) 介面類型(interface)

  • (h) Map 類型

## Go語言中有豐富的資料類型,除了基本的整數、浮點型、布林型、字串外,還有陣列、切片、結構體、函數、map、通道(channel)等


#1.整形

    整數

#1.1.整數分為兩類

    按佔用的記憶體長度分割
int8、int16、int32、int64
    #依照是否有正負號分割-無符號整數
uint8、uint16、uint32、uint64
    與C語言比較
uint8 对应 byte 型
int16 对应 C 语言中的 short 型
int64 对应 C 语言中的 long 型

1.2.整形描述

類型描述int8有符號8位元整數(-128 到127)int16 #有符號16位元整數(-32768 到32767)int32有符號32位元整數(-2147483648 到2147483647)int64有符號64位元整數(-9223372036854775808 到9223372036854775807)uint8#無符號3型#8 (0 到255)uint16無符號16位元整數(0 到65535)

uint32無符號32位元整數(0 到4294967295)

uint64無符號64位元整數(0 到18446744073709551615)##1.3.特殊整數#類型
##描述
int 32位元作業系統上就是int32,64位元作業系統上就是int64
uint### ###32位元作業系統上就是uint32,64位元作業系統上就是uint64#############uintptr######無符號整數類型,用來存放一個指標### ##########

1.4.注意

1.在使用 int 和 uint 类型时,不能假定它是 32 位或 64 位的整型,而是考虑 int 和 uint 可能在不同平台上的差异
2.获取对象的长度的内建 len() 函数返回的长度可以根据不同平台的字节长度进行变化
3.实际使用中,切片或 map 的元素数量等都可以用 int 来表示
4.在涉及到二进制传输,读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用 int 和 uint

1.5.数字字面量语法

  • Number literals syntax

  • Go1.13 版本之后引入了 数字字面量语法,这样便于开发者以二进制、八进制或十六进制浮点数的格式定义数字

  • 内存地址是以十六进制数进行保存的

v := 0b00101101, 代表二进制的 101101,相当于十进制的 45
v := 0o377,代表八进制的 377,相当于十进制的 255
v := 0x1p-2,代表十六进制的 1 除以 2²,也就是 0.25
  • 允许用下划线 _ 来分隔数字
v := 123_456 表示 v 的值等于 123456。
  • 可以借助 fmt 函数来将一个整数以不同进制形式展示
package main

import "fmt"

func main() {
    // 定义十进制数
    var a int = 10
    fmt.Printf("%d \n", a) // 占位符 %d 表示使用十进制显示为 10
    fmt.Printf("%b \n", a) // 占位符 %b 表示使用二进制显示为 1010

    // 定义八进制数,需要以 0 开头
    var b int = 077
    fmt.Printf("%o \n", b) // 占位符 %o 表示使用八进制显示为 77

    // 定义十六进制数,需要以 0x 开头
    var c int = 0xff
    fmt.Printf("%x \n", c) // 占位符 %x 表示使用十六进制显示为 ff,小写字母显示
    fmt.Printf("%X \n", c) // 占位符 %X 表示使用十六进制显示为 FF,大写字母显示
}

2.浮点型

  • Go 语言支持两种浮点型数:float32 和 float64 ,这两种浮点型数据格式遵循 IEEE 754 标准
float32 的浮点数的最大范围约为 3.4e38,可以使用常量定义:math.MaxFloat32
float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:math.MaxFloat64
打印浮点数时,可以使用 fmt 包配合 %f
  • 实例演示:
package main
import (
    "fmt"
    "math"
)
func main() {
    fmt.Printf("%f\n", math.Pi)
    fmt.Printf("%.2f\n", math.Pi)
}

3.复数

  • complex64 和 complex128
  • 复数有实部和虚部,complex64 的实部和虚部为 32 位,complex128 的实部和虚部为 64 位
var c1 complex64
c1 = 1 + 2i
var c2 complex128
c2 = 2 + 3i
fmt.Println(c1)
fmt.Println(c2)

4.布尔值

  • Go 语言中以 bool 类型进行声明布尔型数据
1.布尔型数据只有 true 和 false 两个值,布尔类型变量的默认值为 false。
2.Go 语言中不允许将整型强制转换为布尔型.
3.布尔型无法参与数值运算,也无法与其他类型进行转换

5.字符串

  • Go 语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样
  • Go 语言字符串使用 UTF-8 编码,可以在 Go 语言的源码中直接添加非 ASCII 码字符

5.1.定义一个字符串类型的变量

  • 使用 双引号 定义 单行字符串 变量

  • 使用 反引号 定义 多行字符串 变量

  • 使用 单引号 定义 单个字符 变量

  • 实例演示

package main

import "fmt"

func main() {
    // 使用 双引号 定义 单行字符串 变量
    s1 := "hello" //定义英文字符串
    s2 := "你好"    // 可以识别非 ASCII 码,默认支持 utf-8 编码

    // 使用 反引号 定义 多行字符串 变量
    s3 := `
11111
22222   // 多行字符串里的双斜杠也表示注释
33333
`

    // 使用 单引号 定义 单个字符 变量
    s4 := 'h'

    fmt.Println("\n单行字符串01", s1)
    fmt.Println("\n单行字符串02", s2)
    fmt.Println("\n多行字符串", s3)
    fmt.Println("\n字符定义", s4)
}

5.2.字符串转义

  • Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等
转义符 含义
\r 回车符 (返回行首)
\n 换行符 (直接跳到下一行的同列位置)
\t 制表符
' 单引号
" 双引号
\ 反斜杠

5.3.字符串转义-实例演示

package main

import (
    "fmt"
)

func main() {
    // 转义符的使用
    fmt.Println("\n# 转义符的使用 str := \"c:\\go\"")
}

5.4.字符串操作

方法 方法说明
len(str) 求长度
+或fmt.Sprintf 拼接字符串
strings.Split 分割
strings.contains 判断是否包含
strings.HasPrefix,strings.HasSuffix 前缀/后缀判断
strings.Index(),strings.LastIndex() 子串出现的位置
strings.Join(a[]string, sep string) join操作

5.5.字符串操作-实例演示

package main

import (
    "fmt"
    "strings"
)

// 字符串操作
func main() {
    // 字符串求长度
    s3 := "zhongguojueqi"
    fmt.Println("\n字符串-求长度: ", len(s3))
    
    // 字符串拼接
    s4 := "nihaoshijie"
    fmt.Println("\n字符串-拼接01: ", s3+s4)
    
    s5 := fmt.Sprintf("%s---%s", s3, s4)
    fmt.Println("\n字符串-拼接02: ", s5)
    
    // 字符串分割
    s6 := strings.Split(s3, "o")
    fmt.Println("\n字符串-分割: ", s6)
    
    // 字符串包含判断
    s7 := strings.Contains(s3, "o")
    fmt.Println("\n字符串-包含判断01: ", s7)
    fmt.Println("\n字符串-包含判断02: ", strings.Contains(s3, "o"))
    
    // 字符串前缀, 后缀判断
    fmt.Println("\n字符串-前缀判断: ", strings.HasPrefix(s3, "zhong"))
    fmt.Println("\n字符串-后缀判断: ", strings.HasSuffix(s3, "qi"))
    
    // 字符串索引查找
    fmt.Println("\n字符串-索引查找-第一个字符 o 的索引: ", strings.Index(s3, "o"))
    fmt.Println("\n字符串-索引查找-最后一个字符 o 的索引: ", strings.LastIndex(s3, "o"))
    
    // 字符串-join操作
    s8 := []string{"aaa", "bbb", "ccc", "ddd"}
    fmt.Println("\n字符串-join 操作: ", strings.Join(s8, " + "))
}

6.字符

6.1.定义一个字符变量

  • 组成字符串的元素叫做 字符,使用单引号进行定义字符类型变量,字符串使用双引号定义
  • 可以通过遍历或者单个获取字符串元素获得字符
func runeDemo01() { // 字符定义
    a := '中'         // 默认识别为 rune 类型的字符变量
    b := "中"         // 定义一个字符串
    var c byte = 'a' // 定义一个byte类型字符
    var d rune = 'a' // 定义一个rune类型字符
    fmt.Println(a, b)
    fmt.Printf("%v,%T\n", c, c)
    fmt.Printf("%v,%T\n", d, d)
}

6.2.字符类型有两种

6.2.1.uint8-类型字符

  • go 语言中一般的英文数字字符使用 ASCII 码的一个字符,占据 8 位 bit 的内存空间,也就是常用的 byte 型

6.2.2.rune-类型字符

  • go 语言中处理中文日文或者其他复合字符时,需要用到 rune 类型,rune 类型实际是一个 int32,代表一个 UTF-8 字符(Unicode编码)

7.字符串拓展

7.1.字符串遍历-方法1-使用循环依次取出字符串中的元素

// 字符串遍历-traversalString
package main

import (
    "fmt"
)

func traversalString01() {
    s := "hello世界"
    for i := 0; i <h3 id="strong-字符串遍历-方法-rune-类型遍历可以使用-for-range-循环-strong"><strong>7.2.字符串遍历-方法2-rune-类型遍历可以使用 for range 循环</strong></h3><pre class="brush:php;toolbar:false">package main

import (
    "fmt"
)

// 遍历字符串 traversalString
func traversalString02() {
    s := "hello世界"
    fmt.Println()
    for _, r := range s { // 按照 rune 类型遍历
        fmt.Printf("%v(%c) ", r, r)
    }
    fmt.Println()
    fmt.Println([]rune(s))

}
-----------------------
104(h) 101(e) 108(l) 108(l) 111(o) 19990(世) 30028(界)
-----------------------
  • 结果分析:
1.因为 UTF8 编码下一个中文汉字由 3~4 个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出中第一行的结果
2.字符串底层是一个 byte 数组,所以可以和 []byte 类型相互转换
3.字符串是不能修改的 字符串是由 byte 字节组成,所以字符串的长度是 byte 字节的长度
4.rune 类型用来表示 utf8 字符,一个 rune 字符由一个或多个 byte 组成。

7.3.字符串修改

  • 字符串是固定值无法修改,如果要修改字符串,需要先将其转换成 []rune 或 []byte,完成后再转换为 string 类型。无论哪种转换,都会重新分配内存,并复制字节数组
func changeString() {
    s1 := "big"
    // 强制类型转换
    byteS1 := []byte(s1)
    byteS1[0] = 'p'
    fmt.Println(string(byteS1))

    s2 := "白萝卜"
    runeS2 := []rune(s2)
    runeS2[0] = '红'
    fmt.Println(string(runeS2))
}

8.类型转换

  • Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用

8.1.类型转换-语法

T(表达式)
  • 其中,T 表示要转换的类型,表达式包括变量、复杂算子和函数返回值等

8.1.类型转换-实例演示

func sqrtDemo() {
  var a, b = 3, 4
  var c int
  // math.Sqrt()接收的参数是float64类型,需要强制转换
  c = int(math.Sqrt(float64(a*a + b*b)))
  fmt.Println(c)
}
  • 说明

计算直角三角形的斜边长时使用 math 包的 Sqrt() 函数,该函数接收的是 float64 类型的参数
而变量 a 和 b 都是 int 类型的,这个时候就需要将 a 和 b 强制类型转换为 float64 类型

【相关推荐:Go视频教程编程教学

以上是go語言有哪些資料類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何使用'字符串”軟件包逐步操縱字符串如何使用'字符串”軟件包逐步操縱字符串May 13, 2025 am 12:12 AM

Go的strings包提供了多種字符串操作功能。 1)使用strings.Contains檢查子字符串。 2)用strings.Split將字符串分割成子字符串切片。 3)通過strings.Join合併字符串。 4)用strings.TrimSpace或strings.Trim去除字符串首尾的空白或指定字符。 5)用strings.ReplaceAll替換所有指定子字符串。 6)使用strings.HasPrefix或strings.HasSuffix檢查字符串的前綴或後綴。

Go Strings軟件包:如何改進我的代碼?Go Strings軟件包:如何改進我的代碼?May 13, 2025 am 12:10 AM

使用Go語言的strings包可以提升代碼質量。 1)使用strings.Join()優雅地連接字符串數組,避免性能開銷。 2)結合strings.Split()和strings.Contains()處理文本,注意大小寫敏感問題。 3)避免濫用strings.Replace(),考慮使用正則表達式進行大量替換。 4)使用strings.Builder提高頻繁拼接字符串的性能。

GO BYTES軟件包中最有用的功能是什麼?GO BYTES軟件包中最有用的功能是什麼?May 13, 2025 am 12:09 AM

Go的bytes包提供了多種實用的函數來處理字節切片。 1.bytes.Contains用於檢查字節切片是否包含特定序列。 2.bytes.Split用於將字節切片分割成smallerpieces。 3.bytes.Join用於將多個字節切片連接成一個。 4.bytes.TrimSpace用於去除字節切片的前後空白。 5.bytes.Equal用於比較兩個字節切片是否相等。 6.bytes.Index用於查找子切片在largerslice中的起始索引。

使用GO的'編碼/二進制”軟件包掌握二進制數據處理:綜合指南使用GO的'編碼/二進制”軟件包掌握二進制數據處理:綜合指南May 13, 2025 am 12:07 AM

theEncoding/binarypackageingoisesenebecapeitProvidesAstandArdArdArdArdArdArdArdArdAndWriteBinaryData,確保Cross-cross-platformCompatibilitiational and handhandlingdifferentendenness.itoffersfunctionslikeread,寫下,寫,dearte,readuvarint,andwriteuvarint,andWriteuvarIntforPreciseControloverBinary

轉到'字節”軟件包快速參考轉到'字節”軟件包快速參考May 13, 2025 am 12:03 AM

回顧bytespackageingoiscialforhandlingbytesliceSandBuffers,offeringToolsforeffitedMemoryManagement和datamanipulation.1)itprovidesfunctionalitiesLikeCreatingBuffers,比較,搜索/更換/reportacingwithinslices.2)forlargedatAsetSets.n

掌握GO弦:深入研究'字符串”包裝掌握GO弦:深入研究'字符串”包裝May 12, 2025 am 12:05 AM

你應該關心Go語言中的"strings"包,因為它提供了處理文本數據的工具,從基本的字符串拼接到高級的正則表達式匹配。 1)"strings"包提供了高效的字符串操作,如Join函數用於拼接字符串,避免性能問題。 2)它包含高級功能,如ContainsAny函數,用於檢查字符串是否包含特定字符集。 3)Replace函數用於替換字符串中的子串,需注意替換順序和大小寫敏感性。 4)Split函數可以根據分隔符拆分字符串,常用於正則表達式處理。 5)使用時需考慮性能,如

GO中的'編碼/二進制”軟件包:您的二進制操作首選GO中的'編碼/二進制”軟件包:您的二進制操作首選May 12, 2025 am 12:03 AM

“編碼/二進制”軟件包interingoisentialForHandlingBinaryData,oferingToolSforreDingingAndWritingBinaryDataEfficely.1)Itsupportsbothlittle-endianandBig-endianBig-endianbyteorders,CompialforOss-System-System-System-compatibility.2)

Go Byte Slice操縱教程:掌握'字節”軟件包Go Byte Slice操縱教程:掌握'字節”軟件包May 12, 2025 am 12:02 AM

掌握Go語言中的bytes包有助於提高代碼的效率和優雅性。 1)bytes包對於解析二進制數據、處理網絡協議和內存管理至關重要。 2)使用bytes.Buffer可以逐步構建字節切片。 3)bytes包提供了搜索、替換和分割字節切片的功能。 4)bytes.Reader類型適用於從字節切片讀取數據,特別是在I/O操作中。 5)bytes包與Go的垃圾回收器協同工作,提高了大數據處理的效率。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器