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

88 阅读4分钟

Go语言基础语法和常用特性解析

1. 为什么需要Go语言

  1. 性能问题:一些高级编程语言可能在性能方面受到限制,因为它们的抽象层次较高,导致运行时性能不如低级语言。Go通过编译型语言的特性和并发性能优势来解决这个问题。
  2. 依赖管理:一些编程语言,尤其是C和C++,在管理依赖关系和外部库时可能面临复杂性。Go引入了Go module机制,用于更有效地管理依赖关系,解决了这个问题。
  3. 笨重:某些编程语言可能过于复杂,有大量的语法和特性,这可能使学习和使用变得困难。Go的设计目标之一是保持简洁和清晰,降低学习曲线。
  4. 垃圾回收和并行计算:对于一些系统编程语言,如C和C++,垃圾回收和并行计算等基础功能可能缺乏内置支持,需要开发者手动处理。Go通过内置垃圾回收和goroutine等机制来简化这些任务。
  5. 多核支持:在多核计算机上利用所有核心的能力是一项挑战。Go的goroutine和channel机制使并发编程变得更加容易,允许开发者有效地利用多核处理器。

2. Go语言的特征

  • 自动立即回收。
  • 更丰富的内置类型。
  • 函数多返回值。
  • 错误处理。
  • 匿名函数和闭包。
  • 类型和接口。
  • 并发编程。
  • 反射。
  • 语言交互性。
  • 泛型。Go在1.8支持泛型特性。

3. 搭建Go环境

  • 官网下载:golang.google.cn/dl/
  • 安装后终端输入go -version检查是否安装成功。

4. Hello World

创建main.go文件,编写下面内容:

package main

import (
    "fmt"
)

func main() {
    fmt.Println("hello world")
}

打开终端进入main.go所在文件目录,执行go build one.go 就可以编译go文件并生成一个可执行文件,运行即可。

image.png

5. Go的变量

5.1 变量

  • Go的基本类型
bool --布尔类型
int(32 or 64), int8, int16, int32, int64 --整形
uint(32 or 64), uint8(byte), uint16, uint32, uint64 --无符号整形
float32, float64 --浮点数
string  --字符串
complex64, complex128
array   -- 固定长度的数组
  • Go的复合数据类型
slice   -- 序列数组(最常用)
map     -- 映射
chan    -- 管道

5.2 变量的声明

声明变量语法: var 变量名 变量类型,例如:

var name string
var age int
var isOk bool

5.3 批量声明变量

var (
    a string
    b string
    c string
    d int
)

6. Go的控制流程

6.1 if语句

if 布尔表达式 {
  /* 在布尔表达式为 true 时执行 */
}

6.2 switch语句

switch var1 {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

6.3 for循环

Go 语言只有 for 循环这一种循环语句,for循环主要有以下三种形式:

  • 形式1(for i循环)
for init; condition; post { 
	
}
// 例子:
for i:=0;i<10;i++{
	
}
  • 形式2
n:=10
for n>0 { // 替代while(n>0){} 和 for (; n > 0;) {}
	n--
}
  • 形式3:for{} 相当于while(true){}for(;;){}
for {
	
}

6.4 range循环

for range循环在遍历容器或者数组时可以获得这些数据类型的索引,更方便编写易懂的代码:

for key, value := range myMap1 {
    myMap2[key] = value
}

7. 函数

7.1 函数的声明

函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。

func name(parameter-list) (result-list) {
    body
}

// 例子
func hypot(x, y float64) float64 {
    return math.Sqrt(x*x + y*y)
}

7.2 函数的返回值

与其他语言不同的是,Go语言的函数会返回一个error的值,这个值代表函数出错的数据信息。

8. 结构体

结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员。

type Employee struct {
    ID        int
    Name      string
    Address   string
}

var dilbert Employee

上面两个语句声明了一个叫Employee的命名的结构体类型,并且声明了一个Employee类型的变量dilbert

9. 数组

数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。

// 3个int类型的数组a
var a [3]int             
a := [...]int{1, 2, 3}

// 打印a的值和下标
for i, v := range a {
    fmt.Printf("%d %d\n", i, v)
}