第1章:Go启航 - 快速入门指南
- 作者
- Name
- 青玉白露
- Github
- @white0dew
- Modified on
- Reading time
- 4 分钟
阅读:.. 评论:..
在这个章节中,我们将深入探索Go的程序结构,包括包声明、导入包、函数、变量、语句和表达式以及注释等各个部分。
通过详细解析和配合实例代码,让你对Go程序的基本结构有个全面的了解。
1.1 包声明
在Go语言中,每个文件都属于一个包,而一个程序可能由多个包组成。包是Go语言组织代码的基本单位,有助于代码的封装和重用。
package main
上述代码中的package main
声明了一个名为main
的包。main
包是一个特殊的包,它是Go程序的入口点。一个可执行的Go程序必须包含一个**main**
包。
1.2 导入包
当你需要使用外部库(即其他包提供的功能)时,你需要使用import
关键字导入这些包。
import "fmt"
fmt
包含有格式化IO(输入/输出)的函数。
如果你需要导入多个包,可以这样做:
import ( "fmt" "math" )
1.3 函数
函数是Go程序的执行单元。每个函数都有一个函数名、参数列表和返回类型。main
函数是程序的入口点,它不接受任何参数,也不返回任何值。
func add(a int, b int) int { return a + b }
上述add
函数接受两个整型参数a
和b
,返回它们的和。这里的int
表明函数返回一个整型值。
1.4 变量
在Go语言中,你可以使用var
关键字来声明一个或多个变量。
var name string var age int
Go也允许你在声明变量时对其进行初始化:
var name, city = "Alice", "Wonderland"
1.5 语句和表达式
语句是执行动作的指令,而表达式是计算出值的组合。Go支持多种类型的语句,如条件语句、循环语句等。
if age > 18 { fmt.Println("Adult") } else { fmt.Println("Minor") }
1.6 注释
注释是对代码的解释和说明,Go支持单行注释和多行注释。
// 这是单行注释 /* 这是多行注释 可以跨越多行 */
1.7 控制流程
在Go中编写逻辑时,控制流程语句控制着代码的执行顺序。
最常见的控制流程语句有if
、switch
、for
等。
if 语句
if score := 90; score >= 60 { fmt.Println("及格了!") } else { fmt.Println("不及格,请继续努力。") }
switch 语句
switch day := 4; day { case 1: fmt.Println("星期一") case 2: fmt.Println("星期二") case 3: fmt.Println("星期三") default: fmt.Println("是周末吗?") }
for 循环
for i := 1; i <= 10; i++ { fmt.Println("计数器的值为:", i) }
1.8 数据类型与结构
在Go中,理解内置数据类型和结构对于编写高质量的代码至关重要。
Go提供了基本数据类型,如整型、浮点型、布尔型、字符串等,并支持复杂的数据结构如数组、切片、映射和结构体。
数组
var a [5]int a[0] = 1 fmt.Println(a) // 输出:[1 0 0 0 0]
切片
s := []int{1, 2, 3} s = append(s, 4) fmt.Println(s) // 输出:[1 2 3 4]
映射
m := make(map[string]int) m["Alice"] = 23 fmt.Println(m) // 输出:map[Alice:23]
结构体
type Person struct { Name string Age int } bob := Person{"Bob", 30} fmt.Println(bob) // 输出:{Bob 30}
1.9 接口与方法
Go语言的接口是一组方法签名的集合。
当一个类型定义了接口中的所有方法,我们说这个类型实现了接口。
type Greeter interface { Greet() string } type EnglishSpeaker struct{} func (e EnglishSpeaker) Greet() string { return "Hello!" } func greetSomeone(g Greeter) { fmt.Println(g.Greet()) } func main() { var englishSpeaker EnglishSpeaker greetSomeone(englishSpeaker) }
在上面的例子中,EnglishSpeaker
类型实现了Greeter
接口的Greet
方法,因此可以传递给greetSomeone
函数。
1.10 并发编程
Go的并发编程是通过goroutines和channels来实现的,这使得并行任务和通信变得简洁高效。
goroutines
func printNumbers() { for i := 0; i < 5; i++ { fmt.Printf("%d ", i) } } func main() { go printNumbers() fmt.Println("这是在主goroutine中") time.Sleep(100 * time.Millisecond) // 延时以等待goroutine完成 }
channels
ch := make(chan int) go func() { ch <- 123 // 将123发送到channel }() val := <-ch // 从channel接收值 fmt.Println(val) // 输出:123
在这个简单的例子中,我们创建了一个goroutine,并使用channel与它通信。
Over