目录
命名方式
go变量、常量、自定义类型、包、函数的命名方式需遵循以下规则
1. 首字符可以是任意Unicode字符或者下划线
2. 首字符之外的部分可以是Unicode字符、下划线或数字(也就是说除了数字不能当首字符其他的字符都可以)
3. 名字的长度没有限制
* 不要在名字中使用汉字
关键字
break default func interface select case defer go map struct chan else goto package switch const if range type continue for import return fallthrough var
保留字
常量
true false iota nil
数据类型
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
运算符
算数运算符
运算符 | 描述 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
关系运算符
运算符 | 描述 |
---|---|
== | 检查两个值是否相等,相等返回true,不相等返回false |
!= | 检查两个值是否不相等,不相等返回true,相等返回false |
> | 检查左边值是否大于右边值,是返回true,否返回false |
>= | 检查左边值是否大于等于右边值,是返回true,否返回false |
< | 检查左边值是否小于右边值,是返回true,否返回false |
<= | 检查左边值是否小于等于右边值,是返回true,否返回false |
逻辑运算符
运算符 | 描述 |
---|---|
&& | 逻辑AND运算符。如果两边的条件都是true,则为true,否则为false |
|| | 逻辑OR运算符。如果两边的条件有一个为true,则为true,否则为false,如果前面的条件已经为true,后面的不再参与运算 |
! | 逻辑NOT运算符。如果条件为true,则为false,否则为true |
位运算符
运算符 | 描述 |
---|---|
& | 参与运算的两数的二进制相与(相同位的都是1结果就为1) |
| | 参与运算的两数的二进制相或(相同位有一个为1结果就为1) |
^ | 参与运算的两数的二进制相异或,相同位不同时结果为1,作为一元运算符时表示按位取反,符号位也跟着变 |
<< | 左移N位就是乘以2的N次方。a<<b是把a的二进制位数集体左移b位,高位丢弃,低位补0 |
>> | 右移N位就是除以2的N次方。a>>b是把a的二进制位数集体右移b位。根据计算机的不同,有符号数使用算数右移,无符号数必须使用逻辑右移(算数右移:高位补最高有效位的值,低位丢弃。逻辑右移:高位补0,低位丢弃) |
赋值运算符
运算符 | 描述 |
---|---|
= | 简单的赋值运算符,将右边的表达式的值赋值给左边 |
+= | 相加后再赋值,例如 a+=5,表示 a = a + 5 |
-= | 相减后再赋值 |
*= | 相乘后再赋值 |
/= | 相除后再赋值 |
%= | 求余后再赋值 |
<<= | 左移后赋值 |
>>= | 右移后赋值 |
&= | 按位与后赋值 |
|= | 按位或后赋值 |
^= | 按位异或后赋值 |
变量类型
类型 | go变量类型 | fmt输出 |
---|---|---|
整型 | int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 | %d |
浮点型 | float32 float64 | %f (默认6位小数) %.2f (设置显示2 位小数) %e (1.000e+n显示) %g (1e+n显示) |
复数 | complex128 complex64 | %v |
布尔型 | bool | %t |
指针 | uintptr | %d (十进制) %p (十六进制) |
引用 | map slice channel | %v |
字节 | byte | %d |
任意字符 | rune | %d |
字符串 | string | %s |
错误 | error | %v |
变量,关键字 var
如果声明后未显式初始化,数值型系统默认初始化为0,字符串默认初始化为空字符串,布尔型默认初始化为false,引用类型、函数、指针、接口默认初始化为nil。
定义变量
var a string = "abc" // var 声明变量所使用的关键字,a 表示 自己起的变量名称,string 表示变量类型为字符串,= 后面的值为变量值
var a,b int = 1,2 // 一行代码定义多个变量
var a,b = "abc",1 // 一行代码定义多个不同类型的变量
var a = "abc" // 没有指定变量类型,通过变量值推断变量类型
函数内部的变量(非全局变量)可以通过 := 声明并初始化
a := 3 // var a int = 3
匿名变量,使用下划线表示,匿名变量不占命名空间,不会分配内存,因此可以重复使用
_= 1+2
常量,关键字 const
常量在定义时必须赋值,常量的值在程序运行期间不会改变
定义常量
const ABC string = "abc" // 定义一个常量,常量名推荐全部为大写
const( // 定义多个常量
A = 1
B = 2
)
const( // 定义多个常量,值简写
A = 13
B // 值 = 13,沿用上一行的值
C // 值 = 13,沿用上一行的值
)
const( // 定义枚举类型常量
A = iota // A = 0
B // B = 1 // 假如这里用不到 1 那么可以把B定义成匿名常量 使用_
C // C = 2
)
字面量
没有变量名,只有变量值。在java中表示魔法值
fmt.Println("Hello Go!") // "Hello Go!"就是字面量
变量作用域
全局变量:在函数外面定义的变量
变量命名或函数或结构体命名以大写字母开头的,表示所有地方都可以访问,访问之前导包即可 // 类比java的 public
变量命名或函数或结构体以小写字母开头的,表示只能在当前的 package 内访问 // 类比java的protected
var(
A = 1 // public
a = 2 // protected
)
局部变量:在函数内部定义的变量
局部变量只能在函数内访问,命名可以和外部变量重名,就近原则,值以局部变量的为准
注释
单行注释使用 //
// 我是单行注释
多行注释使用 /**/
/**
我是多行注释
*/
go doc 注释文档
使用命令 go doc 包名,查看包的注释
创建 .go 文件
.go 文件内容的第一行 必须是 package 包名
可执行文件 的第一行必须是 package main,并且要有一个且只有一个 main 函数
golang语言中 文件名没有作用,golang中没有类,包名才有作用
引入从项目名到包名,例如:import "项目名/包名"
创建Go应用程序
go mod init 自定义程序名
启动Go应用程序
go run go文件.go
全套教程地址:Golang全套教程