第07讲 Go结构体与变量命名说明
视频时长: 约11分钟 核心内容: Go语言在大公司的应用、Go程序三段式结构、命名规则、变量声明方式
一、Go语言在大公司的应用
老师在课前介绍了使用Go语言的主要公司,帮助大家理解Go的定位:
1.1 国内公司
| 公司 | 使用场景 |
|---|---|
| B站(哔哩哔哩) | 弹幕系统10万QPS级接口,Go的GC压力小,适合高性能场景 |
| 字节跳动 | 高并发业务 |
| 去哪儿 | 后端服务 |
| 百度 | 部分服务 |
1.2 国外公司
| 公司 | 说明 |
|---|---|
| Go语言的创建者 | |
| Uber(优步) | 高并发打车服务 |
| Netflix(奈飞) | 视频流媒体服务 |
1.3 B站案例详解
老师特别提到了B站的Go使用情况:
- B站最早用Go做二次开发,使用的是Gin框架
- B站后来自研了框架(BGO)
- 弹幕接口是10万QPS级别的
- Go的GC(垃圾回收)压力小,特别适合高性能、高并发的应用
- B站后来还研发了内部通用标准框架
老师总结: Go语言主要用于大流量、高并发的应用场景。
二、Go程序的三段式结构
老师将Go程序的结构总结为三个部分:
TEXT
┌─────────────────────────────┐
│ 第一部分:包声明(package) │ ← 声明该文件属于哪个包
├─────────────────────────────┤
│ 第二部分:导入依赖(import) │ ← 导入需要的包
├─────────────────────────────┤
│ 第三部分:代码实现 │ ← 变量、常量、函数、类型等
│ - 普通函数 │
│ - main函数 │
│ - type类型定义(结构体等) │
│ - var变量声明 │
│ - const常量声明 │
│ - func函数定义 │
└─────────────────────────────┘
示例
Go
package main // 第一部分:包声明
import "fmt" // 第二部分:导入依赖
// 第三部分:代码实现
var name string // 变量声明
const PI = 3.14 // 常量声明
type User struct { // 类型定义
Name string
Age int
}
func main() { // main函数
fmt.Println("Hello")
}
func sayHello() { // 普通函数
fmt.Println("Hi")
}
老师强调: 声明语句的顺序无关紧要,可以先写函数再写变量。不像Java那样上来就要先写一堆类、接口、抽象类。
三、Go命名规则
3.1 基本规则
| 规则 | 说明 |
|---|---|
| 必须以字母或下划线开头 | 不能用数字开头 |
| 区分大小写 | Name 和 name 是不同的标识符 |
| 可用字符 | 字母、数字、下划线 |
3.2 命名规范对比
| 语言 | 命名风格 | 示例 |
|---|---|---|
| C/C++ | 优先下划线分割 | user_name、get_user_info |
| Go | 驼峰命名(CamelCase) | userName、getUserInfo |
| Java | 驼峰命名 | userName、getUserInfo |
老师说明: Go的命名方式与Java类似,习惯使用驼峰命名,而不是C/C++中的下划线分割。当名字由多个单词组成时,使用大小写分割而不是下划线。
3.3 Go关键字
老师在视频中提到的Go关键字包括:
TEXT
var // 变量声明
const // 常量声明
type // 类型定义(如结构体)
func // 函数定义(function的缩写)
func就是function的缩写type用于修饰类型定义,比如定义结构体时需要用type关键字
四、Go与Java的简洁性对比
老师在视频中做了一个生动的比喻来对比Go和Java:
| 对比项 | Java | Go |
|---|---|---|
| 上手难度 | 上来就要写类、接口、抽象类 | 直接写包声明、函数即可 |
| 代码量 | 多 | 少 |
| 学习曲线 | 陡峭 | 平缓 |
| 老师比喻 | "像吃饭要加碗,流程复杂" | "刚好就能吃饭,而且吃得也挺香" |
老师原话总结: Go比Java简单多了,这也是它火的原因之一。
五、变量声明方式
5.1 标准声明(var关键字)
Go
var 变量名 类型 = 值
// 示例
var name string = "张三"
var age int = 20
5.2 简短变量声明(:=)
Go
变量名 := 值
// 示例
name := "张三"
age := 20
简短变量的特点:
- 变量类型由表达式自动推导
- 简洁、灵活
- 广泛用于大部分局部变量的声明和初始化
5.3 两种方式的适用场景
| 方式 | 适用场景 |
|---|---|
:=(简短声明) |
大部分局部变量的声明和初始化 |
var(标准声明) |
需要显式指定类型,或变量稍后会被重新赋值、初始值不重要的情况 |
六、本讲小结
| 要点 | 内容 |
|---|---|
| Go定位 | 高性能、高并发的后端开发语言 |
| 大厂使用 | B站、字节跳动、百度、Google、Uber、Netflix |
| 程序结构 | 包声明 → 导入依赖 → 代码实现 |
| 命名规则 | 字母/下划线开头,区分大小写,驼峰命名 |
| 声明关键字 | var(变量)、const(常量)、type(类型)、func(函数) |
| 变量声明 | 标准方式 var name type = value,简短方式 name := value |
下节预告: 老师在视频结尾提到,下一讲将讲解Go的指针。