Go-新手速成-流程语句
发布人:shili8
发布时间:2025-01-24 15:55
阅读次数:0
**Go 新手速成指南**
**前言**
Go(又称 Golang)是一种现代的编程语言,设计用于构建高性能、可靠且易维护的系统。作为一名新手,了解 Go 的基本流程和语法是非常重要的。以下内容将为你提供一个快速入门指南。
**安装 Go**
首先,你需要在你的电脑上安装 Go。可以从官方网站下载 Go 的二进制包,并按照说明进行安装。
**Go 的基本概念**
### 包(package)
Go 中,所有的代码都必须放在一个包中。包是 Go 中最小的编译单位。每个包都有一个唯一的名称,可以通过 `go get` 命令来获取。
go// hello.gopackage mainimport "fmt"
func main() {
fmt.Println("Hello, World!")
}
### 函数(function)
Go 中,函数是最基本的执行单元。每个函数都有一个名称,可以通过 `func` 关键字来定义。
go// hello.gopackage mainimport "fmt"
func sayHello() {
fmt.Println("Hello, World!")
}
func main() {
sayHello()
}
### 变量(variable)
Go 中,变量是用来存储值的。每个变量都有一个名称,可以通过 `var` 关键字来定义。
go// hello.gopackage mainimport "fmt"
var name string = "John"
func main() {
fmt.Println(name)
}
### 类型(type)
Go 中,类型是用来描述值的性质的。每个类型都有一个名称,可以通过 `type` 关键字来定义。
go// hello.gopackage mainimport "fmt"
type Person struct {
name string age int}
func main() {
person := Person{
name: "John",
age:30,
}
fmt.Println(person.name)
}
### 控制结构(control structure)
Go 中,控制结构是用来控制程序流程的。每个控制结构都有一个名称,可以通过 `if`、`for`、`switch` 等关键字来定义。
go// hello.gopackage mainimport "fmt"
func main() {
if true {
fmt.Println("Hello, World!")
}
}
### 错误(error)
Go 中,错误是用来描述程序执行过程中的异常情况的。每个错误都有一个名称,可以通过 `error` 类型来定义。
go// hello.gopackage mainimport "fmt"
func divide(a int, b int) (int, error) {
if b ==0 {
return0, errors.New("division by zero")
}
return a / b, nil}
func main() {
result, err := divide(10,2)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(result)
}
}
### 并发(concurrency)
Go 中,并发是用来描述多个 goroutine 的执行过程的。每个 goroutine 都有一个名称,可以通过 `go` 关键字来定义。
go// hello.gopackage mainimport (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Hello, World!")
}
func main() {
go sayHello()
time.Sleep(1 * time.Second)
}
### 通道(channel)
Go 中,通道是用来描述 goroutine 之间的通信过程的。每个通道都有一个名称,可以通过 `chan` 关键字来定义。
go// hello.gopackage mainimport (
"fmt"
"time"
)
func sayHello(ch chan string) {
ch <- "Hello, World!"
}
func main() {
ch := make(chan string)
go sayHello(ch)
time.Sleep(1 * time.Second)
fmt.Println(<-ch)
}
### 协程(coroutine)
Go 中,协程是用来描述 goroutine 之间的通信过程的。每个协程都有一个名称,可以通过 `go` 关键字来定义。
go// hello.gopackage mainimport (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Hello, World!")
}
func main() {
go sayHello()
time.Sleep(1 * time.Second)
}
### goroutine(goroutine)
Go 中,goroutine 是用来描述多个线程的执行过程的。每个 goroutine 都有一个名称,可以通过 `go` 关键字来定义。
go// hello.gopackage mainimport (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Hello, World!")
}
func main() {
go sayHello()
time.Sleep(1 * time.Second)
}
### select(select)
Go 中,select 是用来描述 goroutine 之间的通信过程的。每个 select 都有一个名称,可以通过 `select` 关键字来定义。
go// hello.gopackage mainimport (
"fmt"
"time"
)
func sayHello(ch chan string) {
ch <- "Hello, World!"
}
func main() {
ch := make(chan string)
go sayHello(ch)
time.Sleep(1 * time.Second)
select {
case msg := <-ch:
fmt.Println(msg)
default:
fmt.Println("no message")
}
}
### defer(defer)
Go 中,defer 是用来描述函数执行过程中的延迟操作的。每个 defer 都有一个名称,可以通过 `defer` 关键字来定义。
go// hello.gopackage mainimport (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Hello, World!")
}
func main() {
defer func() {
fmt.Println("goodbye")
}()
sayHello()
}
### recover(recover)
Go 中,recover 是用来描述函数执行过程中的异常处理的。每个 recover 都有一个名称,可以通过 `recover` 关键字来定义。
go// hello.gopackage mainimport (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Hello, World!")
}
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("panic:", r)
}
}()
sayHello()
}
### panic(panic)
Go 中,panic 是用来描述函数执行过程中的异常情况的。每个 panic 都有一个名称,可以通过 `panic` 关键字来定义。
go// hello.gopackage mainimport (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Hello, World!")
}
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("panic:", r)
}
}()
panic("something wrong")
}
### runtime(runtime)
Go 中,runtime 是用来描述函数执行过程中的内存管理的。每个 runtime 都有一个名称,可以通过 `runtime` 类型来定义。
go// hello.gopackage mainimport (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Hello, World!")
}
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("panic:", r)
}
}()
runtime.GC()
}
### sync(sync)
Go 中,sync 是用来描述函数执行过程中的线程安全的。每个 sync 都有一个名称,可以通过 `sync` 类型来定义。
go// hello.gopackage mainimport (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Hello, World!")
}
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("panic:", r)
}
}()
sync.Mutex{}
}
### time(time)
Go 中,time 是用来描述函数执行过程中的时间管理的。每个 time 都有一个名称,可以通过 `time` 类型来定义。
go// hello.gopackage mainimport (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Hello, World!")
}
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("panic:", r)
}
}()
time.Sleep(1 * time.Second)
}
### math(math)
Go 中,math 是用来描述函数执行过程中的数学运算的。每个 math 都有一个名称,可以通过 `math` 类型来定义。
go// hello.gopackage mainimport (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Hello, World!")
}
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("panic:", r)
}
}()
math.Sin(1.0)
}
### errors(errors)
Go 中,errors 是用来描述函数执行过程

