当前位置: 首页 > news >正文

【Go语言基础【2】】数据类型之基础数据类型:数字、字符、布尔、枚举、自定义

文章目录

    • 一、数据类型体系总览
    • 二、整型(Integer Types)
    • 三、浮点型(Floating-Point Types)
    • 四、字符与字符串(Character & String)
      • 1. 字符(`byte` & `rune` )
      • 2. 字符串(`string` )
    • 五、布尔类型(Boolean)
    • 六、枚举类型(借助 `iota` 实现)
    • 七、自定义类型(`type` 声明 )(用于基础类型封装)

一、数据类型体系总览

Go 语言的数据类型可分为基础类型派生类型(如切片、映射、通道等),基础类型是构建程序数据的“原子单元”,涵盖:

  • 整型
  • 浮点型
  • 复数型
  • 字符与字符串
  • 布尔类型
  • 枚举(借助 iota 实现)
  • 自定义类型

 

二、整型(Integer Types)

  • 用于存储整数,分有符号int 系列 )和无符号uint 系列 ),按字节宽度细分,适配不同数值范围需求。
  • 类型名、字节宽度、取值范围对应关系:
类型名字节宽度取值范围(有符号/无符号)说明
int平台相关32 位系统 4 字节(-2¹⁵ ~ 2¹⁵-1 );64 位系统 8 字节(-2³¹ ~ 2³¹-1 )通用整型,适配平台,代码移植常用
uint平台相关32 位系统 4 字节(0 ~ 2¹⁶-1 );64 位系统 8 字节(0 ~ 2³²-1 )通用无符号整型
int81 字节-128 ~ 127(有符号)精准控制内存,适合小范围数值
int162 字节-32768 ~ 32767(有符号)
int324 字节-2147483648 ~ 2147483647(有符号)可存储 Unicode 码点(如 rune 底层类型 )
int648 字节-9223372036854775808 ~ 9223372036854775807(有符号)适合存储大整数(如时间戳、高精度计数 )
uint81 字节0 ~ 255(无符号)别名 byte,常用于处理二进制数据、字符
uint162 字节0 ~ 65535(无符号)
uint324 字节0 ~ 4294967295(无符号)
uint648 字节0 ~ 18446744073709551615(无符号)
uintptr平台相关32 位系统 4 字节;64 位系统 8 字节(无符号)存储指针地址,用于底层内存操作

示例代码

package mainimport "fmt"func main() {var numInt int = 100              // 通用有符号整型var numUint uint = 200            // 通用无符号整型var numInt8 int8 = -50            // 1字节有符号var numUint8 uint8 = 200          // 1字节无符号(别名 byte 场景:byte(numUint8) )fmt.Printf("int: %d, uint: %d, int8: %d, uint8: %d\n", numInt, numUint, numInt8, numUint8)
}

 

三、浮点型(Floating-Point Types)

  • 存储小数,遵循 IEEE-754 标准,分 float32(单精度 )、float64(双精度 ),complex64/complex128 用于复数(含实部、虚部 )。
  • 类型名、字节宽度、含义对应:
类型名字节宽度含义典型场景
float324 字节IEEE-754 32 位单精度浮点数对精度要求不高、内存敏感场景(如简单图形处理 )
float648 字节IEEE-754 64 位双精度浮点数科学计算、金融等高精度需求场景
complex648 字节32 位实部 + 32 位虚部的复数信号处理、数学计算(如电路仿真 )
complex12816 字节64 位实部 + 64 位虚部的复数高精度复数运算(如量子计算模拟 )
package mainimport "fmt"func main() {var f32 float32 = 3.1415926    // 单精度浮点var f64 float64 = 3.1415926535 // 双精度浮点var c64 complex64 = 1 + 2i     // 复数(实部 int 自动转 float32 )var c128 complex128 = 3.14 + 6.28i fmt.Printf("float32: %.7f, float64: %.10f\n", f32, f64)fmt.Printf("complex64: %v, complex128: %v\n", c64, c128)
}

 

四、字符与字符串(Character & String)

1. 字符(byte & rune

  • byte:别名 uint8,1 字节,存储 ASCII 字符(如 'a''0' ),示例:
    var asciiChar byte = 'A' // 存储 ASCII 字符 'A' 的 ASCII 码值 65
    
  • rune:别名 int32,4 字节,存储 Unicode 码点(涵盖全球语言字符、表情等 ),示例:
    var unicodeChar rune = '中' // 存储汉字“中”的 Unicode 码点
    

 

2. 字符串(string

  • 核心特性
    • 只读的字节序列,基于 UTF-8 编码存储字符,可包含任意 Unicode 字符。
    • 可解析字符串(双引号 " 包裹,支持转义 )和原生字符串(反引号 ```包裹,保留换行、不转义 )。
  • 转义字符:支持 \n(换行 )、\t(制表符 )、\u{...}(Unicode 码点 )等,如:
 var s1 string = "Hello\nWorld" // 可解析字符串,含换行转义var s2 string = `Line 1
Line 2` // 原生字符串,保留换行
  • 常用操作
    • 获取长度:len(s)(按字节数,非字符数,因 UTF-8 可变长 )。
    • 索引访问:s[0](获取第 1 个字节,注意多字节字符需用 rune 遍历 )。
    • 拼接:s := "Hello" + " World"

 
示例代码

package mainimport "fmt"func main() {var s string = "你好,Go!\u4e2d" // 含 Unicode 转义fmt.Println("字符串:", s)fmt.Println("长度(字节数):", len(s))// 遍历字符(按 rune 处理多字节字符)for _, r := range s {fmt.Printf("%c ", r)}
}

 

五、布尔类型(Boolean)

  • 定义:类型为 bool,值仅 truefalse,占 1 字节,零值false
  • 用途:条件判断(iffor 循环条件 )、逻辑运算(与 &&、或 ||、非 ! )。
  • 示例
    package mainimport "fmt"func main() {var isTrue bool = truevar isFalse bool // 零值为 falsefmt.Printf("isTrue: %v, isFalse: %v\n", isTrue, isFalse)// 逻辑运算fmt.Println("与运算:", isTrue && isFalse)fmt.Println("或运算:", isTrue || isFalse)fmt.Println("非运算:", !isTrue)
    }
    

 

六、枚举类型(借助 iota 实现)

  • 核心逻辑iota 是 Go 预定义常量生成器,在 const 声明块中,从 0 开始逐行递增(每行常量声明自动 +1 ),用于批量定义有规律的常量。
  • 基础用法
    package mainimport "fmt"const (a = iota // a = 0b        // b = 1(自动继承 iota,且 iota 递增)c        // c = 2d        // d = 3
    )func main() {fmt.Println(a, b, c, d) // 输出:0 1 2 3
    }
    
  • 进阶用法(结合位运算、跳过值等 ):
    const (Read  = 1 << iota // 1 << 0 = 1(二进制 0001 )Write             // 1 << 1 = 2(二进制 0010 )Exec              // 1 << 2 = 4(二进制 0100 )All  = Read | Write | Exec // 7(二进制 0111 )
    )
    

 

七、自定义类型(type 声明 )(用于基础类型封装)

  • 语法type 新类型名 底层类型,可基于基础类型或其他自定义类型创建新类型,用于类型封装语义化标识
  • 作用
    • 增强代码可读性(如 type Gender string 明确语义 )。
    • 实现类型方法(为自定义类型绑定专属行为 )。
  • 示例
    package mainimport "fmt"// 自定义类型:基于 string 的 Gender 类型
    type Gender stringconst (Male   Gender = "male"Female Gender = "female"
    )// 为自定义类型绑定方法
    func (g Gender) Info() string {return fmt.Sprintf("性别:%s", g)
    }func main() {var gender Gender = Malefmt.Println(gender.Info()) // 输出:性别:male
    }
    
http://www.lqws.cn/news/143785.html

相关文章:

  • 1、Go语言基础中的基础
  • 【Go语言基础【四】】局部变量、全局变量、形式参数
  • PPT转图片拼贴工具 v3.0
  • Spark 写文件
  • Dubbo Logback 远程调用携带traceid
  • 41道Django高频题整理(附答案背诵版)
  • PostgreSQL 的扩展pg_prewarm
  • 20250605在微星X99主板中配置WIN10和ubuntu22.04.6双系统启动的引导设置
  • Django CMS 的 Demo
  • NoSQL之Redis配置与优化
  • SQL Server相关的sql语句
  • 嵌入式学习 D33:系统编程--网路编程
  • ubuntu 端口复用
  • Ubuntu20.04设置为开机后直接自动进入纯命令行界面
  • 【Linux】为 Git 设置 Commit 提交模板方法,可统一个人或者项目的提交风格
  • 【Git系列】如何同步原始仓库的更新到你的fork仓库?
  • Excel-vlookup -多条件匹配,返回指定列处的值
  • [测试_10] Selenium IDE | cssSelector | XPath | 操作测试
  • Haproxy的基础配置
  • DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_天气预报日历示例(CalendarView01_18)
  • 111页可编辑精品PPT | 华为业务变革框架及战略级项目管理华为变革管理华为企业变革华为的管理模式案例培训
  • EXCEL通过DAX Studio获取端口号连接PowerBI
  • 联软NSPM自动化策略管理 助力上交所加速国产化替代提升运维效率
  • 三甲医院“AI平台+专家系统”双轮驱动模式的最新编程方向分析
  • 【个人笔记】数据库原理(西电)
  • vscode里如何用git
  • gorm多租户插件的使用
  • Linux下使用Transformers,模型和数据集的位置
  • 把握时代脉搏,铸就行业标杆:珠江电缆未来发展战略展望
  • 【C++ Qt】窗口(Qt窗口框架、菜单栏QMenuBar)