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

Go语言变量与数据类型完全指南

概述Go语言以其简洁的类型系统著称变量声明方式多样数据类型清晰明了。本文详细介绍Go语言中的变量声明、基本数据类型、类型转换以及可见性规则帮助读者打下坚实的类型基础。一、变量声明1.1 var 声明标准的变量声明使用var关键字// 基本语法 var name string 张三 var age int 25 var isStudent bool true ​ // 类型推断省略类型 var name 张三 // 推断为 string var age 25 // 推断为 int var isStudent true // 推断为 bool ​ // 声明多个变量 var ( name string age int city string 北京 )1.2 短变量声明:在函数内部可以使用:进行短变量声明func main() { name : Go语言 // 等价于 var name string Go语言 version : 1.22 // 等价于 var version int 1.22 price : 99.9 // 等价于 var price float64 99.9 fmt.Println(name, version, price) }重要规则:只能在函数内部使用不能用于全局变量声明左侧至少有一个变量是新建的不能全是已存在的变量// 正确示例 a, b : 1, 2 // 两个都是新建 a, c : 1, 3 // a已存在c新建 ​ // 错误示例 a, b : 1, 2 // 错误没有新变量1.3 常量声明常量使用const关键字值在编译时确定const Pi float64 3.14159 const AppName MyApp // 类型推断 const ( StatusOK 200 StatusNotFound 404 StatusError 500 ) ​ // iota常量计数器用于生成枚举值 const ( Sunday iota // 0 Monday // 1 Tuesday // 2 Wednesday // 3 Thursday // 4 Friday // 5 Saturday // 6 )1.4 零值机制Go语言中未初始化的变量会自动赋零值类型零值数值类型int, float0布尔类型 boolfalse字符串 string空字符串指针、切片、map、channel、interfacenilfunc main() { var i int var f float64 var b bool var s string var arr []int fmt.Printf(int零值: %d\n, i) fmt.Printf(float零值: %f\n, f) fmt.Printf(bool零值: %t\n, b) fmt.Printf(string零值: %s\n, s) fmt.Printf(slice零值: %v (nil: %t)\n, arr, arr nil) }输出int零值: 0 float零值: 0.000000 bool零值: false string零值: slice零值: [] (nil: true)二、基本数据类型2.1 整数类型Go的整数类型分为有符号和无符号两大类有符号整数类型描述范围int88位有符号-128 ~ 127int1616位有符号-32768 ~ 32767int3232位有符号-2147483648 ~ 2147483647int6464位有符号-9223372036854775808 ~ 9223372036854775807int平台相关32/64位取决于平台无符号整数类型描述范围uint88位无符号0 ~ 255uint1616位无符号0 ~ 65535uint3232位无符号0 ~ 4294967295uint6464位无符号0 ~ 18446744073709551615uint平台相关取决于平台byteuint8 的别名0 ~ 255runeint32 的别名Unicode码点-2147483648 ~ 2147483647func main() { // 有符号整数 var a int8 127 var b int16 -128 var c int32 2147483647 var d int64 -9223372036854775808 // 无符号整数 var e uint8 255 var f uint16 65535 // byte 和 rune var g byte 65 // ASCII A var h rune 中 // Unicode码点 fmt.Printf(int8: %d\n, a) fmt.Printf(int16: %d\n, b) fmt.Printf(byte: %c (ASCII 65)\n, g) fmt.Printf(rune: %c (Unicode)\n, h) }2.2 浮点数类型类型描述精度float3232位浮点数约7位十进制数字float6464位浮点数约15位十进制数字推荐使用func main() { var a float32 3.1415926 var b float64 3.141592653589793 fmt.Printf(float32: %f\n, a) fmt.Printf(float32: %.6f\n, a) fmt.Printf(float64: %.15f\n, b) // 科学计数法 fmt.Printf(float64科学计数: %e\n, b) // 特殊值 fmt.Printf(无穷大: %f\n, math.Inf(1)) fmt.Printf(负无穷: %f\n, math.Inf(-1)) fmt.Printf(NaN: %f\n, math.NaN()) }2.3 复数类型Go支持复数运算func main() { var c1 complex64 1 2i var c2 complex128 3 4i fmt.Printf(c1: %v\n, c1) fmt.Printf(c2: %v\n, c2) fmt.Printf(c1 c2 %v\n, c1 c2) fmt.Printf(c1 * c2 %v\n, c1 * c2) fmt.Printf(real(c1) %f, imag(c1) %f\n, real(c1), imag(c1)) }2.4 字符串类型Go字符串是UTF-8编码的不可变字节序列func main() { s1 : Hello, Go! s2 : 你好Go语言 fmt.Println(s1) fmt.Println(s2) // 字符串长度字节数 fmt.Printf(s1字节长度: %d\n, len(s1)) fmt.Printf(s2字节长度: %d\n, len(s2)) // 字符个数rune数 fmt.Printf(s2字符个数: %d\n, len([]rune(s2))) // 访问单个字节 fmt.Printf(s1[0] %c (字节值: %d)\n, s1[0], s1[0]) }2.5 布尔类型布尔类型只有两个值true和falsefunc main() { var a bool true var b bool false // 短路求值 c : a b // falsea为true但b为false d : a || b // truea为true无需计算b fmt.Printf(a b %t\n, c) fmt.Printf(a || b %t\n, d) fmt.Printf(!a %t\n, !a) }三、类型转换Go语言没有隐式类型转换必须显式转换3.1 数值类型转换func main() { // int 转 float var i int 42 var f float64 float64(i) fmt.Printf(int-float64: %f\n, f) // float 转 int丢失小数部分 var f2 float64 3.99 var i2 int int(f2) fmt.Printf(float64-int: %d (截断)\n, i2) // int8, int16, int32, int64 互转 var i64 int64 1000 var i32 int32 int32(i64) var i16 int16 int16(i32) var i8 int8 int8(i16) fmt.Printf(int64-int8: %d\n, i8) }⚠️ 溢出问题func main() { var i int8 127 var i2 int8 int8(i 1) // 溢出结果为-128 fmt.Printf(int8溢出: %d\n, i2) var u uint8 255 var u2 uint8 u 1 // 溢出结果为0 fmt.Printf(uint8溢出: %d\n, u2) }3.2 字符串与字节切片互转func main() { // string 转 []byte s : Hello b : []byte(s) fmt.Printf([]byte: %v\n, b) // []byte 转 string b2 : []byte{72, 101, 108, 108, 111} s2 : string(b2) fmt.Printf(string: %s\n, s2) // string 转 []rune处理中文 s3 : 你好 r : []rune(s3) fmt.Printf([]rune: %v (Unicode码点)\n, r) fmt.Printf(字符个数: %d\n, len(r)) // []rune 转 string r2 : []rune{0x4E2D, 0x6587} s4 : string(r2) fmt.Printf(string: %s\n, s4) }3.3 strconv 包转换import strconv ​ func main() { // 字符串转数值 i, _ : strconv.Atoi(42) fmt.Printf(Atoi: %d\n, i) f, _ : strconv.ParseFloat(3.14, 64) fmt.Printf(ParseFloat: %.2f\n, f) b, _ : strconv.ParseBool(true) fmt.Printf(ParseBool: %t\n, b) // 数值转字符串 s1 : strconv.Itoa(42) s2 : strconv.FormatFloat(3.14, f, 2, 64) s3 : strconv.FormatBool(true) fmt.Printf(Itoa: %s\n, s1) fmt.Printf(FormatFloat: %s\n, s2) fmt.Printf(FormatBool: %s\n, s3) }四、可见性规则Go语言使用首字母大小写来控制标识符的可见性package mypackage ​ import fmt ​ // MyPublicFunc 首字母大写可被其他包导出 func MyPublicFunc() { fmt.Println(我是公开函数) } ​ // myPrivateFunc 首字母小写仅限本包内使用 func myPrivateFunc() { fmt.Println(我是私有函数) } ​ // MyPublicVar 公开变量 var MyPublicVar 100 ​ // myPrivateVar 私有变量 var myPrivateVar 200 ​ // MyPublicType 公开结构体 type MyPublicType struct { Name string // 公开字段 age int // 私有字段 }规则总结首字母大写导出标识符可被其他包访问首字母小写未导出标识符仅限本包内访问五、命名规范5.1 变量命名Go语言推崇简洁、有意义的命名// ✅ 推荐简洁清晰 userName : 张三 isActive : true itemCount : 0 ​ // ❌ 避免过于简短或无意义 x : 张三 // x是什么 a : 1 // a是什么 data : // 什么数据 ​ // ❌ 避免中文拼音 xingming : 张三5.2 常量命名// 常量组命名规范 const ( StatusOK 200 StatusNotFound 404 StatusError 500 ) ​ // 枚举类型通常使用 iota const ( Monday iota Tuesday Wednesday Thursday Friday Saturday Sunday )5.3 包命名// ✅ 推荐简短、全小写、不含下划线 import ( fmt strings os/user ) ​ // ❌ 避免下划线、混合大小写 // import my_package // 下划线不推荐 // import MyPackage // 混合大小写不推荐六、代码规范检查使用go vet和gofmt保持代码规范# 格式化代码 go fmt ./... ​ # 检查代码问题 go vet ./... ​ # 使用 golangci-lint需安装 golangci-lint run总结本文详细介绍了Go语言的变量声明、数据类型、类型转换和可见性规则。需要牢记变量声明var声明可带类型:用于函数内短声明数据类型数值、字符串、布尔、rune/byte类型转换必须显式转换不存在隐式转换可见性首字母大写为导出小写为私有思考题var a int 3.14为什么不能编译通过如何正确判断中文字符串的长度为什么推荐使用 float64 而不是 float32 下一篇文章我们将深入讲解 Go 语言的运算符与控制流程敬请期待

相关文章:

Go语言变量与数据类型完全指南

概述Go语言以其简洁的类型系统著称,变量声明方式多样,数据类型清晰明了。本文详细介绍Go语言中的变量声明、基本数据类型、类型转换以及可见性规则,帮助读者打下坚实的类型基础。一、变量声明1.1 var 声明标准的变量声明使用 var 关键字&…...

告别手动点击:如何用Python脚本化COMSOL多物理场仿真工作流提升10倍效率

告别手动点击:如何用Python脚本化COMSOL多物理场仿真工作流提升10倍效率 【免费下载链接】MPh Pythonic scripting interface for Comsol Multiphysics 项目地址: https://gitcode.com/gh_mirrors/mp/MPh 在工程仿真领域,COMSOL Multiphysics以其…...

Go语言环境搭建与第一个程序详解

前言 Go语言(又称Golang)是Google于2009年发布的开源编程语言,以简洁、高效、并发原生支持著称。截至2026年,Go已经成为云原生领域的主力语言,Kubernetes、Docker、Terraform等明星项目均基于Go开发。本文详细介绍Go开…...

Creality Print:如何用开源切片软件打造完美3D打印作品?

Creality Print:如何用开源切片软件打造完美3D打印作品? 【免费下载链接】CrealityPrint 项目地址: https://gitcode.com/gh_mirrors/cr/CrealityPrint 你是否曾为3D打印模型表面的层纹、尺寸偏差或支撑结构难以移除而烦恼?在3D打印的…...

深度解析HotGo插件化架构:从微核设计到系统扩展的实战经验

深度解析HotGo插件化架构:从微核设计到系统扩展的实战经验 【免费下载链接】hotgo HotGo 是一个基于 vue 和 goframe2.0 开发的全栈前后端分离的开发基础平台和移动应用平台,集成jwt鉴权,动态路由,动态菜单,casbin鉴权…...

React 的核心设计理念是什么?并列举三大核心特性。

文章目录一、React 核心面试指南:设计理念与架构演进🟢 面试题:React 的核心设计理念是什么?并列举三大核心特性。1. 核心设计理念:快速响应 (Design for Graceful UI)2. 三大核心特性(深度解析&#xff09…...

JavaScript部分JSON解析器:处理流式与不完整数据的工程实践

1. 项目概述:为什么我们需要一个“部分JSON解析器”?如果你处理过前端数据流、大语言模型(LLM)的流式响应,或者任何需要从“数据流”中逐步提取结构化信息的场景,那你大概率遇到过这个痛点:你拿…...

决策树模型中的有序编码优化技巧

1. 决策树与有序编码实战指南在机器学习项目中,我们经常遇到包含有序分类特征的数据集。上周处理信用卡风控数据时,我发现直接将"用户收入等级"(低/中/高)这样的有序变量简单Label Encoding会导致决策树模型效果下降15%…...

AI模型容器化部署风险暴雷预警,2026新版自动合规审计模块已强制启用,你的CI/CD流水线还安全吗?

更多请点击: https://intelliparadigm.com 第一章:AI模型容器化部署风险暴雷预警与合规审计强制启用背景 近年来,AI模型以Docker镜像形式在Kubernetes集群中大规模部署已成为行业常态,但由此引发的安全与合规事件持续攀升。2023年…...

MCP 2026车载适配实战指南:从ECU通信协议对接到ASAM AML模型验证的5大关键动作

更多请点击: https://intelliparadigm.com 第一章:MCP 2026车载适配的总体架构与准入边界 MCP 2026(Mobile Computing Platform 2026)是面向智能网联汽车的新一代车载计算平台规范,其适配架构以“分层解耦、安全隔离、…...

PyTorch加速Transformer训练:torch.compile与梯度累积实战

1. 加速Transformer模型训练的两大核心技术在深度学习领域,Transformer架构已经成为自然语言处理任务的事实标准。然而,随着模型规模的不断扩大,训练时间成本急剧上升。以典型的Llama模型为例,即使在高端GPU上完成一次完整训练也可…...

解锁学术新秘籍:书匠策AI,期刊论文的“智慧引擎”

在学术探索的征途中,期刊论文无疑是每位研究者展示智慧结晶、推动学科进步的重要舞台。然而,面对繁琐的写作流程、海量的文献筛选以及严谨的格式要求,许多学者常常感到力不从心。别怕,今天就让我们一起走进书匠策AI的世界&#xf…...

【权威实测】x86/ARM64/RISC-V三大架构下Docker WASM启动耗时对比(含eBPF加速实践),错过再等两年

更多请点击: https://intelliparadigm.com 第一章:Docker WASM边缘计算部署概览 WebAssembly(WASM)正迅速成为边缘计算场景中轻量、安全、跨平台执行代码的核心载体,而 Docker 通过实验性支持 wasi 运行时与 WASM 模块…...

从POC到GA:MCP 2026多租户加密在Kubernetes+SPIFFE环境中的零信任密钥注入全流程(含OpenSSF审计评分98.6)

更多请点击: https://intelliparadigm.com 第一章:MCP 2026多租户数据加密架构概览 MCP 2026 是面向云原生环境设计的多租户密码服务平台,其核心目标是在共享基础设施中实现租户间密钥隔离、策略自治与加密操作可审计。该架构采用“三平面分…...

车载以太网服务发现失效导致OTA中断(MCP 2026第4.2.1条强制条款深度拆解)

更多请点击: https://intelliparadigm.com 第一章:车载以太网服务发现失效导致OTA中断(MCP 2026第4.2.1条强制条款深度拆解) MCP 2026 第4.2.1条明确要求:“所有支持OTA升级的ECU必须在服务发现阶段完成至少一次成功的…...

【MCP 2026 LB架构生死线】:3类不兼容旧LB协议、2种TLS 1.3握手冲突、1个被忽略的时钟漂移阈值(附自动检测脚本)

更多请点击: https://intelliparadigm.com 第一章:【MCP 2026 LB架构生死线】:3类不兼容旧LB协议、2种TLS 1.3握手冲突、1个被忽略的时钟漂移阈值(附自动检测脚本) 随着 MCP 2026 规范正式进入生产级部署阶段&#xf…...

VS Code 远程容器开发效率跃迁指南(2024企业级调优白皮书)

更多请点击: https://intelliparadigm.com 第一章:VS Code 远程容器开发效率跃迁的核心价值与演进脉络 VS Code 的 Remote-Containers 扩展彻底重构了现代云原生开发的工作流范式,将开发环境从本地机器解耦至标准化的 Docker 容器中&#xf…...

机器学习过拟合问题解析与实战解决方案

1. 机器学习中的过拟合问题解析在机器学习实践中,我们常常会遇到一个令人困惑的现象:模型在训练数据上表现优异,但在实际应用中却差强人意。这种情况十有八九是因为模型出现了过拟合(Overfitting)。作为从业十余年的数…...

python argparse

### 聊聊 Python 里的 argparse:命令行参数处理那点事 1. 它是什么 argparse 是 Python 标准库里的一个模块,专门用来解析命令行参数。有人可能会说,处理参数不就是 sys.argv 切一切、判断一下吗?确实可以,但那种方式就…...

[具身智能-460]:openCV在自动数据标注中的应用

OpenCV 在自动数据标注中的应用非常广泛,它既是构建轻量级自动化工具的基石,也是现代 AI 辅助标注流程中不可或缺的预处理和后处理引擎。简单来说,OpenCV 在自动标注中扮演着三种角色:独立标注器:在特定场景下&#xf…...

[具身智能-459]:数据标注的演进是一部从“劳动密集型”向“技术密集型”深刻转型的历史:手工作坊时代->流程化、工业化时代->生成人机协同时代->全自动与合成数据阶段

数据标注的演进是一部从“劳动密集型”向“技术密集型”深刻转型的历史。随着人工智能模型从简单的图像分类发展到如今复杂的生成式大模型,数据标注的方式也经历了从纯手工到智能化、自动化的巨大跨越。结合当前的行业现状(2026年)&#xff0…...

3个关键步骤实现稳定黑苹果系统:从硬件兼容到完美驱动

3个关键步骤实现稳定黑苹果系统:从硬件兼容到完美驱动 【免费下载链接】Hackintosh Hackintosh long-term maintenance model EFI and installation tutorial 项目地址: https://gitcode.com/gh_mirrors/ha/Hackintosh 对于追求高性能计算和创意工作的技术爱…...

面阵相机 vs 线阵相机:堡盟与大恒相机选型差异全解析 附C++ 实战演示

面阵相机 vs 线阵相机:堡盟与大恒相机选型差异全解析 附C 实战演示面阵 vs 线阵:工业视觉的“广角镜”与“扫描仪”🔍 核心差异:一帧 vs 一行面阵相机 (Area Scan):瞬间的“广角镜”线阵相机 (Line Scan):连…...

魔兽世界API与宏命令工具:提升游戏体验的终极解决方案

魔兽世界API与宏命令工具:提升游戏体验的终极解决方案 【免费下载链接】wow_api Documents of wow API -- 魔兽世界API资料以及宏工具 项目地址: https://gitcode.com/gh_mirrors/wo/wow_api 在魔兽世界的广阔世界中,插件开发和宏命令是每位玩家提…...

3分钟上手Translumo:打破语言障碍的智能屏幕翻译神器

3分钟上手Translumo:打破语言障碍的智能屏幕翻译神器 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo 你是否曾…...

LinkSwift:八大网盘平台直链获取解决方案的技术解析与应用指南

LinkSwift:八大网盘平台直链获取解决方案的技术解析与应用指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘…...

老旧安卓电视的终极救星:MyTV-Android免费直播完整指南

老旧安卓电视的终极救星:MyTV-Android免费直播完整指南 【免费下载链接】mytv-android 使用Android原生开发的视频播放软件 项目地址: https://gitcode.com/gh_mirrors/my/mytv-android 你是否还在为家里的老旧智能电视无法安装新版直播软件而烦恼&#xff1…...

Windows 10/11 下 R 4.2.2 与 JAGS 4.3.1 版本匹配避坑实录:手把手搞定 infercnv 环境搭建

Windows 10/11 下 R 4.2.2 与 JAGS 4.3.1 版本匹配避坑实录:手把手搞定 infercnv 环境搭建 在生物信息学分析中,单细胞RNA测序数据的拷贝数变异分析是一个重要环节。infercnv作为一款强大的工具,能够帮助研究人员识别肿瘤微环境中的恶性细胞…...

【MCP 2026国产化部署终极指南】:覆盖麒麟V10/统信UOS/海光/鲲鹏全栈适配的7大避坑清单与3小时极速上线方案

更多请点击: https://kaifayun.com 第一章:MCP 2026国产化部署全景认知与演进路径 MCP(Model Control Platform)2026 是面向信创生态深度适配的新一代模型管控平台,其国产化部署已从“可用”迈向“好用、可控、可审计…...

【限时公开】微软内部未文档化的 devcontainer.json 隐藏字段:3个 undocumented 属性让构建速度飙升2.8倍

更多请点击: https://intelliparadigm.com 第一章:Dev Containers 优化避坑指南:从原理到实践的全景认知 Dev Containers 并非简单的容器镜像封装,而是 VS Code 与 Docker 生态深度协同的开发环境抽象层。其核心在于 devcontaine…...