如果你不是一个新手,那么,很容易理解标题的含义。每当我们学习一门新的语言都是从hello world 开始。这个很重要,可以了解哪些东西呢?
1. go的执行过程
2. 如何处理依赖
3. go代码的基本结构
1. 代码示例:
package main
import "fmt"
func main() {
fmt.Printf("Hello World")
}
2. 入口函数
- 和其他编程语言一样,入口函数的名字也是 main
- 无参数:
main
函数不能接受任何参数- 无返回值:
main
函数不能有返回值- 强制要求:这是 Go 语言的语法规则,违反会导致编译错误
- func 关键字表示 一个函数的开始,并且 函数名后面的 { 必须与函数名在同一行
3. 如何使用依赖
import 关键字告诉我们,你可以使用 fmt这个包里面的对外部包公开的方法,如示例里面的 Printf 。
这里值得注意的是什么是依赖包对外公开的方法,在go语言里面一个包里面可以包含多个go文件,每个go文件的 package 必须属于同一个包,其中,包名不一定与他们的目录名称一致,但我建议还好一致。
一、可见性规则
大写字母开头:公开的(Public),可被其他包访问。
小写字母开头:私有的(Private),仅在当前包内可见。
可见性基于包:同一包内的所有文件可以互相访问私有标识符
跨包访问限制:即使在子目录中,只要包名不同,也无法访问私有标识符
二、调用规则示例
假设存在两个包:main
和 demo:
// demo/demo.go
package demo
func PublicFunction() { // 公开函数
fmt.Println("Public function called")
privateFunction() // 内部可调用私有函数
}
func privateFunction() { // 私有函数
fmt.Println("Private function called")
}
// main.go
package main
import "demo"
func main() {
demo.PublicFunction() // 合法:调用公开函数
// demo.privateFunction() // 错误:无法访问私有函数
三、为什么这样设计?
- 简化访问控制:无需额外的
public/private
关键字,统一通过大小写区分。 - 强制模块化:鼓励将包作为最小的封装单元,而非单个文件。
- 减少命名冲突:外部包只能访问明确暴露的接口。
- 隐藏实现细节:将内部逻辑封装为私有函数,仅暴露必要的公开接口
4. 如何编译代码
# 切换到代码目录
cd /home/go/src/hello_world
# 编译
go build hello_world.go
# 运行
./hello_world
5. 如何运行代码
# 运行编译的结果上面已经提到了, 略。
# 只运行不编译
go run hello_world.go