Go语言的基础语法

1.关键字和标识符

关键字是被语言赋予特殊含义的单词,在编写程序中并不能将关键字作为标识符使用。Go语言的关键字只有25个

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

这些关键字先自行观看其他相关文章,本章节暂不解释其关键字的含义

标识符是对各种变量、方法、函数等命名时使用的字符序列,标识符由若干个英文字母、数字和下划线组成,且第一个字符必须是英文字母标识符的命名规则如下:

1.由英文字母、数字和下划线组成

2.不能以数字开头

3.Go语言严格区分大小写

4.标识符不能包含空格

5.不能以系统保留的关键字作为标识符

6.标识符的命名要尽量以简短而有意义的词

7.不能和标准库中的包名重复

2.变量和常量

2.1变量

Go语言变量的命名遵从标识符的基本规则,变量声明有3种格式,分别是标准格式、批量格式和简短格式

标准格式:var 变量名 变量格式

批量格式:var{

变量名1 变量格式

变量名2 变量格式

变量名3, 变量名4 变量格式

}

简短格式:变量名 := 变量名

变量名1,变量名2 := 变量名1,变量名2

简短格式被广泛用于大部分的局部变量的声明和初始化,标准格式的声明语句用于需要显式指定变量类型的地方。在变量声明时也可以赋予变量一个初始化值。格式如下:

var 变量名 变量类型 = 初始化值

2.2 常量

常量是一个简单值的标识符,在程序运行时它的值不会被改变。常量的数据类型只可以是布尔型、数字型和字符串型,定义标准格式如下:

const 常量名 [常量类型] = 值

在Go语言中,编译器可以根据变量和常量的值来判断其类型,定义格式可以分为显式类型定义和隐式类型定义

显式类型定义:const 常量名[常量类型] = 值

隐式类型定义:const 常量名 = 值

常量声明语句和变量类似,可支持批量格式声明,格式如下:

const {

常量名1 = 值

常量名2 = 值

常量名3 = 值

}

提示:在Go语言中,所声明的常量可以不使用,但所声明的变量必须使用,否则程序在编译的过程会报错

3.数据类型

数据类型的出现是为了把数据分成内存大小不同的数据,Go语言数据类型分为基本数据类型和组合数据类型

Go语言数据类型

|--------|--------------|-----------------------|
| 分类 | 数据类型 | 解释 |
| 基本数据类型 | 布尔型 | 布尔型的值只能是true和false |
| 基本数据类型 | 数字型 | 整型、浮点型、复数型 |
| 基本数据类型 | 字符串型(String) | 字符串就是一串固定长度的字符拼接的字符序列 |
| 组合数据类型 | 派生类型 | 指针类型 |
| 组合数据类型 | 派生类型 | 数组类型 |
| 组合数据类型 | 派生类型 | 结构体类型 |
| 组合数据类型 | 派生类型 | 通道类型 |
| 组合数据类型 | 派生类型 | 函数类型 |
| 组合数据类型 | 派生类型 | 切片类型 |
| 组合数据类型 | 派生类型 | 接口类型 |
| 组合数据类型 | 派生类型 | 集合类型 |

基本的数字型又分为整型和浮点型,整型以及浮点型根据其存储空间以及是否带有符号又有更细的划分,如以下图所示:

|------------|----------------------------------------------------------------------------|
| 类型 | 解释 |
| uint8 | 无符号8位整型。取值范围:0~255 (2^8) |
| uint16 | 无符号16位整型。取值范围:0~65535 (2^16) |
| uint32 | 无符号32位整型。取值范围:0~4294967295 (2^32) |
| uint64 | 无符号64位整型。取值范围:0~255 (2^64) |
| int8 | 有符号8位整型。取值范围:-128 (-2^8)~127 (2^7 -1) |
| int16 | 有符号16位整型。取值范围:-32768 (-2^15)~32767 (2^15 -1) |
| int32 | 有符号32位整型。取值范围:-2147483648 (-2^31)~2147483647 (2^31-1) |
| int64 | 有符号64位整型。取值范围:-9223372036854775808 (-2^63)~9223372036854775807 (2^63-1) |
| float32 | IEEE---754 32位浮点型数据 |
| float64 | IEEE---754 64位浮点型数据 |
| complex64 | 32位实数和虚数 |
| complex128 | 64位实数和虚数 |
| byte | 类似uint8 |
| rune | 类似int32 |
| uintptr | 无符号整型,用于存放一个指针 |

4.运算符

运算符用于程序运行时执行变量、常量间的数字或逻辑运算,Go语言内置的运算符包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符

算术运算符

算术运算符要求两个运算符的类型必须相同且同为基本数据类型,其中自增和自减两个运算符在Go语言可以构成单独的语句

运算符 描述 示例 结果
+ 加法 5 + 3 8
- 减法 7 - 2 5
* 乘法 4 * 6 24
/ 除法 10 / 2 5
% 取模(取余数) 10 % 3 1
** 幂运算 2 ** 3 8
// 整除(向下取整) 7 // 2 3

关系运算符

关系运算符设计到两个值的比较,返回的结果是布尔值

运算符 描述 示例(假设 a = 5b = 3
== 等于 a == b 结果为 false
!= 不等于 a != b 结果为 true
> 大于 a > b 结果为 true
< 小于 a < b 结果为 false
>= 大于或等于 a >= b 结果为 true
<= 小于或等于 a <= b 结果为 false

逻辑运算符

逻辑运算符用来判断变量或值之间的逻辑关系,判断的结果是布尔值

运算符 名称 描述 示例(编程语言通用)
&& 逻辑与 当两个操作数都为真时返回真,否则返回假 A && B
` ` 逻辑或
! 逻辑非 对操作数的布尔值取反(真变假,假变真) !A
^ 逻辑异或 当两个操作数的布尔值不同时返回真,相同时返回假 A ^ B
& 按位与 对操作数的每一位执行与操作(通常用于位运算) A & B
` ` 按位或 对操作数的每一位执行或操作(通常用于位运算)
~ 按位非 对操作数的每一位取反(通常用于位运算) ~A

真值表(逻辑与、逻辑或、逻辑非)

以下表格展示了逻辑运算符的真值表:

A B A && B A || B !A A ^ B
true true true true false false
true false false true false true
false true false true true true
false false false false true false

按位运算符示例(假设 8 位二进制数)

以下表格展示按位运算符的具体行为:

A (二进制) B (二进制) A & B A | B ~A A ^ B
00001111 00110011 00000011 00111111 11110000 00111100

不同编程语言的逻辑运算符

部分语言可能使用不同的符号表示逻辑运算:

  • Python : andornot
  • JavaScript/C/C++/Java : &&||!
  • SQL : ANDORNOT
  • Shell脚本 : -a(与)、-o(或)

注意事项

  • 逻辑运算符通常支持短路求值(如 A && B 中若 A 为假,则不会计算 B)。
  • 按位运算符直接操作二进制位,需注意数据类型和位数。
  • 异或运算在某些语言中可能无专用符号,需通过组合运算实现。

位运算符

位运算符以一个二进制上的值作为操作数,提供不同的位运算符可以实现清零、判断等操作

运算符 名称 描述 示例(假设 A=60,B=13)
& 按位与 对两个数的二进制位逐位进行与运算,只有两个位都为1时结果位才为1 A & B = 12 (0000 1100)
` ` 按位或 对两个数的二进制位逐位进行或运算,只要有一个位为1时结果位就为1
^ 按位异或 对两个数的二进制位逐位进行异或运算,当两个位不同时结果位为1 A ^ B = 49 (0011 0001)
~ 按位取反 对一个数的二进制位逐位取反,0变1,1变0 ~A = -61 (1100 0011)
<< 左移 将一个数的二进制位全部左移若干位,右侧补0 A << 2 = 240 (1111 0000)
>> 右移 将一个数的二进制位全部右移若干位,左侧补符号位(算术右移) A >> 2 = 15 (0000 1111)

补充说明

  • 位运算符直接操作整数的二进制表示,效率较高,常用于底层编程或优化场景。
  • 左移和右移运算符在不同编程语言中的行为可能略有差异,特别是对于有符号数的处理。
  • 按位取反的结果取决于整数的位数和表示方式(如补码表示)。

赋值运算符

赋值运算符用于变量赋值,其运算顺序是从有到左

运算符 描述 示例(假设 x = 5
= 简单赋值 x = 3x 值为 3
+= 加后赋值 x += 2x 值为 7(x = x + 2
-= 减后赋值 x -= 1x 值为 4(x = x - 1
*= 乘后赋值 x *= 3x 值为 15(x = x * 3
/= 除后赋值 x /= 2x 值为 2.5(x = x / 2
%= 取模后赋值 x %= 2x 值为 1(x = x % 2
**= 幂运算后赋值 x **= 2x 值为 25(x = x ** 2
//= 整除后赋值 x //= 2x 值为 2(x = x // 2
&= 按位与后赋值 x &= 3x 值为 1(x = x & 3
` =` 按位或后赋值
^= 按位异或后赋值 x ^= 3x 值为 6(x = x ^ 3
<<= 左移位后赋值 x <<= 1x 值为 10(x = x << 1
>>= 右移位后赋值 x >>= 1x 值为 2(x = x >> 1

注意事项

  • 表格中的示例基于初始值 x = 5,实际结果可能因语言或数据类型不同而略有差异。
  • 复合赋值运算符(如 +=)通常能提高代码简洁性和执行效率。

指针运算符

运算符 示例 说明
& &x 取变量内存地址
* *p 解引用指针

通道运算符

运算符 示例 说明
<- ch <- x 发送数据到通道
<- x = <-ch 从通道接收数据

其他特殊运算符

运算符 示例 说明
... func(x ...int) 可变参数
: x := 10 短变量声明
<- close(ch) 关闭通道

运算符优先级说明

Go语言运算符优先级从高到低部分关键顺序:

  1. * / % << >> & &^
  2. + - | ^
  3. == != < <= > >=
  4. &&
  5. ||
相关推荐
小陈工2 小时前
Python Web开发入门(八):用户认证系统实现,给你的应用加上安全锁
开发语言·前端·数据库·python·安全·django·sqlite
铅笔侠_小龙虾2 小时前
Miniconda + Poetry 实战
开发语言·python
jwt7939279372 小时前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
深海空无一人2 小时前
python基础
开发语言·python
大尚来也2 小时前
Java多线程实战:从基础创建到返回值获取的深度解析
开发语言
qqacj2 小时前
SpringBoot【十一】mybatis-plus实现多数据源配置,开箱即用!
spring boot·后端·mybatis
沐知全栈开发2 小时前
jQuery 后代选择器详解
开发语言
liuyao_xianhui2 小时前
优选算法_岛屿的最大面积_floodfill算法_C++
java·开发语言·数据结构·c++·算法·leetcode·链表
xvhao20132 小时前
C++freopen的用法
开发语言·c++