Go语言数据类型有哪些_Golang基本类型介绍

发布时间 - 2026-02-02 00:00:00    点击率:
Go中基本数据类型共七类:bool、string、整型(int/int8…/uint64/uintptr)、浮点型(float32/float64)、复数型(complex64/complex128)、byte(uint8)、rune(int32),均直接存值、赋值传参时拷贝整个值、不共享底层内存。

Go里哪些类型算“基本数据类型”?

Go语言中,真正属于「基本类型」(也叫值类型)的只有这七类:boolstring、所有整型(int/int8/.../uint64/uintptr)、浮点型(float32/float64)、复数型(complex64/complex128)、byte(即uint8)、rune(即int32)。它们共同特点是:直接存值、赋值/传参时拷贝整个值、不共享底层内存。

容易混淆的是:slicemapchanfuncinterface{} 和指针(*T)——这些都不是基本类型,而是引用类型或复合类型,底层持有指针,传参不拷贝数据本身。

int、int64、uint8…到底该用哪个?

选错整数类型不会立刻报错,但会埋下溢出、跨平台兼容或内存浪费的隐患。核心原则是「按需最小化」:

  • uint8(别名 byte)适合表示单个字节、ASCII字符、状态码(0–255),比如 HTTP 状态码 200 存成 uint8 就够了
  • int 是最常用默认整型,但它的大小依赖系统(32位机为int32,64位机为int64),写跨平台库或序列化时尽量避免,改用明确位宽的 int32int64
  • uintptr 只用于底层操作(如unsafe包指针运算),绝不能用来做普通计数——它不保证能和int互转,且在GC中行为特殊
  • unsafe.Sizeof(x) 实时验证变量占多少字节,比如 var x int = 1 在64位系统上占8字节,不是4字节

string、[]byte、rune 三者怎么选?

字符串处理是Go新手最容易翻车的地方:

  • string 是只读的 UTF-8 字节序列,len(s) 返回字节数,不是字符数;遍历 for i, r := range s 得到的是 rune(Unicode 码点),不是 byte
  • 要修改文本内容,必须先转成 []byte(可变字节切片),改完再转回 string;直接对 string 下标赋值会编译失败
  • rune 不是“字符类型”,而是 int32 别名,用于安全表示一个 Unicode 字符(比如中文、emoji),len([]rune(s)) 才是真正的字符个数
  • 误用 string[0] 提取首字符?可能只拿到 UTF-8 编码的第一个字节(比如中文变成乱码),正确做法是 []rune(s)[0] 或用 strings.RuneCountInString

float32 和 float64 的精度坑怎么避?

浮点数不是数学实数,Go里尤其要注意默认行为:

  • float32 有效数字约7位,float64 约15位;金融计算、科学计算一律用 float64,别图省那4字节
  • 不要用 == 直接比较两个浮点数是否相等,应判断差值是否小于 epsilon(如 math.Abs(a-b) )
  • 声明时没写类型,Go会按字面量推断:var x = 3.14float64var y = 3.14e2 也是 float64;但 var z float32 = 3.14 会丢失精度(3.1400001)
  • fmt.Pri

    ntf("%f", x)
    输出时,默认显示6位小数,掩盖真实精度问题;调试建议用 "%g""%.10g" 查看实际值

最常被忽略的一点:Go没有隐式类型转换。哪怕只是把 int 加到 float64 上,也必须显式写成 float64(i) + f,否则编译直接报错——这不是限制,是防止意外精度丢失的设计守门员。


# go  # golang  # go语言  # 编码  # 字节  # 金融  # 状态码  # 隐式类型转换  # 数据类型  # String  # for  # math  # printf  # 整型  # 浮点型  # 字符串  # bool  # int  # 指针  # 值类型  # 引用类型  # 整数类型  # Interface 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  Laravel如何创建自定义Facades?(详细步骤)  如何快速登录WAP自助建站平台?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  linux top下的 minerd 木马清除方法  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  QQ浏览器网页版登录入口 个人中心在线进入  5种Android数据存储方式汇总  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  如何在云主机上快速搭建多站点网站?  如何快速打造个性化非模板自助建站?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel如何实现文件上传和存储?(本地与S3配置)  Laravel如何实现API速率限制?(Rate Limiting教程)  历史网站制作软件,华为如何找回被删除的网站?  香港服务器部署网站为何提示未备案?  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  微信小程序 五星评分(包括半颗星评分)实例代码  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  googleplay官方入口在哪里_Google Play官方商店快速入口指南  如何快速搭建高效WAP手机网站吸引移动用户?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  如何在万网主机上快速搭建网站?  如何快速生成ASP一键建站模板并优化安全性?  Python函数文档自动校验_规范解析【教程】  使用spring连接及操作mongodb3.0实例  如何在 Pandas 中基于一列条件计算另一列的分组均值  奇安信“盘古石”团队突破 iOS 26.1 提权  千库网官网入口推荐 千库网设计创意平台入口  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  如何撰写建站申请书?关键要点有哪些?  如何在云指建站中生成FTP站点?  活动邀请函制作网站有哪些,活动邀请函文案?  EditPlus中的正则表达式 实战(4)  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  青岛网站建设如何选择本地服务器?  JavaScript如何实现音频处理_Web Audio API如何工作?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  高防服务器如何保障网站安全无虞?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  如何在宝塔面板创建新站点?