一、Go的优点
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
二、基础语法
1.Helloword
package main
import (
"fmt'
)
func main( ) {
fmt. Println("hello world")
}
2.变量声明
var a = "initial"
varb,Cint=1,2
var d = true
var e float64
f := float32(e)
g :=a+ "foo"
3.if else
ifnum:=9;num<0{
fmt.Println(num, "is negative")
}elseifnum<10{
fmt.Println(num, "has 1 digit")
} else {
fmt .Println(num,"has multiple digits")
}
4.循环
for {
fmt.Println("loop")
break
}
forj:=7;j<9;j++{
fmt.Println(j)
}
三、Go语言中的并发
Go语言引入了协程(Goroutine)作为一种轻量级的并发实现方式。虽然协程和线程都用于实现并发,但它们在实现和行为方面有一些相同点和不同点。
相同点:
- 并发性质: 协程和线程都用于实现程序的并发执行,使得程序可以在同一时间处理多个任务。
- 并行执行: 协程和线程都可以在多个处理器上并行执行,以充分利用多核处理器的优势。
- 执行状态管理: 协程和线程都需要进行调度,将CPU时间划分给不同的任务,以实现同时执行。
不同点:
- 创建和销毁开销: 协程的创建和销毁开销较小,因为它们是由Go运行时管理的,而线程的创建和销毁通常需要更多的开销。
- 调度和切换开销: 协程的调度和切换开销也较小,因为它们是在用户态完成的,而线程的调度和切换涉及到内核态和用户态之间的切换,开销相对较大。
- 并发数量: 由于协程的创建和管理开销较小,可以创建更多的协程,而线程的数量受到操作系统的限制。
- 内存消耗: 协程的内存消耗较小,因为它们共享堆栈,而线程有自己独立的堆栈,因此内存消耗更大。
- 同步和通信: 在Go语言中,协程之间可以使用通道(Channels)进行高效的同步和通信。而在线程中,需要使用锁等机制来实现线程之间的同步和通信,这可能导致更多的复杂性和性能开销。
- 错误处理: Go语言鼓励使用协程来处理错误,通过将错误传递给调用方来处理,而线程可能需要使用异常处理机制。
- 并发模型: Go语言通过goroutine和通道提供了一种基于CSP(Communicating Sequential Processes)的并发模型,鼓励通过通信来共享内存。而线程在共享内存上实现并发,需要使用锁来避免竞态条件。
Go语言可以充分发挥多核优势,高效运行