我的青训营笔记-Go语言入门| 青训营

119 阅读4分钟

初学Go,记录我的学习历程和经验。

1. 安装与环境设置

开始学习Go语言的第一步是安装Go并设置开发环境。前往Go官方网站(golang.org/ )下载并安装适合操作系统的Go发行版本。安装完成后,配置你的系统环境变量(如GOPATH、GOBIN等),这将有助于管理Go代码和工程。 IDE可以使用Goland或Vscode。

2. Hello, World!

天才第一步,输出"Hello, World!"。在Go中,这段代码如下所示:

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

这段代码涵盖了Go语言的基本结构,包括包的声明、导入和函数的定义等元素。

3. 变量与基本类型

Go支持多种基本数据类型,如整数、浮点数、字符串和布尔值。

整数类型(Integers)

Go提供了不同大小的整数类型,可以根据需要选择适当的大小:

  • int:平台相关,通常为32位或64位整数。
  • int8:8位整数(-128 到 127)。
  • int16:16位整数(-32768 到 32767)。
  • int32:32位整数(-2147483648 到 2147483647)。
  • int64:64位整数(-9223372036854775808 到 9223372036854775807)。

此外,还有无符号整数类型:uintuint8uint16uint32uint64

浮点数类型(Floating-Point Numbers)

Go提供两种浮点数类型:float32(32位浮点数)和float64(64位浮点数)。这些类型用于表示带有小数点的数字。

复数类型(Complex Numbers)

Go提供了两种复数类型:complex64complex128,分别由float32float64组成的实部和虚部构成。

布尔类型(Boolean)

布尔类型只有两个可能的值:truefalse。在逻辑运算和条件语句中使用。

字符串类型(Strings)

Go使用双引号或反引号来定义字符串。字符串是不可变的序列,可以通过索引来访问其字符。

字符类型(Characters)

Go中的字符类型使用单引号来定义,通常表示一个Unicode码点。

char := 'A'

数组类型(Arrays)

数组是具有固定长度的数据序列,元素的类型必须相同。数组的长度是其类型的一部分。

var numbers [5]int

切片类型(Slices)

切片是动态数组,是基于数组的一种抽象。切片具有长度和容量,并且可以自动扩容。

var names []string

映射类型(Maps)

映射是键值对的集合,用于存储无序的数据。映射的键和值可以是任意类型。

var scores map[string]int

结构体类型(Structs)

结构体是一种自定义的复合数据类型,用于将不同类型的数据组合在一起。

type Person struct {
    FirstName string
    LastName  string
    Age       int
}

指针类型(Pointers)

指针存储了一个变量的内存地址,可以用于间接访问变量的值。

var x int
var ptr *int
ptr = &x

接口类型(Interfaces)

接口定义了一组方法的契约,任何类型只要实现了接口中的所有方法,就被认为实现了该接口。

type Shape interface {
    Area() float64
}

4. 控制流与循环

Go提供了常见的条件语句(if-else)和循环结构(for循环),以及switch语句用于多条件选择。这些结构在控制程序的流程时非常有用。

  • 注意:Go没有while关键字
if age >= 18 {
    fmt.Println("You are an adult.")
} else {
    fmt.Println("You are a minor.")
}

for i := 1; i <= 5; i++ {
    fmt.Println(i)
}

switch day {
    case "Monday":
        fmt.Println("Start of the workweek.")
    case "Friday":
        fmt.Println("End of the workweek.")
    default:
        fmt.Println("Another day.")
}

5. 函数与包

在Go中,函数是构建块之一,它们使你能够模块化你的代码。你可以定义自己的函数,还可以使用标准库中的函数。此外,Go语言通过包(package)来组织代码,可以将相关的函数和类型放在同一个包中。

package main

import "fmt"

func add(a, b int) int {
    return a + b
}

func main() {
    result := add(3, 4)
    fmt.Println(result)
}

我的总结

总结起来,我感觉go和之前使用的C++相比,主要有以下区别。

  • 类型定义写法,Go更加方便,且支持右值赋类型,和auto关键字的效果差不多
  • 匿名函数,之前没有体验过C++的lambda表达式,go的匿名函数结合go关键字做并发操作,写起来非常爽
  • 类机制,Go使用结构体构造类,我感觉更加简单,也更简洁了
  • GC C++太考验编写者的功力了,我这种小菜很容易就搞出问题,有GC的语言可能安全性高点