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

【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
}

相关文章:

【Go语言基础】基本语法

文章目录 一、 程序基本结构二. 词法标记&#xff08;Lexical Tokens&#xff09;&#xff08;编译器解析单元&#xff09;三、 标识符规则&#xff08;变量命名规则&#xff09;四、注释与行分隔符五、关键字与预定义标识符六、 代码示例解析 以下是基于文档的Go语言基础语法总…...

工作流引擎-18-开源审批流项目之 plumdo-work 工作流,表单,报表结合的多模块系统

工作流引擎系列 工作流引擎-00-流程引擎概览 工作流引擎-01-Activiti 是领先的轻量级、以 Java 为中心的开源 BPMN 引擎&#xff0c;支持现实世界的流程自动化需求 工作流引擎-02-BPM OA ERP 区别和联系 工作流引擎-03-聊一聊流程引擎 工作流引擎-04-流程引擎 activiti 优…...

【虚拟机版本号】如果忘记了版本号,这样查找版本号

【虚拟机版本号】如果忘记了版本号&#xff0c;这样查找版本号 找到虚拟机的文件&#xff1a; 然后用记事本打开这个&#xff1a;.vmx文件 然后搜索.version...

std::conditional_t一个用法

例子摘自&#xff1a; 《mastering-the-c17-stl-make-full-use-of-the-standard-library-components-in-c17.pdf》 struct list_node {int data;list_node *next; };template<bool Const> struct list_of_ints_iterator {friend class list_of_ints;friend class list…...

Java高效批量读取Redis数据:原理、方案与实战案例

Java高效批量读取Redis数据&#xff1a;原理、方案与实战案例 在电商大促场景中&#xff0c;某平台需要实时展示用户购物车数据&#xff0c;面对每秒10万的请求&#xff0c;传统单次读取Redis的方式导致响应延迟高达500ms。通过批量读取优化&#xff0c;最终将延迟降至20ms以内…...

基于RK3568的多网多串电力能源1U机箱解决方案,支持B码,4G等

基于RK3568的多网多串电力能源1U机箱解决方案&#xff0c;结合B码对时和4G通信能力&#xff0c;可满足电力自动化、能源监控等场景的高可靠性需求。核心特性如下&#xff1a; 一、硬件配置 ‌处理器平台‌ 搭载RK3568四核Cortex-A55处理器&#xff0c;主频1.8GHz-2.0GHz&#…...

面试题:Java多线程并发

继承 Thread 类 Thread 类本质上是实现了 Runnable 接口的一个实例&#xff0c;代表一个线程的实例。启动线程的唯一方法就是通过 Thread 类的 start()实例方法。start()方法是一个 native 方法&#xff0c;它将启动一个新线程&#xff0c;并执行 run()方法。 public class M…...

2006-2020年各省用水总量数据

2006-2020年各省用水总量数据 1、时间&#xff1a;2006-2020年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区名称、年份、用水总量 4、范围&#xff1a;31省 5、指标说明&#xff1a;用水总量是指一个国家或地区在一定时期内&#xff…...

舵机在弹簧刀无人机中的作用是什么?

随着俄乌冲突的越发激烈&#xff0c;美国国防部宣布向乌克兰提供“弹簧刀”600型无人机。对于美国接连不断向乌克兰输送武器的做法&#xff0c;俄罗斯方面已经多次指责美国是在“火上浇油”&#xff0c;从而使俄乌冲突持续下去。 那么&#xff0c;弹簧刀究竟是一款怎样的无人机…...

c++ openssl 使用 DES(数据加密标准)进行加密和解密的基本操作

使用 DES&#xff08;数据加密标准&#xff09;进行加密和解密的基本操作&#xff0c;重点展示了 ECB 和 CBC 模式&#xff0c;并且通过篡改密文的方式来进行攻击。下面是对每个部分的详细解析。 1. 结构体 Slip struct Slip {char from[16] { 0 }; // 交易的发起者&#x…...

Git忽略规则.gitignore不生效解决

我在gitlab中新建了一个项目仓库&#xff0c;先把项目文件目录绑定到仓库&#xff0c;并全部文件都上传到了仓库中。 然后又从别的项目复制了忽略文件配置过来&#xff0c;怎么搞他都不能生效忽略我不要提交仓库的文件。 从网上查到说在本地仓库目录中&#xff0c;打开命…...

Excel高级函数使用FILTER、UNIQUE、INDEX

IFERROR(INDEX(UNIQUE(FILTER(明细表副本!B:B,(明细表副本!I:I>$B$1)*(明细表副本!I:I<$B$2)*(明细表副本!C:C<>$B$3)*(明细表副本!V:V$B$4))),ROW(明细表副本!B2)),"")解读 一、FILTER 过滤 FILTER(过滤列&#xff0c;过滤条件过滤条件&#xff09; 过滤…...

6月5日day45

Tensorboard使用介绍 知识点回顾&#xff1a; tensorboard的发展历史和原理tensorboard的常见操作tensorboard在cifar上的实战&#xff1a;MLP和CNN模型 效果展示如下&#xff0c;很适合拿去组会汇报撑页数&#xff1a; 作业&#xff1a;对resnet18在cifar10上采用微调策略下&a…...

Linux 系统 rsyslog 配置

Linux 系统 rsyslog 配置指南 rsyslog 是 Linux 系统的下一代日志处理系统&#xff0c;功能强大且高效。以下是从基础到高级的全面配置指南&#xff1a; 1. 安装与基础配置 安装 rsyslog # Ubuntu/Debian sudo apt update sudo apt install rsyslog# CentOS/RHEL sudo yum …...

基于rpc框架Dubbo实现的微服务转发实战

目录 rpc微服务模块 导入依赖 配置dubbo 注解 开启Dubbo Dubbo的使用 特殊点 并没有使用 Reference 注入 微服务之间调用 可以选用Http 也可以Dubbo 我们 Dubbo 的实现需要一个注册中心 我作为一个服务的提供者 我需要把我的服务注册到注册中心去 调用方需要注册中心…...

matlab基于GUI实现水果识别

基于GUI实现水果识别系统&#xff0c;限一个图片内存在一种水果 图像处理是一种利用计算机分析图像以达到预期结果的技术。图像处理一般指数字图像处理&#xff0c;而数字图像指由工业相机、摄像机、扫描仪等设备捕捉到的二维数组&#xff0c;数组中的元素称为像素&#xff0c…...

视频爬虫的Python库

1. 请求与网络库 最基础的 HTTP 请求库&#xff0c;用于发送 GET/POST 请求获取网页内容。 示例&#xff1a;获取视频页面 HTML 或 API 响应。 import requests response requests.get(https://example.com/video/123) aiohttp 异步 HTTP 请求库&#xff0c;适合大规模并发下…...

深度学习N2周:构建词典

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 本周任务&#xff1a;使用N1周的.txt文件构建词典&#xff0c;停用词请自定义 1.导入数据 from torchtext.vocab import build_vocab_from_iterator from co…...

Qt多线程访问同一个数据库源码分享(基于Sqlite实现)

Qt多线程访问同一个数据库源码分享&#xff08;基于Sqlite实现&#xff09; 一、实现难点线程安全问题死锁风险连接管理问题数据一致性性能瓶颈跨线程信号槽最佳实践建议 二、源码分享三、测试1、新建一个多线程类2、开启多线程插入数据 一、实现难点 多线程环境下多个线程同时…...

多类别分类中的宏平均和加权平均

前言 在处理多类别分类问题时&#xff0c;宏平均&#xff08;Macro-average&#xff09;和加权平均&#xff08;Weighted-average&#xff09;是评估模型性能时常用的两种聚合指标。它们都能将每个类别的独立指标&#xff08;如精确率、召回率、F1分数等&#xff09;整合成一个…...

电子电路:什么是扩散电容?

PN结的电容效应主要有两种:势垒电容和扩散电容。势垒电容是由于耗尽层宽度变化引起的,而扩散电容可能和载流子的扩散过程有关。扩散电容通常出现在正向偏置的情况下,因为这时候多子注入到对方区域,形成电荷的积累。 当PN结正向偏置时,电子从N区注入到P区,空穴从P区注入到…...

贪心算法应用:装箱问题(FFD问题)详解

贪心算法应用&#xff1a;装箱问题(FFD问题)详解 1. 装箱问题概述 装箱问题(Bin Packing Problem)是计算机科学和运筹学中的一个经典组合优化问题。问题的描述如下&#xff1a; 给定一组物品&#xff0c;每个物品有一定的体积&#xff0c;以及若干容量相同的箱子&#xff0c…...

机器学习的数学基础:假设检验

假设检验 默认以错误率为性能度量&#xff0c;错误率由下式给出&#xff1a; E ( f , D ) ∫ x ∼ D I I ( f ( x ) ≠ y ) p ( x ) d x E(f,\mathcal{D})\int_{\boldsymbol{x}\sim \mathcal{D}}\mathbb{II}(f(\boldsymbol{x})\ne y )p(\boldsymbol{x})\text{d}\boldsymbol{x…...

余氯传感器在智慧水务系统中如何实现IoT集成

现代余氯传感器&#xff08;关键词&#xff1a;智能余氯监测、物联网水质传感器、LoRaWAN水监测&#xff09;通过&#xff08;关键词&#xff1a;Modbus RTU、4-20mA输出、NB-IoT传输&#xff09;协议与SCADA系统对接&#xff0c;实现&#xff08;关键词&#xff1a;远程氯浓度…...

操作系统学习(九)——存储系统

一、存储系统 在操作系统中&#xff0c;存储系统&#xff08;Storage System&#xff09; 是计算机系统的核心组成部分之一&#xff0c;它负责数据的存储、组织、管理和访问。 它不仅包括物理设备&#xff08;如内存、硬盘&#xff09;&#xff0c;还包括操作系统提供的逻辑抽…...

服务器安装软件失败或缺依赖怎么办?

服务器在安装软件时失败或提示缺少依赖&#xff0c;是运维中非常常见的问题。这个问题大多发生在 Linux 云服务器环境&#xff0c;原因和解决方法也有共性。以下是详细说明和解决建议&#xff1a; &#x1f9e0; 一、常见原因分析 问题类型描述&#x1f50c; 软件源不可用服务器…...

linux nm/objdump/readelf/addr2line命令详解

我们在开发过程中通过需要反汇编查看问题&#xff0c;那么我们这里使用rk3568开发板来举例nm/objdump/readelf/addr2line 分析动态库和可执行文件以及.o文件。 1&#xff0c;我们举例nm/objdump/readelf/addr2line解析linux 内核文件vmlinux &#xff08;1&#xff09;,addr2…...

006网上订餐系统技术解析:打造高效便捷的餐饮服务平台

网上订餐系统技术解析&#xff1a;打造高效便捷的餐饮服务平台 在数字化生活方式普及的当下&#xff0c;网上订餐系统成为连接餐饮商家与消费者的重要桥梁。该系统以菜品分类、订单管理等模块为核心&#xff0c;通过前台展示与后台录入的分工协作&#xff0c;为管理员和会员提…...

[10-2]MPU6050简介 江协科技学习笔记(22个知识点)

1 2 3 欧拉角是描述三维空间中刚体或坐标系之间相对旋转的一种方法。它们由三个角度组成&#xff0c;通常表示为&#xff1a; • 偏航角&#xff08;Yaw&#xff09;&#xff1a;绕垂直轴&#xff08;通常是z轴&#xff09;的旋转&#xff0c;表示偏航方向的变化。 • 俯仰角&a…...

基于行为分析的下一代安全防御指南

一、技术原理演进 从特征匹配到行为建模传统防火墙依赖特征库匹配&#xff08;如病毒指纹&#xff09;&#xff0c;而行为分析技术通过建立用户/设备/应用的正常行为基线&#xff08;基线构建误差&#xff1c;0.8%&#xff09;&#xff0c;利用隐马尔可夫模型检测异常。微软Az…...