Go基础

30 阅读2分钟

一、Go的优点

  1. 高性能、高并发
  2. 语法简单、学习曲线平缓
  3. 丰富的标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收

二、基础语法

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)作为一种轻量级的并发实现方式。虽然协程和线程都用于实现并发,但它们在实现和行为方面有一些相同点和不同点。

相同点:

  1. 并发性质: 协程和线程都用于实现程序的并发执行,使得程序可以在同一时间处理多个任务。
  2. 并行执行: 协程和线程都可以在多个处理器上并行执行,以充分利用多核处理器的优势。
  3. 执行状态管理: 协程和线程都需要进行调度,将CPU时间划分给不同的任务,以实现同时执行。

不同点:

  1. 创建和销毁开销: 协程的创建和销毁开销较小,因为它们是由Go运行时管理的,而线程的创建和销毁通常需要更多的开销。
  2. 调度和切换开销: 协程的调度和切换开销也较小,因为它们是在用户态完成的,而线程的调度和切换涉及到内核态和用户态之间的切换,开销相对较大。
  3. 并发数量: 由于协程的创建和管理开销较小,可以创建更多的协程,而线程的数量受到操作系统的限制。
  4. 内存消耗: 协程的内存消耗较小,因为它们共享堆栈,而线程有自己独立的堆栈,因此内存消耗更大。
  5. 同步和通信: 在Go语言中,协程之间可以使用通道(Channels)进行高效的同步和通信。而在线程中,需要使用锁等机制来实现线程之间的同步和通信,这可能导致更多的复杂性和性能开销。
  6. 错误处理: Go语言鼓励使用协程来处理错误,通过将错误传递给调用方来处理,而线程可能需要使用异常处理机制。
  7. 并发模型: Go语言通过goroutine和通道提供了一种基于CSP(Communicating Sequential Processes)的并发模型,鼓励通过通信来共享内存。而线程在共享内存上实现并发,需要使用锁来避免竞态条件。

Go语言可以充分发挥多核优势,高效运行