Go语言--2go基础-->基本数据类型

Go语言--2go基础-->基本数据类型### Go语言数据类型详解

Go语言提供了丰富的数据类型,包括基本类型如整型、浮点型、布尔型、字符串,以及复合类型如数组、切片、结构体、函数、map和通道。这些类型与其他语言类似,但在细节上有其独特之处。以下是详细说明:

基本数据类型
整型

整型分为两大类:

  • 按长度分:int8、int16、int32、int64
  • 对应的无符号整型:uint8、uint16、netsuint32、uint64

其中:

  • uint8 对应 byte 型
  • int16 对应 C 语言的 short 型
  • int64 对应 C 语言的 long 型

类型描述表:

类型 描述
uint8 无符号 8位整型 (0 到 255)
uint16 无符号 16位整型 (0 到 65535)
uint32 无符号 32位整型 (0 到 4294967295)
uint64 无符号 64位整型 (0 到 18446744073709551615)
int8 有符号 8位整型 (-128 到 127)
int16 有符号 16位整型 (-32768 到 32767)
int32 有符号 32位整型 (-2147483648 到 2147483647)
int64 有符号 64位整型 (-9223372036854775808 到 9223372036854775807)
特殊整型
类型 描述
uint 32位系统上为uint32,64位系统上为uint64
int 32位系统上为int32,64位系统上为int64
uintptr 无符号整型,用于存放指针

注意事项:

  • 使用 int 和 uint 时,不能假定其长度固定(32位或64位),需考虑平台差异。
  • 获取对象长度的 len() 函数返回值会随平台变化。
  • 在涉及二进制传输、文件结构描述时,避免使用 int 和 uint,以保持跨平台一致性。切片或 map 元素数量可用 int 表示。
数字字面量语法

从 Go 1.13 起,支持二进制、八进制和十六进制浮点数定义:

  • 二进制:v := 0b00101101(相当于十进制 45)
  • 八进制:v := 0o377(相当于十进制 255)
  • 十六进制:v := 0x1p-2(相当于 0.25)
  • 允许用 _ 分隔数字:v := 123_456(等于 123456)

可用 fmt 函数展示不同进制整数:

go 复制代码
package main

import "fmt"

func main() {
    // 十进制
    var a int = 10
    fmt.Printf("%d \n", a)  // 10
    fmt.Printf("%b \n", a)  // 1010(二进制占位符%b)

    // 八进制(以0开头)
    var b int = 077
    fmt.Printf("%o \n", b)  // 77

    // 十六进制(以0x开头)
    var c int = 0xff
    fmt.Printf("%x \n", c)  // ff
    fmt.Printf("%X \n", c)  // FF
}
浮点型

支持 float32 和 float64,遵循 IEEE 754 标准:

  • float32 范围约 3.4e38(常量 math.MaxFloat32)
  • float64 范围约 1.8e308(常量 math.MaxFloat64)

打印浮点数示例:

go 复制代码
package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Printf("%f\n", math.Pi)
    fmt.Printf("%.2f\n", math.Pi)
}
复数

支持 complex64 和 complex128:

  • complex64:实部和虚部各32位
  • complex128:实部和虚部各64位
go 复制代码
var c1 complex64
c1 = 1 + 2i
var c2 complex128
c2 = 2 + 3i
fmt.Println(c1)
fmt.Println(c2)
布尔值

以 bool 类型声明,值仅为 true 或 false:

  • 默认值为 false
  • 不允许整型强制转换为布尔型
  • 无法参与数值运算或类型转换
字符串

字符串为原生数据类型,内部使用 UTF-8 编码:

go 复制代码
s1 := "hello"
s2 := "你好"
字符串转义符

常见转义符:

  • \r:回车符
  • \n:换行符
  • \t:制表符
  • \':单引号
  • \":双引号
  • \\:反斜杠

示例(Windows 文件路径):

go 复制代码
package main

import "fmt"

func main() {
    fmt.Println("str := \"c:\\Code\\lesson1\\go.exe\"")
}
多行字符串

使用反引号定义,转义字符无效:

go 复制代码
s1 := `第一行
第二行
第三行
`
fmt.Println(s1)
字符串常用操作

方法摘要:

  • len(str):求长度
    • 或 fmt.Sprintf:拼接
  • strings.Split:分割
  • strings.Contains:判断包含
  • strings.HasPrefix/HasSuffix:前缀/后缀判断
  • strings.Index/LastIndex:子串位置
  • strings.Join:连接操作
byte 和 rune 类型

字符用单引号包裹:

  • byte:uint8 类型,处理 ASCII 字符
  • rune:int32 类型,处理 UTF-8 字符(如中文)

遍历字符串示例:

go 复制代码
func traversalString() {
    s := "hello沙河"
    for i := 0; i < len(s); i++ { // byte遍历
        fmt.Printf("%v(%c) ", s[i], s[i])
    }
    fmt.Println()
    for _, r := range s { // rune遍历
        fmt.Printf("%v(%c) ", r, r)
    }
    fmt.Println()
}

输出:

复制代码
104(h) 101(e) 108(l) 108(l) 111(o) 230(æ) 178(²) 153() 230(æ) 178(²) 179(³) 
104(h) 101(e) 108(l) 108(l) 111(o) 27801(沙) 27827(河) 

注意:中文字符由多个字节组成,需用 rune 遍历避免乱码。

修改字符串

需先转换为 []rune 或 []byte,修改后再转回 string:

go 复制代码
func changeString() {
    s1 := "big"
    byteS1 := []byte(s1)
    byteS1[0] = 'p'
    fmt.Println(string(byteS1))

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

Go 只支持强制类型转换,语法为 T(表达式)

go 复制代码
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)
}

转自:https://www.liwenzhou.com/posts/Go/datatype/

相关推荐
爱吃泡芙的小白白2 小时前
Vue 3 核心原理与实战:从响应式到企业级应用
前端·javascript·vue.js
shhpeng2 小时前
go gtk 开发入门
golang
小郭团队2 小时前
1_7_五段式SVPWM (传统算法反正切+DPWM3)算法理论与 MATLAB 实现详解
开发语言·嵌入式硬件·算法·matlab·dsp开发
卓怡学长2 小时前
m115乐购游戏商城系统
java·前端·数据库·spring boot·spring·游戏
C+-C资深大佬2 小时前
C++风格的命名转换
开发语言·c++
No0d1es2 小时前
2025年粤港澳青少年信息学创新大赛 C++小学组复赛真题
开发语言·c++
点云SLAM2 小时前
C++内存泄漏检测之手动记录法(Manual Memory Tracking)
开发语言·c++·策略模式·内存泄漏检测·c++实战·new / delete
码上成长2 小时前
JavaScript 数组合并性能优化:扩展运算符 vs concat vs 循环 push
开发语言·javascript·ecmascript
打工的小王3 小时前
java并发编程(三)CAS
java·开发语言