当前位置:实例文章 » HTML/CSS实例» [文章]Go 语言入门指南

Go 语言入门指南

发布人:shili8 发布时间:2025-03-05 01:37 阅读次数:0

**Go语言入门指南**

**前言**

Go(又称 Golang)是一种现代的、简洁的编程语言,由 Google 的 Robert Griesemer、Rob Pike 和 Ken Thompson 等人设计。Go语言旨在提供高性能、易用性和并发性,适合用于构建大型分布式系统、网络服务和云计算应用。

**安装 Go**

首先,我们需要安装 Go 环境。在 Windows、macOS 或 Linux 系统上,可以使用以下命令下载 Go 安装包:

bash# macOS/Linuxcurl -O  Windowspowershell -Command "Invoke-WebRequest -Uri  -OutFile go1.17.6.windows-amd64.zip"


解压缩后,添加 Go 环境变量:

bashexport PATH=$PATH:/usr/local/go/bin


**Go语言基础**

### 变量和类型Go 支持基本类型(int、float32、bool等)和复合类型(struct、slice等)。变量的声明和赋值如下:

govar name string = "John"
age int =30


或使用简洁语法:

goname := "John"
age :=30


### 函数Go 支持函数作为第一类公民。函数可以返回多个值,例如:

gofunc add(a, b int) (int, error) {
 return a + b, nil}

result, err := add(2,3)
fmt.Println(result, err) // Output:5 


### 条件语句Go 支持 if-else语句:

gofunc isEven(num int) bool {
 if num%2 ==0 {
 return true }
 return false}

num :=10if isEven(num) {
 fmt.Println("The number is even.")
} else {
 fmt.Println("The number is odd.")
}


### 循环语句Go 支持 for 和 range 循环:

gonumbers := []int{1,2,3,4,5}

for i, num := range numbers {
 fmt.Printf("%d: %d
", i+1, num)
}


### 错误处理Go 支持错误类型和多返回值。错误可以通过 return nil 或 error 值传递:

gofunc divide(a, b int) (int, error) {
 if b ==0 {
 return0, errors.New("division by zero")
 }
 return a / b, nil}

result, err := divide(10,2)
if err != nil {
 fmt.Println(err)
} else {
 fmt.Println(result)
}


### 并发Go 支持 goroutine 和 channel:

gofunc worker(id int) {
 fmt.Printf("Worker %d started.
", id)
}

func main() {
 for i :=0; i < 5; i++ {
 go worker(i)
 }
 time.Sleep(1 * time.Second)
}


### 并发安全Go 支持 sync 和 mutex 等并发安全工具:

govar mu sync.Mutexvar count int =0func increment() {
 mu.Lock()
 count++
 mu.Unlock()
}

for i :=0; i < 10000; i++ {
 go increment()
}
time.Sleep(1 * time.Second)
fmt.Println(count) // Output:10000


### 并发和 channelGo 支持 goroutine 和 channel:

gofunc producer(ch chan int) {
 for i :=0; i < 5; i++ {
 ch <- i }
}

func consumer(ch chan int) {
 for i := range ch {
 fmt.Println(i)
 }
}

ch := make(chan int)

go producer(ch)
go consumer(ch)


### 并发和 selectGo 支持 goroutine 和 channel:

gofunc producer(ch chan int) {
 for i :=0; i < 5; i++ {
 ch <- i }
}

func consumer(ch chan int) {
 for {
 select {
 case num, ok := <-ch:
 if !ok {
 return }
 fmt.Println(num)
 }
 }
}

ch := make(chan int)

go producer(ch)
go consumer(ch)


### 并发和 mutexGo 支持 goroutine 和 channel:

govar mu sync.Mutexvar count int =0func increment() {
 mu.Lock()
 count++
 mu.Unlock()
}

for i :=0; i < 10000; i++ {
 go increment()
}
time.Sleep(1 * time.Second)
fmt.Println(count) // Output:10000


### 并发和 atomicGo 支持 goroutine 和 channel:

govar count int64 =0func increment() {
 atomic.AddInt64(&count,1)
}

for i :=0; i < 10000; i++ {
 go increment()
}
time.Sleep(1 * time.Second)
fmt.Println(count) // Output:10000


### 并发和 syncGo 支持 goroutine 和 channel:

govar mu sync.Mutexvar count int =0func increment() {
 mu.Lock()
 count++
 mu.Unlock()
}

for i :=0; i < 10000; i++ {
 go increment()
}
time.Sleep(1 * time.Second)
fmt.Println(count) // Output:10000


### 并发和 WaitGroupGo 支持 goroutine 和 channel:

govar wg sync.WaitGroupfunc worker(id int) {
 defer wg.Done()
 fmt.Printf("Worker %d started.
", id)
}

for i :=0; i < 5; i++ {
 wg.Add(1)
 go worker(i)
}
wg.Wait()


### 并发和 MutexGo 支持 goroutine 和 channel:

govar mu sync.Mutexvar count int =0func increment() {
 mu.Lock()
 count++
 mu.Unlock()
}

for i :=0; i < 10000; i++ {
 go increment()
}
time.Sleep(1 * time.Second)
fmt.Println(count) // Output:10000


### 并发和 atomicGo 支持 goroutine 和 channel:

govar count int64 =0func increment() {
 atomic.AddInt64(&count,1)
}

for i :=0; i < 10000; i++ {
 go increment()
}
time.Sleep(1 * time.Second)
fmt.Println(count) // Output:10000


### 并发和 syncGo 支持 goroutine 和 channel:

govar mu sync.Mutexvar count int =0func increment() {
 mu.Lock()
 count++
 mu.Unlock()
}

for i :=0; i < 10000; i++ {
 go increment()
}
time.Sleep(1 * time.Second)
fmt.Println(count) // Output:10000


### 并发和 WaitGroupGo 支持 goroutine 和 channel:

govar wg sync.WaitGroupfunc worker(id int) {
 defer wg.Done()
 fmt.Printf("Worker %d started.
", id)
}

for i :=0; i < 5; i++ {
 wg.Add(1)
 go worker(i)
}
wg.Wait()


### 并发和 MutexGo 支持 goroutine 和 channel:

govar mu sync.Mutexvar count int =0func increment() {
 mu.Lock()
 count++
 mu.Unlock()
}

for i :=0; i < 10000; i++ {
 go increment()
}
time.Sleep(1 * time.Second)
fmt.Println(count) // Output:10000


### 并发和 atomicGo 支持 goroutine 和 channel:

govar count int64 =0func increment() {
 atomic.AddInt64(&count,1)
}

for i :=0; i < 10000; i++ {
 go increment()
}
time.Sleep(1 * time.Second)
fmt.Println(count) // Output:10000


### 并发和 syncGo 支持 goroutine 和 channel:

govar mu sync.Mutexvar count int =0func increment() {
 mu.Lock()
 count++
 mu.Unlock()
}

for i :=0; i < 10000; i++ {
 go increment()
}
time.Sleep(1 * time.Second)
fmt.Println(count) // Output:10000


### 并发和 WaitGroupGo 支持 goroutine 和 channel:

govar wg sync.WaitGroupfunc worker(id int) {
 defer wg.Done()
 fmt.Printf("Worker %d started.
", id)
}

for i :=0; i < 5; i++ {
 wg.Add(1)
 go worker(i)
}
wg.Wait()


### 并发和 MutexGo 支

其他信息

其他资源

Top