Go 语言入门指南:基础语法和常用特性解析| 豆包MarsCode AI 刷题

76 阅读5分钟

一、Go 语言简介

       Go 语言(也称为 Golang)是 Google 开发的一种开源编程语言。它具有高效、简洁、并发性强等诸多优点,适用于网络编程、云计算、分布式系统等众多领域。

(一)安装 Go 语言环境 

       下载安装包 可以从 Go 官方网站(golang.org/dl/)下载适合您操作… Windows 系统,下载.msi 文件;对于 Linux 系统,下载.tar.gz 文件。 安装和配置环境变量 在 Windows 系统中,运行安装程序并按照提示完成安装。安装完成后,需要设置GOROOT环境变量,其值为 Go 语言的安装目录,例如C:\Go。同时将%GOROOT%\bin添加到PATH环境变量中,这样就可以在命令行中使用 Go 相关

的工具。 在 Linux 系统中,解压下载的.tar.gz文件到合适的目录,如/usr/local/go。然后在~/.bashrc或~/.zshrc等配置文件中添加export GOROOT = /usr/local/go和export PATH=PATH:PATH:GOROOT/bin,保存后执行source ~/.bashrc(或对应的配置文件加载命令)来使配置生效。

二、基础语法 

(一)变量声明与赋值 


1.变量声明

Go 语言有多种变量声明方式。最基本的方式是使用var关键字。例如,声明一个整数变量x:

     var x int

也可以同时声明多个变量,如:

     var a, b int

Go 语言还支持短变量声明方式,使用:=操作符。例如:

     y := 10

这种方式只能在函数内部使用,并且变量必须是未声明过的新变量。它会自动根据赋值的类型来推断变量的类型。

(二)数据类型 

基本数据类型 

1.整数类型:Go 语言有多种整数类型,包括int(有符号整数,其大小根据操作系统的位数而定,在 32 位系统中是 32 位,在 64 位系统中是 64 位)、int8(8 位有符号整数,范围是 - 128 到 127)、int16(16 位有符号整数)、int32(32 位有符号整数)、int64(64 位有符号整数)、uint(无符号整数,大小也根据操作系统而定)、uint8(8 位无符号整数,范围是 0 到 255)等。 

2.浮点数类型:有float32和float64。float32的精度较低,float64精度较高,通常用于更精确的数值计算。

 var f1 float32 = 3.14 var f2 float64 = 3.1415926 

3.布尔类型:bool类型只有两个值,true和false。

 var flag bool = true

4. 字符类型:Go 语言中的字符类型是rune,它实际上是int32的别名,用于表示一个 Unicode 字符。

var c rune = 'A'

 5.复合数据类型

 数组:数组是具有固定长度的同类型元素的集合。例如,声明一个包含 5 个整数的数组: go Copy var arr [5]int 可以通过索引来访问数组元素,如arr[0]表示数组的第一个元素。数组的长度是其类型的一部分,所以[5]int和[6]int是不同的类型。 

切片:切片是对数组的一个引用,它的长度可以动态变化。创建切片的一种方式是通过make函数。例如: go Copy s := make([]int, 3) 这个切片s的初始长度为 3,它可以通过append函数来添加元素,如s = append(s, 4)。 

结构体:结构体是一种自定义的数据类型,它可以包含多个不同类型的字段。

     type Person struct {
       Name string
       Age  int
     }

(三)控制流

1.条件语句

     x := 10
     if x > 5 {
       fmt.Println("x is greater than 5")
     } else {
       fmt.Println("x is less than or equal to 5")
     }

还可以有if - else if - else的多级判断形式。例如:

     score := 80
     if score >= 90 {
       fmt.Println("A")
     } else if score >= 80 {
       fmt.Println("B")
     } else if score >= 60 {
       fmt.Println("C")
     } else {
       fmt.Println("D")
     }

2.循环语句

     score := 80
     if score >= 90 {
       fmt.Println("A")
     } else if score >= 80 {
       fmt.Println("B")
     } else if score >= 60 {
       fmt.Println("C")
     } else {
       fmt.Println("D")
     }

range 循环:range用于遍历数组、切片、字符串等。例如,遍历一个切片:

     s := []int{1, 2, 3}
     for index, value := range s {
       fmt.Printf("Index: %d, Value: %d\n", index, value)
     }

三、常用特性

(一)函数 

函数定义 函数是 Go 语言中的基本构建块。一个简单的函数定义如下:

     func add(x int, y int) int {
       return x + y
     }

可以在函数定义中省略参数类型的重复声明,写成func add(x, y int) int。函数可以有多个返回值,例如:

     func divide(x, y int) (int, error) {
       if y == 0 {
         return 0, fmt.Errorf("除数不能为0")
       }
       return x / y, nil
     }

(二)并发编程

1.Go 协程(Goroutine)

Go 协程是 Go 语言中实现并发的轻量级线程。通过go关键字可以启动一个协程。例如:

     func printNumbers() {
       for i := 1; i <= 10; i++ {
         fmt.Println(i)
       }
     }
     func main() {
       go printNumbers()
       // 主协程可以继续执行其他任务
       for i := 1; i <= 5; i++ {
         fmt.Println("Main:", i)
       }
     }

在上面的例子中,printNumbers函数作为一个协程被启动,它和主协程(main函数所在的协程)会并发执行。

2.通道(Channel)

通道用于协程之间的通信和同步。通道可以是有类型的,例如chan int表示一个用于传递整数的通道。创建通道可以使用make函数,如ch := make(chan int)。 发送数据到通道使用<-操作符,如ch <- 5,接收通道中的数据也使用<-操作符,如x := <-ch。通道可以是无缓冲的(同步通道)或者有缓冲的。无缓冲通道会在发送和接收操作时进行同步,而有缓冲通道可以在缓冲未满或未空时异步操作。