发布时间:2026/6/9 3:56:58
Go学习第2天:程序结构+基础语法+数据类型
Go的程序结构基础语法数据类型一、Go程序整体结构1.1 组成概述1.2 各模块详解示例1package 包声明2import 导入依赖包3func 函数定义4注释5标识符大小写访问规则1.3 程序运行两种方式二、Go基础语法2.1 标记与行分隔规则说明示例踩坑习惯性每行末尾加分号代码无语法错误但不符合Go编码规范。2.2 标识符命名规范说明踩坑标识符带特殊符号、数字开头直接语法报错。2.3 Go关键字25个保留字不能用作标识符2.4 字符串拼接与格式化输出1字符串拼接2格式化函数踩坑占位符和变量类型不匹配%d传字符串运行输出异常数据。2.5 代码空格规范三、Go基础数据类型3.1 布尔类型 bool3.2 数值类型3.2.1 整型分有符号/无符号3.2.2 浮点型踩坑3.3 string字符串3.4 派生类型一、Go程序整体结构1.1 组成概述一个完整可运行Go程序由包声明、导包、函数、变量、语句表达式、注释6部分构成可执行程序必须包含package main与main()入口函数。1.2 各模块详解示例1package 包声明说明源文件首行必须写包声明package main代表可执行程序非main包为依赖库包无法单独运行。同一文件夹下所有go文件包名必须统一文件名、文件夹名和包名无强制一致要求。示例// 当前文件属于main包可编译成程序packagemain// 自定义工具包只能被其他文件导入调用packageutil踩坑同一个目录多个文件写不同包名编译直接报错可执行项目漏掉package main无法生成二进制文件。2import 导入依赖包说明引入程序需要使用的系统/第三方包fmt是标准输入输出内置包。支持单行导入、括号批量导入两种写法。示例// 单行导入importfmt// 批量导入工程常用规范写法import(fmtstrings)踩坑导入未使用的包代码直接编译报错相对路径导入自定义包路径书写错误。3func 函数定义说明func main()是程序执行入口程序运行自动优先执行main存在init()函数时init在main之前自动执行。示例packagemainimportfmt// 初始化函数优先于main执行funcinit(){fmt.Println(init优先执行)}// 程序主入口funcmain(){fmt.Println(main函数执行)}踩坑可执行程序缺少main函数go run编译失败main不允许设置入参和返回值。4注释说明分为单行//、多行块注释/* */注释不参与编译执行用于代码说明。示例// 单行注释定义程序入口/* 多行注释 用于批量注释代码、包文档说明 */funcmain(){}踩坑块注释不能嵌套注释符号中英文混用报错。5标识符大小写访问规则说明标识符首字母大写导出public包外可访问首字母小写私有private仅当前包可用Go控制访问权限唯一规则。示例packageutil// 大写外部包导入后可调用funcAdd(a,bint)int{returnab}// 小写仅util包内可用funcsub(a,bint)int{returna-b}踩坑外部包调用小写函数编译提示标识符未定义。1.3 程序运行两种方式命令作用使用场景示例go run xxx.go直接内存运行不生成二进制调试代码go run main.gogo build编译生成对应系统可执行文件打包发布go build ./main(Mac/Linux)、go build main.exe(Windows)踩坑{大括号不能单独换行换行直接语法报错// 错误写法{单独起行funcmain(){}// 正确写法{紧跟函数末尾funcmain(){}二、Go基础语法2.1 标记与行分隔规则说明Go代码由关键字、标识符、字符串、运算符、符号组成单行默认自动结束无需分号;仅一行多语句时手动加分号分隔开发不推荐一行多代码。示例// 常规写法不用分号fmt.Println(aaa)fmt.Println(bbb)// 一行多语句手动加分号不推荐fmt.Println(a);fmt.Println(b)踩坑习惯性每行末尾加分号代码无语法错误但不符合Go编码规范。2.2 标识符命名规范说明标识符变量名、函数名只能由**字母、数字、下划线_**组成首字符不能为数字不能使用系统关键字。合法userName、_num、age123非法1name、ab、casecase是关键字踩坑标识符带特殊符号、数字开头直接语法报错。2.3 Go关键字25个保留字不能用作标识符break default func interface select case defer go map switch chan else goto package type const fallthrough if range var continue for import return预定义内置标识符36个bool、byte、int、string、nil、make、len等可自定义但不建议覆盖。2.4 字符串拼接与格式化输出1字符串拼接packagemainimportfmtfuncmain(){str:Go入门学习fmt.Println(str)}2格式化函数fmt.Printf(格式,变量)直接控制台打印fmt.Sprintf(格式,变量)拼接字符串并返回不打印常用占位%d整型、%s字符串、%f浮点packagemainimportfmtfuncmain(){code:1001name:张三// 拼接赋值s:fmt.Sprintf(编号%d姓名%s,code,name)fmt.Println(s)// 直接打印fmt.Printf(编号%d姓名%s,code,name)}踩坑占位符和变量类型不匹配%d传字符串运行输出异常数据。2.5 代码空格规范变量声明、运算符前后加空格var age int 18禁止age18关键字后加空格if age0→if age 0VSCode保存自动gofmt格式化不用手动调整空格。三、Go基础数据类型Go数据类型分为布尔型、数字型、字符串、派生类型指针、数组、切片、map、struct、chan等3.1 布尔类型 bool说明只有两个值true/false占用1字节用于条件判断。示例packagemainimportfmtfuncmain(){varflagbooltruefmt.Println(flag)}踩坑Go布尔不能和数字0/1互相强制转换flag 1直接报错。3.2 数值类型3.2.1 整型分有符号/无符号类型取值范围备注int8-128~127有符号8位uint8(byte)0~255无符号8位byte别名uint8int/uint系统位数Mac64位64位整型跨平台慎用rune等价int32存储单个中文/Unicode字符日常开发优先使用int不用刻意指定int8/int16。3.2.2 浮点型float32、float64默认浮点常量识别为float64varffloat643.1415踩坑uint无符号变量赋值负数编译报错浮点运算存在精度丢失不适合金额计算。3.3 string字符串说明Go字符串固定长度UTF-8编码存储中文不可直接修改单个字符。示例varsstringGo学习// 拼接s2:s数据类型踩坑不能通过下标修改字符串单个字符s[0]A编译报错。3.4 派生类型指针存放变量内存地址数组固定长度连续空间切片slice动态变长数组struct结构体自定义复合数据类似Java实体类map键值对字典chanGo协程通信管道。

相关新闻

用STM32F103C8T6和光敏传感器做个环境光检测器(HAL库+ADC+DMA保姆级教程)
2026/6/9 2:56:57

用STM32F103C8T6和光敏传感器做个环境光检测器(HAL库+ADC+DMA保姆级教程)

用STM32F103C8T6打造智能环境光检测系统(HAL库实战指南)清晨的阳光透过窗帘缝隙洒进房间,你是否想过让单片机自动感知这种光线变化?我们将用一杯咖啡的价格(STM32F103C8T6开发板约15元,光敏电阻模块不到2元…

阅读更多
用LM393和7805/7905搞定模电课设:一个完整的水位检测电路从仿真到焊接全记录
2026/6/9 2:56:57

用LM393和7805/7905搞定模电课设:一个完整的水位检测电路从仿真到焊接全记录

从零搭建水位检测电路:LM393与7805/7905实战手记第一次接触模电课设时,看着任务书上"水位检测电路"几个字,我完全不知道从何下手。直到亲手用LM393比较器和7805/7905稳压芯片完成整个项目,才真正理解了课本上那些抽象的…

阅读更多
别再只盯着RJ45了!手把手教你搞定RGMII接口的PCB布局布线(含TI TDA4/高通8295芯片间直连实战避坑)
2026/6/9 2:56:57

别再只盯着RJ45了!手把手教你搞定RGMII接口的PCB布局布线(含TI TDA4/高通8295芯片间直连实战避坑)

RGMII接口PCB设计实战:从理论到芯片直连的全链路避坑指南当TI TDA4与高通8295需要通过RGMII接口直接通信时,超过60%的硬件工程师会在首次设计中遇到信号完整性问题。这个看似简单的四线制接口,隐藏着足以让整个系统崩溃的时序陷阱。1. RGMII接…

阅读更多
【JAVA毕设源码分享】基于springboot的宠物会所管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)
2026/6/9 13:56:59

【JAVA毕设源码分享】基于springboot的宠物会所管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

阅读更多
KMS_VL_ALL_AIO:3分钟搞定Windows和Office激活的智能方案
2026/6/9 13:56:59

KMS_VL_ALL_AIO:3分钟搞定Windows和Office激活的智能方案

KMS_VL_ALL_AIO:3分钟搞定Windows和Office激活的智能方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 想象一下这样的场景:你正在准备一份紧急报告,距离提…

阅读更多
开源工具m4s-converter:5秒无损转换B站缓存视频,永久保存珍贵记忆
2026/6/9 13:56:59

开源工具m4s-converter:5秒无损转换B站缓存视频,永久保存珍贵记忆

开源工具m4s-converter:5秒无损转换B站缓存视频,永久保存珍贵记忆 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否…

阅读更多
MPV_lazy终极指南:3步打造你的专业级影音播放器
2026/6/9 13:56:59

MPV_lazy终极指南:3步打造你的专业级影音播放器

MPV_lazy终极指南:3步打造你的专业级影音播放器 【免费下载链接】mpv_PlayKit 🔄 mpv player 播放器折腾记录 Windows conf | 中文注释配置 汉化文档 快速帮助入门 | mpv-lazy 懒人包 Win11 x64 config | 着色器 shader 滤镜 filter 整合方案 项目地址…

阅读更多
如何将my2sql与Kubernetes集成:打造云原生数据库备份恢复方案
2026/6/9 13:56:59

如何将my2sql与Kubernetes集成:打造云原生数据库备份恢复方案

如何将my2sql与Kubernetes集成:打造云原生数据库备份恢复方案 【免费下载链接】my2sql 解析MySQL binlog ,可以生成原始SQL、回滚SQL、去除主键的INSERT SQL等,也可以生成DML统计信息以及大事务分析信息。 项目地址: https://gitcode.com/g…

阅读更多
K60嵌入式开发实战:从核心架构到外设应用与低功耗设计
2026/6/9 12:56:59

K60嵌入式开发实战:从核心架构到外设应用与低功耗设计

1. 项目概述:为什么选择K60作为嵌入式设计的核心?在嵌入式开发领域,选型往往是项目成败的第一步。面对市面上琳琅满目的微控制器(MCU),从简单的8位机到功能复杂的多核处理器,如何做出最合适的选…

阅读更多
JPEXS Free Flash Decompiler完整指南:免费SWF逆向工程实用教程
2026/6/9 9:44:07

JPEXS Free Flash Decompiler完整指南:免费SWF逆向工程实用教程

JPEXS Free Flash Decompiler完整指南:免费SWF逆向工程实用教程 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 你是否曾经遇到过需要修改一个Flash文件,却发现源…

阅读更多
抖音无水印视频下载器:终极技术实现与部署指南
2026/6/9 9:42:10

抖音无水印视频下载器:终极技术实现与部署指南

抖音无水印视频下载器:终极技术实现与部署指南 【免费下载链接】douyin_downloader 抖音短视频无水印下载 win编译版本下载:https://www.lanzous.com/i9za5od 项目地址: https://gitcode.com/gh_mirrors/dou/douyin_downloader 想要获取纯净的抖音…

阅读更多
工业级数据血缘分析:基于 Python 构建大规模图数据库关系拓扑与数据沿袭(Data Lineage)追踪算法
2026/6/9 6:47:48

工业级数据血缘分析:基于 Python 构建大规模图数据库关系拓扑与数据沿袭(Data Lineage)追踪算法

工业级数据血缘分析:基于 Python 构建大规模图数据库关系拓扑与数据沿袭(Data Lineage)追踪算法在企业级数据中台、大型分布式数据仓库(如 Hive、MaxCompute、ClickHouse)及数据治理体系的建设演进中,数据血…

阅读更多
pot-desktop跨平台翻译工具架构深度解析与实战指南
2026/6/9 0:56:57

pot-desktop跨平台翻译工具架构深度解析与实战指南

pot-desktop跨平台翻译工具架构深度解析与实战指南 【免费下载链接】pot-desktop 🌈一个跨平台的划词翻译和OCR软件 | A cross-platform software for text translation and recognize. 项目地址: https://gitcode.com/pot-app/pot-desktop pot-desktop作为一…

阅读更多
Doxygen注释标记的隐藏技巧:除了@brief和@param,这些冷门但好用的标记让你的文档更出彩
2026/6/9 0:56:57

Doxygen注释标记的隐藏技巧:除了@brief和@param,这些冷门但好用的标记让你的文档更出彩

Doxygen注释标记的隐藏技巧:除了brief和param,这些冷门但好用的标记让你的文档更出彩在软件开发的世界里,代码注释文档就像是一座桥梁,连接着代码实现者与使用者。对于已经熟悉Doxygen基础标记的开发者来说,如何让这座…

阅读更多
别再手动复制了!Vivado 2021.1 加密IP核的完整TCL脚本与秘钥文件配置指南
2026/6/9 0:56:57

别再手动复制了!Vivado 2021.1 加密IP核的完整TCL脚本与秘钥文件配置指南

Vivado 2021.1自动化加密IP核:TCL脚本工程化实践指南在FPGA开发中,IP核的保护一直是工程师面临的重要课题。随着项目复杂度的提升,手动逐个加密文件不仅效率低下,还容易引入人为错误。本文将带您深入探索如何通过TCL脚本实现Vivad…

阅读更多
GIT修改用户名
2026/6/8 18:27:18

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/8 18:27:24

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/9 9:39:35

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多