初学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)。
此外,还有无符号整数类型:uint、uint8、uint16、uint32、uint64。
浮点数类型(Floating-Point Numbers)
Go提供两种浮点数类型:float32(32位浮点数)和float64(64位浮点数)。这些类型用于表示带有小数点的数字。
复数类型(Complex Numbers)
Go提供了两种复数类型:complex64和complex128,分别由float32和float64组成的实部和虚部构成。
布尔类型(Boolean)
布尔类型只有两个可能的值:true和false。在逻辑运算和条件语句中使用。
字符串类型(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的语言可能安全性高点