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

【Go】基本数据类型

数据类型关键特点
int8, int16, int32, int64有符号整型,表示负数
uint8, uint16, uint32, uint64无符号整型,不支持负数
int, uint依赖操作系统位数
float32, float64浮点数,存储小数,可能有精度误差
complex64, complex128复数类型
string不可变字符串
bool布尔类型,true/false

1. 整型 (int, uint)

学习笔记:

  • int8, int16, int32, int64有符号整型(可表示负数)。
  • uint8, uint16, uint32, uint64无符号整型(只能表示正数)。
  • intuint 的大小 依赖于操作系统(32位/64位)。
  • unsafe.Sizeof(变量) 获取变量占用的字节大小
package main

import (
	"fmt"
	"unsafe"
)

func main() {
	var a int8 = 127
	var b int16 = 200
	fmt.Println("有符号整型:", a, b)

	var x uint8 = 1
	var y uint8 = 2
	fmt.Println("无符号整型溢出示例 (1 - 2):", x-y) // 255,发生溢出

	// 获取 int 类型的字节大小
	var num int
	fmt.Println("int 类型在当前系统的字节大小:", unsafe.Sizeof(num), "字节")

	// 获取字符串的默认占用字节大小
	var str string
	fmt.Println("字符串默认占用:", unsafe.Sizeof(str), "字节")
}

2. 进制表示 (二进制八进制十六进制)

学习笔记:

  • 0b 二进制(只包含 01)。
  • 0o 八进制(只包含 0-7)。
  • 0x 十六进制(包含 0-9a-f)。
package main

import "fmt"

func main() {
	var binNum = 0b11   // 二进制 (3)
	var octNum = 0o11   // 八进制 (9)
	var hexNum = 0x11   // 十六进制 (17)

	fmt.Println("二进制 0b11:", binNum)
	fmt.Println("八进制 0o11:", octNum)
	fmt.Println("十六进制 0x11:", hexNum)

	fmt.Printf("二进制变量类型: %T\n", binNum) // int
}

3. 整型不同类型不能直接计算

学习笔记:

  • Go 语言 严格区分数据类型,即使 intint64 都是 64 位,也不能直接运算。
  • 解决办法:需要 类型转换int64(int变量))。
package main

import "fmt"

func main() {
	var num1 int64 = 100
	var num2 int = 50
	// fmt.Println(num1 + num2) // 错误:int64 和 int 不能直接相加
	fmt.Println("正确写法:", num1+int64(num2))
}

4. 浮点数 (float32float64)

学习笔记:

  • Go 提供 float32float64,默认是 float64
  • 浮点数精度问题
    • float321 符号位、8 指数位、23 小数位 组成。
    • float641 符号位、11 指数位、52 小数位 组成。
  • 浮点数运算可能出现精度误差(由于二进制无法精确表示某些小数)。
package main

import "fmt"

func main() {
	var v1, v2, v3 float32 = 0.111111, 0.222222, 0.333333
	if v1+v2 == v3 {
		fmt.Println("0.111111 + 0.222222 == 0.333333 (相等)")
	} else {
		fmt.Println("0.111111 + 0.222222 != 0.333333 (不相等, 浮点数误差)")
	}
}

解决办法:使用 github.com/shopspring/decimal 进行高精度计算。


5. 复数 (complex64complex128)

学习笔记:

  • Go 语言支持复数,用 complex(real, imag) 创建。
  • complex64 = float32 的实部 + float32 的虚部。
  • complex128 = float64 的实部 + float64 的虚部。
package main

import "fmt"

func main() {
	var z1 complex64 = 5 + 4i
	fmt.Println("复数 z1:", z1)

	// 获取复数的实部和虚部
	fmt.Println("实部:", real(z1))
	fmt.Println("虚部:", imag(z1))
}

6. 字符串 (string)

学习笔记:

  • 字符串是不可变的,无法直接修改其中的字符。
  • 支持多行字符串(用反引号 包裹)。
  • len(str) 获取字符串长度(字节数,而不是字符数)
package main

import "fmt"

func main() {
	str := "Hello, 世界"
	fmt.Println("字符串:", str)
	fmt.Println("字符串长度(字节数):", len(str)) // "世界" 在 UTF-8 编码中占 6 个字节
}

7. 布尔值 (bool)

学习笔记:

  • bool 只能取 truefalse
  • 不能与整数进行转换(不能用 0 代表 false)。
  • 默认值是 false
package main

import "fmt"

func main() {
	var isTrue bool = true
	var isFalse bool = false
	fmt.Println("布尔值:", isTrue, isFalse)
}

http://www.kler.cn/a/598147.html

相关文章:

  • Jenkins 配置python项目和allure
  • 蓝桥杯备考-》单词接龙
  • Linux shell脚本3-if语句、case语句、for语句、while语句、until语句、break语句、continue语句,格式说明及程序验证
  • 苹果上架APP遇到提示缺少出口合规证明时应该如何处理-什么是APP加密文稿-优雅草卓伊凡
  • (每日一道算法题)翻转对
  • MySQL 锁机制详解
  • 2.企业级AD活动目录架构与设计原则实战指南
  • 程序代码篇---SQLite数据库存储信息
  • keda基于postgresql伸缩dify-api服务
  • 十亿级流量削峰实战:LinkedBlockingQueue缓冲池的工程化实现
  • 查看自己的公有ip
  • .NET 9 彻底改变了 API 文档:从 Swashbuckle(Swagger) 到 Scalar
  • 力扣55.跳跃游戏
  • FPT+SMB共享文件夹快速访问
  • 使用__attribute__((at(addr))) 固定变量到指定 Flash 地址
  • Scikit-learn 学习思维导图
  • 深度解析 Android Matrix 变换(二):组合变换 pre、post
  • 资金管理策略思路
  • 数据结构之双链表
  • 解码未来:DeepSeek开源FlashMLA,推理加速核心技术,引领AI变革