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

发布时间:2026/6/9 3:57:14

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协程通信管道。

相关新闻