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

Go学习第2天:程序结构+基础语法+数据类型

Go的程序结构+基础语法+数据类型

    • 一、Go程序整体结构
      • 1.1 组成概述
      • 1.2 各模块详解+示例
        • (1)package 包声明
        • (2)import 导入依赖包
        • (3)func 函数定义
        • (4)注释
        • (5)标识符大小写访问规则
      • 1.3 程序运行两种方式
    • 二、Go基础语法
      • 2.1 标记与行分隔规则
        • 说明
        • 示例
        • 踩坑:习惯性每行末尾加分号,代码无语法错误但不符合Go编码规范。
      • 2.2 标识符命名规范
        • 说明
        • 踩坑:标识符带特殊符号、数字开头直接语法报错。
      • 2.3 Go关键字(25个保留字,不能用作标识符)
      • 2.4 字符串拼接与格式化输出
        • 1)字符串拼接:+
        • 2)格式化函数
        • 踩坑:占位符和变量类型不匹配(%d传字符串),运行输出异常数据。
      • 2.5 代码空格规范
    • 三、Go基础数据类型
      • 3.1 布尔类型 bool
      • 3.2 数值类型
        • 3.2.1 整型(分有符号/无符号)
        • 3.2.2 浮点型
        • 踩坑
      • 3.3 string字符串
      • 3.4 派生类型

一、Go程序整体结构

1.1 组成概述

一个完整可运行Go程序由包声明、导包、函数、变量、语句表达式、注释6部分构成,可执行程序必须包含package mainmain()入口函数。

1.2 各模块详解+示例

(1)package 包声明
  • 说明:源文件首行必须写包声明,package main代表可执行程序;非main包为依赖库包,无法单独运行。同一文件夹下所有go文件包名必须统一,文件名、文件夹名和包名无强制一致要求。
  • 示例
// 当前文件属于main包,可编译成程序packagemain
// 自定义工具包,只能被其他文件导入调用packageutil
  • 踩坑:同一个目录多个文件写不同包名,编译直接报错;可执行项目漏掉package main无法生成二进制文件。
(2)import 导入依赖包
  • 说明:引入程序需要使用的系统/第三方包,fmt是标准输入输出内置包。支持单行导入、括号批量导入两种写法。
  • 示例
// 单行导入import"fmt"// 批量导入(工程常用规范写法)import("fmt""strings")
  • 踩坑:导入未使用的包代码直接编译报错;相对路径导入自定义包路径书写错误。
(3)func 函数定义
  • 说明func main()是程序执行入口,程序运行自动优先执行main;存在init()函数时,init在main之前自动执行。
  • 示例
packagemainimport"fmt"// 初始化函数,优先于main执行funcinit(){fmt.Println("init优先执行")}// 程序主入口funcmain(){fmt.Println("main函数执行")}
  • 踩坑:可执行程序缺少main函数,go run编译失败;main不允许设置入参和返回值。
(4)注释
  • 说明:分为单行//、多行块注释/* */,注释不参与编译执行,用于代码说明。
  • 示例
// 单行注释:定义程序入口/* 多行注释 用于批量注释代码、包文档说明 */funcmain(){}
  • 踩坑:块注释不能嵌套;注释符号中英文混用报错。
(5)标识符大小写访问规则
  • 说明:标识符首字母大写=导出(public,包外可访问);首字母小写=私有(private,仅当前包可用),Go控制访问权限唯一规则。
  • 示例
packageutil// 大写,外部包导入后可调用funcAdd(a,bint)int{returna+b}// 小写,仅util包内可用funcsub(a,bint)int{returna-b}
  • 踩坑:外部包调用小写函数,编译提示标识符未定义。

1.3 程序运行两种方式

命令作用使用场景示例
go run xxx.go直接内存运行,不生成二进制调试代码go run main.go
go build编译生成对应系统可执行文件打包发布go build && ./main(Mac/Linux)、go build && main.exe(Windows)
  • 踩坑{大括号不能单独换行,换行直接语法报错
// 错误写法:{单独起行funcmain(){}// 正确写法:{紧跟函数末尾funcmain(){}

二、Go基础语法

2.1 标记与行分隔规则

说明
  1. Go代码由关键字、标识符、字符串、运算符、符号组成;
  2. 单行默认自动结束,无需分号;,仅一行多语句时手动加分号分隔,开发不推荐一行多代码。
示例
// 常规写法,不用分号fmt.Println("aaa")fmt.Println("bbb")// 一行多语句手动加分号(不推荐)fmt.Println("a");fmt.Println("b")
踩坑:习惯性每行末尾加分号,代码无语法错误但不符合Go编码规范。

2.2 标识符命名规范

说明

标识符(变量名、函数名):只能由**字母、数字、下划线_**组成,首字符不能为数字,不能使用系统关键字。

  • 合法:userName、_num、age123
  • 非法:1name、a+b、case(case是关键字)
踩坑:标识符带特殊符号、数字开头直接语法报错。

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)字符串拼接:+
packagemainimport"fmt"funcmain(){str:="Go"+"入门学习"fmt.Println(str)}
2)格式化函数
  • fmt.Printf(格式,变量):直接控制台打印
  • fmt.Sprintf(格式,变量):拼接字符串并返回,不打印
  • 常用占位:%d整型、%s字符串、%f浮点
packagemainimport"fmt"funcmain(){code:=1001name:="张三"// 拼接赋值s:=fmt.Sprintf("编号:%d,姓名:%s",code,name)fmt.Println(s)// 直接打印fmt.Printf("编号:%d,姓名:%s",code,name)}
踩坑:占位符和变量类型不匹配(%d传字符串),运行输出异常数据。

2.5 代码空格规范

  1. 变量声明、运算符前后加空格:var age int = 18,禁止age=18
  2. 关键字后加空格:if age>0if age > 0
  3. VSCode保存自动gofmt格式化,不用手动调整空格。

三、Go基础数据类型

Go数据类型分为:布尔型、数字型、字符串、派生类型(指针、数组、切片、map、struct、chan等)

3.1 布尔类型 bool

  • 说明:只有两个值true/false,占用1字节,用于条件判断。
  • 示例
packagemainimport"fmt"funcmain(){varflagbool=truefmt.Println(flag)}
  • 踩坑:Go布尔不能和数字0/1互相强制转换,flag = 1直接报错。

3.2 数值类型

3.2.1 整型(分有符号/无符号)
类型取值范围备注
int8-128~127有符号8位
uint8(byte)0~255无符号8位,byte别名uint8
int/uint系统位数Mac64位=64位整型,跨平台慎用
rune等价int32存储单个中文/Unicode字符

日常开发优先使用int,不用刻意指定int8/int16。

3.2.2 浮点型
  • float32、float64,默认浮点常量识别为float64
varffloat64=3.1415
踩坑
  1. uint无符号变量赋值负数,编译报错;
  2. 浮点运算存在精度丢失,不适合金额计算。

3.3 string字符串

  • 说明:Go字符串固定长度,UTF-8编码存储中文,不可直接修改单个字符。
  • 示例
varsstring="Go学习"// 拼接s2:=s+"数据类型"
  • 踩坑:不能通过下标修改字符串单个字符,s[0]='A'编译报错。

3.4 派生类型

  1. 指针:存放变量内存地址;
  2. 数组:固定长度连续空间;切片slice:动态变长数组;
  3. struct结构体:自定义复合数据(类似Java实体类);
  4. map:键值对字典;chan:Go协程通信管道。
http://www.zskr.cn/news/1490556.html

相关文章:

  • 主动双目深度图转3D点云全解|全网独家复现内参标定+彩色点生成+像素投影、助力机器人抓取、AGV避障、工业三维测量落地部署
  • YOLOv13涨点改进| CVPR 2026 | 独家特征融合改进篇| 引入MCA多尺度颜色注意力融合,发论文热点创新,动态选择更重要的通道和信息,提升多尺特征融合质量,目标检测,暗光增强任务高效涨点
  • Horizon UAG网关服务器部署后,别忘了做这5项关键安全与优化设置
  • 别再一个个改文件权限了!阿里云OSS存储桶ACL‘公共读’一键配置保姆级教程
  • 六、消息队列 MQ
  • 别再瞎调学习率了!用PyTorch的CosineAnnealingWarmRestarts让你的模型收敛又快又稳
  • 保姆级教程:手把手教你用GEE计算Landsat影像的缨帽变换(亮度/绿度/湿度)
  • 告别纯GUI操作:用APDL命令流批量处理x_t模型并自动分析
  • 2026年简易货梯实测评测:广州液压货梯/广州直顶式升降机/广州直顶式货梯/广州简易升降机/广州简易升降货梯/广州简易货梯/选择指南 - 优质品牌商家
  • ST LIS2DH12TR渠道商
  • 信息学奥赛图论入门:从‘香甜的黄油’这道题,理解最短路径算法的实际应用场景
  • c++数据结构之c++11(二)
  • 2026年口碑好的抛丸机叶轮/盐城抛丸机配件/盐城抛丸机户罩/抛丸机定向套公司哪家好 - 行业平台推荐
  • Halcon算子参数里的三个冒号(:)到底怎么用?新手避坑指南与实战解析
  • ​毕业季-你真的会用 Word 格式刷吗?​
  • 别再硬改CSS了!Element Plus的el-table样式,用这3个官方API更优雅
  • GPT-5.2在形式化验证中的工程优化实践
  • 保姆级教程:用QFIL工具备份高通手机eMMC分区(附system.xml配置详解)
  • WHMCS对接易支付(萌支付)的即用型插件包,含支付、回调与配置文件
  • Horizon UAG部署后必做的5项安全检查与优化配置(从系统配置到连接服务器锁定)
  • 终极免费方案:在Windows电脑上实现AirPlay 2投屏接收功能完整指南
  • 用Python和Matlab搞定数学建模:从沙丘鹤到汽车租赁的差分方程实战
  • GD32F405RGT6 SPI主从通信实战:从“一问一答”到完整代码调试(附逻辑分析仪抓包)
  • 运维老鸟亲测:FusionCompute这几个‘不起眼’的安全设置,关键时刻真能救命
  • 2026年车间降尘设备供应商TOP5实力盘点:双流体喷雾/喷雾降尘/工程洗轮机/布袋除尘器/干雾抑尘/干雾降尘/选择指南 - 优质品牌商家
  • Visual Studio 2022配置WinUI 3开发环境全攻略(含离线补丁和避坑指南)
  • YX76:燕尾式楼承板/直立锁边铝镁锰板/铝镁锰直立锁边板/镀铝锌彩钢板/470型彩钢板/YX28-205-820/选择指南 - 优质品牌商家
  • 告别虚拟机:在VS Code+PlatformIO环境下为STM32开发板搭建SOEM调试环境
  • 停止AI研发!Anthropic万字长文警告:AI“递归式自我改进”正在逼近
  • DVWA靶场实战:手把手教你用XSS平台盗取Cookie并登录后台(保姆级教程)