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

【Go语言基础】基本语法

文章目录

    • 一、 程序基本结构
    • 二. 词法标记(Lexical Tokens)(编译器解析单元)
    • 三、 标识符规则(变量命名规则)
    • 四、注释与行分隔符
    • 五、关键字与预定义标识符
    • 六、 代码示例解析

以下是基于文档的Go语言基础语法总结,结合词法标记、标识符规则和代码结构:

一、 程序基本结构

Go程序由以下部分组成(按顺序):

package main        // 必须的包声明(main包是可执行程序入口)
import "fmt"        // 导入外部包
const PI = 3.14     // 常量定义
var name = "fly"    // 全局变量
type newType int    // 类型声明
type student struct{} // 结构体
type reader interface{} // 接口
func main() { ... }  // 程序入口函数(必须)

 

二. 词法标记(Lexical Tokens)(编译器解析单元)

编译器将代码解析为最小的词法单元,例如:

func main() {fmt.Println("hello")
}
// 对应的词法标记:
// func, main, (, {, fmt, ., Println, (, "hello", ), }, )

常见词法类型

  • 关键字(如 func, if, for
  • 标识符(变量名、函数名)
  • 操作符+, =, :=
  • 分隔符(, {, ;
  • 字面量"hello", 123
  • 特殊标记EOF, COMMENT, ILLEGAL

 

三、 标识符规则(变量命名规则)

标识符用于命名变量、类型等,必须遵循:

  1. 首字符:必须是字母(含Unicode)或下划线 _
  2. 后续字符:可以是字母、数字或下划线
  3. 不能是关键字(如 for, if, var
  4. 区分大小写Namename 是不同标识符)

合法示例

username, _temp, 中文, user1, MMXXX

非法示例

1user      // 数字开头
for        // 关键字
m*m        // 包含非法字符
中 午       // 包含空格

 

四、注释与行分隔符

  • 行注释// 这是行注释
  • 块注释/* 这是块注释 */
  • 行分隔符:Go自动在换行处添加 ;,但同一行写多条语句时需手动添加:
    fmt.Println("a"); fmt.Println("b")  // 不推荐,go fmt会自动拆分
    

五、关键字与预定义标识符

Go语言有25个关键字,不能用作标识符:

break    case     chan     const    continue
default  defer    else     fallthrough  for
func     go       goto     if       import
interface  map    package  range    return
select   struct   switch   type     var

预定义标识符(建议避免使用):

true, false, nil, iota
int, int8, int16, int32, int64
uint, uint8, uint16, uint32, uint64, uintptr
float32, float64, complex128, complex64
bool, byte, rune, string, error
make, len, cap, new, append, copy, close, delete
complex, real, imag, panic, recover

 

六、 代码示例解析

package main    // 包声明(必需)
import "fmt"    // 导入fmt包const PI = 3.14  // 常量(不可修改)
var name = "fly" // 全局变量// 自定义类型
type Celsius float64
type Person struct {Name stringAge  int
}// 函数定义
func main() {// 短变量声明(自动类型推断)message := "Hello, Go!"// 条件语句(无需括号)if len(message) > 5 {fmt.Println("Long message")}// 循环(只有for)for i := 0; i < 3; i++ {fmt.Println(i)}// 调用函数result := add(1, 2)fmt.Println(result)
}// 带参数和返回值的函数
func add(a, b int) int {return a + b
}
http://www.xdnf.cn/news/885295.html

相关文章:

  • python摆放花盆 2023年信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析
  • 【JavaEE】万字详解HTTP协议
  • LangChain 入门指南:基于 DeepSeek 模型构建对话流程(保姆级)
  • 今日科技热点速览
  • 【联网玩具】EN 18031欧盟网络安全认证
  • 数论~~~
  • 曼昆《经济学原理》(第9版)微观经济学第二章第一节作为科学家的经济学家
  • 西门子SCL之IF-ELSIF语句详解及应用(安全控制代码)
  • RDMA简介5之RoCE v2队列
  • 如何做好一份技术文档?(下篇)
  • Windows系统下Cursor与QWQ-32B大模型的本地部署及插件调用实现方法
  • OpenAI 即将推出 GPT-5:开启多模态、持续记忆对话新时代
  • MATLAB读取文件内容:Excel、CSV和TXT文件解析
  • 【C#】异步和多线程
  • 优化09-表连接
  • 各种排序算法的再整理
  • 【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
  • 命令行运行python程序报错 ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6
  • Cursor AI编程助手模型选择对了吗?
  • mysql跨库关联查询及视图创建
  • 机器学习——什么时候使用决策树
  • PostgreSQL 入门教程
  • 边缘计算应用实践心得
  • 防反接电路设计浅谈
  • 在使用一些不用驱动大电流的设备就可以用stm32的自己的上下拉但是本身上下拉不就是给iicspi这些他通信给信号的吗中怎么还跟驱动能力扯上了有什么场景嘛
  • Wireshark使用教程(含安装包和安装教程)
  • Kafka存储机制核心优势剖析
  • 数据库-MySQL
  • Ubuntu中常用的网络命令指南
  • 8.axios Http网络请求库(1)