Skip to content

❤️ 介绍

Go 是一种静态类型的语言,有与 C 类似的语法 :

  • Go 具有内置的并发性
  • 自动垃圾回收
  • 函数多返回值
  • 匿名函数和闭包

❤️ 标识符、关键字

  • 下划线 _ :表示空白标识符,在变量声明时,如果使用下划线作为标识符,表示忽略该变量,例如
go
// 这表示将 5 赋值给变量 a。而第二个值 10 被赋值给下划线,也就是被丢弃,不会保存在变量中供后续使用
a, _ = 5, 10
  • 导出标识符的条件 :导出的标识符名称的第一个字符应为 Unicode 大写字母(A - Z)
  • 所有的关键字 :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

❤️ 数据类型

基本类型 :数字、布尔值、字符串

  • 【Numbers】
    • 整数
      • int:in 和 uint 都包含相同的大小,无论是 32 位还是 64 位
      • int8 / byte:8 位有符号整数
      • int16:16 位有符号整数
      • int32 / rune:32 位有符号整数
      • int64:64 位有符号整数
      • uint:in 和 uint 都包含相同的大小,无论是 32 位还是 64 位
      • uint8:8 位无符号整数
      • uint16:16 位无符号整数
      • uint32:32 位无符号整数
      • uint64:64 位无符号整数
      • uintptr:它是无符号整数类型。它的宽度未定义,但是可以容纳指针值的所有
    • 浮点数
      • float32 :32 位 IEEE 754 浮点数
      • float64(默认):64 位 IEEE 754 浮点数
    • 复数
      • complex64 :包含 float32 作为实数和虚数分量的复数
      • complex128 :包含 float64 作为实数和虚数分量的复数
  • 【Booleans】
    • true
    • false
  • 【Strings】
go
// 整数
var X uint8 = 225 
fmt.Println(X+1, X) 

// 复数
var a complex128 = complex(6, 2) 
var b complex64 = complex(9, 2) 
fmt.Println(a) 
fmt.Println(b)

聚合类型 :数组、结构

引用类型 :指针、切片、map 集合、函数、Channel

接口类型

自定义类型

go
type myBool bool // 自定义类型 myBool,底层是 bool,但与 bool 不兼容

💛 类型转换

go 不支持自动类型转换,对于类型转换,必须执行显式转换

go
var nhooo1 int = 845

// 显式类型转换
var nhooo2 float64 = float64(nhooo1)
var nhooo3 int64 = int64(nhooo1)
var nhooo4 uint = uint(nhooo1)

❤️ 运算符

  • 算术运算符
go
result1 := p + q   // 加法
result2 := p - q   // 减法
result3 := p * q   // 乘法
result4 := p / q   // 除法
result5 := p % q   // 求模
  • 关系运算符
go
result1 := p == q  // 相等
result2 := p != q  // 不等
result3 := p < q   // 小于
result4 := p > q   // 大于
result5 := p >= q  // 大于等于
result6 := p <= q  // 小于等于
  • 逻辑运算符
go
&&  // 与
||  // 或
!   // 非
  • 按位运算符
go
result1 := p & q   // AND
result2 := p | q   // OR
result3 := p ^ q   // XOR
result4 := p << 1  // 左移
result5 := p >> 1  // 右移
result6 := p &^ q  // AND NOT
  • 赋值运算符
go
p = q     // 赋值
p += q    // 加赋值
p -= q    // 减赋值
p *= q    // 乘赋值
p /= q    // 除赋值
p %= q    // 求模赋值
  • 杂项运算符
go
&   // 获取变量地址
*   // 指针解引用
<-  // 从通道接收值

❤️ 变量、常量

💛 创建

创建变量

  • 使用 var 声明变量
go
var variable_name int = 20  // 完整写法,显式类型和初始化
var myvariable1 = 20   // 类型由编译器自动推断
var myvariable1 int  // 不初始化,默认为零值(数字为0,布尔为false,字符串为"")

var myvariable1, myvariable2, myvariable3 int = 2, 454, 67
var myvariable1, myvariable2, myvariable3 = 2, "GFG", 67.56
  • 使用 :=(短变量声明)
    • 不能不初始化
    • 不能用于声明全局变量
go
myvariable1 := 39
myvariable1, myvariable2, myvariable3 := 800, 34.7, 56.9

创建常量 :常量一旦定义就不能更改,使用 const 声明,不能使用 :=

go
const GFG = "nhooo"

💛 作用域

  • 变量可以直接定义在 package 下
go
package main

var GlobalVar = 100  // 全局变量,大写,其他包可以访问

func main() {
    var local = 10  // 局部变量
}
  • 变量首字母大写=导出,小写=包内可见
go
var GlobalVar = 100 // 大写,其他包可以访问
  • 变量可以在内层重新定义
go
x := 1
{
    x := 2 // 新的 x,遮蔽外层
    fmt.Println(x) // 输出 2
}
fmt.Println(x) // 输出 1

❤️ 注意事项

  • Go 文件的命名采用下划线方式
  • Go 不允许在同一个包内,有两个相同名字的导出函数