logo

第1章:Go启航 - 快速入门指南

作者
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函数接受两个整型参数ab,返回它们的和。这里的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中编写逻辑时,控制流程语句控制着代码的执行顺序。

最常见的控制流程语句有ifswitchfor等。

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