Go学习-Go语言结构
Go语言结构
Go程序组成部分
- 包声明 (Package Declaration) :定义该文件属于哪个包。
- 引入包 (Import) :引入该文件需要使用的外部库或包。
- 函数 (Functions) :执行特定任务的代码块。
- 变量与常量 (Variables & Constants) :存储数据的容器。
- 语句与表达式 (Statements & Expressions) :具体的逻辑代码。
我们可以通过一个简单的Go程序实例来分析:
1 | // 1. 包声明:定义包名 |
核心结构:
包声明(Package)
每个Go文件的第一行非注释代码必须是包声明语句!
如果包名是main,则编译器会将该包编译为程序,而并非库
语法:
package <name>导入包(Import)
Go 语言有一个严格的规则:导入但未使用的包会导致编译错误。
语法:
import "package_name"或
1
2
3
4import (
"fmt"
"math"
)函数 (Functions)
func用来定义函数main()函数是程序的默认入口点,无参数构造,也无返回值
注释(Comments)
- 单行注释:使用
// - 多行注释:使用
/* ... */。
- 单行注释:使用
标识符与可见性(重要)
Go 语言通过首字母的大小写来决定变量、函数或常量的访问权限:
- 首字母大写(如
Println):表示 公有 (Public) ,可以被其他包调用。 - 首字母小写(如
myVar):表示 私有 (Private) ,仅在当前包内可见。
- 首字母大写(如
Go 语言的编码规范(语法特点)
Go 语言在结构上有几个非常鲜明的特征:
行分隔符(分号):
在 Go 中,你不需要在每一行语句末尾写分号
;。Go 编译器会自动在行尾添加分号。如果你把多个语句写在同一行,才需要用分号隔开(但不推荐这样做)。
大括号
{ }的位置:在 Go 中,左大括号
{必须与关键字(如func、if、for)在同一行。如果换行写左大括号,会导致编译错误。强制代码格式化:
Go 官方提供了一个工具
go fmt,它会自动统一所有人的代码风格(如缩进、空格等)。
额外思考:Go是面向对象的变成语言吗?
关于 Go 语言是否是面向对象(OOP)语言,Go 官方文档(FAQ)给出的回答非常经典:
“Yes and no.”(是,也不是。)
Go 拥有面向对象的特性(部分)
封装 Encapsulation
在传统的OOP语言中,往往使用类来实现封装(Java中的
class关键词)在Go中,使用结构体(
struct)来实现,同时采用可见性控制来控制访问控制。- 大写字母开头:包外可见(对应Java中的
public关键词) - 小写字母开头:仅包内可见(对应Java中的
private关键词)
- 大写字母开头:包外可见(对应Java中的
多态 Polymorphism & Interfaces
使用
interface同时:Go 的接口实现是隐式的。你不需要显式地写
implements。只要一个类型实现了接口中定义的所有方法,它就自动实现了该接口。这是 Go 处理多态最强大的地方
Go所丢失的面向对象的特征
类(class)
在Go中,不存在class类关键词。而结构体
struct仅包含数据,通过方法func独立定义通过一定方法与结构体绑定。继承
在Go中,不存在继承关系(类似于Java中的
class A extend B或者Python中Class A(B):构造方法
在Go中没有构造方法,通常通过普通函数来模拟构造。
Go的核心哲学:组合 (Composition)
虽然没有继承,但Go通过 结构体嵌套(Embedding) 实现了类似的效果
1 | type Animal struct { |



