Go语言在保证程序高效和可靠的基础上,简化了代码的复杂性,使开发者能够轻松构建出高性能的应用程序
Go语言的基本特性
1. 简单性和易用性
- Go语言的设计初衷是保持语法的简单和清晰。相比于其他许多语言,Go避免了复杂的特性,比如继承、重载等,而是以结构体和接口来实现面向对象的设计。这样的设计有助于减少学习曲线,并让代码更易于维护。
2. 并发性支持
- Go在语言层面原生支持并发编程,提供了轻量级的
goroutine(类似于线程)和channel(管道)机制,简化了并发操作,适合于构建分布式系统或处理大量并发任务的应用,比如Web服务和实时聊天应用等。
3. 高效的编译速度
- Go是静态类型语言,但其编译速度却接近动态语言。Go代码在编译成机器码时会生成单个二进制文件,这使得它的运行速度非常快。此外,Go没有依赖其他库的运行时(runtime),因此它的部署和分发也相对简单。
4. 垃圾回收
- Go语言自带垃圾回收机制,它会自动管理内存的分配和释放,开发者不必显式地处理内存清理工作,这也减少了内存泄漏等问题的风险。 G
5. 内置包和工具
- Go自带了大量丰富的标准库和工具。例如,Go有内置的HTTP、文件I/O、JSON解析等库,大多数基础功能都可以直接使用。Go还附带了自动代码格式化工具(
gofmt),静态代码检查工具(go vet),以及性能分析工具等,方便开发者快速上手。
6. 跨平台支持
- Go编译器支持多平台编译,可以在一个系统上编译出适用于其他系统的二进制文件(如在Windows上编译Linux的可执行文件),这使得Go语言的应用具有良好的跨平台性。
Go语言配置
- 依据安装和配置 Visual Studio Code for Go 开发 - Go on Azure | Microsoft Learn配置:
- 安装Go语言,Visual Studio Code,Go扩展。
- 在命令面板输入
Go: Install/Update tools更新Go工具。 - 建立文件夹name,新建后缀为main.go的源文件,在终端运行
go mod init name以初始化。
Go语言基础语法
定义变量
var a int = 10
var b = 20 // 自动推断类型
c := 30 // 简短声明(仅在函数内使用)
数据类型
-
基本类型:
int,float64,string,bool -
复合类型:
array,slice,map,struct
var num int = 42
var str string = "Hello, Go!"
var isAvailable bool = true
常量
常量使用const声明,且必须在编译时确定其值。
const pi = 3.1415
const language = "Go"
控制结构
注意,for是Go中唯一的循环结构。
if num > 0 {
fmt.Println("Positive")
} else {
fmt.Println("Non-positive")
}
for i := 0; i < 5; i++ {
fmt.Println(i)
}
switch day {
case "Monday":
fmt.Println("Start of the week")
case "Friday":
fmt.Println("Almost weekend")
default:
fmt.Println("Just another day")
}
函数
Go函数定义格式为func关键字、函数名、参数列表和返回类型。函数可以返回多个值。
func add(x int, y int) int {
return x + y
}
func swap(a, b string) (string, string) {
return b, a
}
数组与切片
- 数组:固定大小的序列。
- 切片:动态数组,功能更强大,使用更灵活。
var arr [5]int // 声明数组
slice := []int{1, 2, 3} // 声明切片
slice = append(slice, 4) // 向切片添加元素
Map
m := make(map[string]int)
m["age"] = 25
fmt.Println(m["age"]) // 输出:25
结构体
type Person struct {
Name string
Age int
}
p := Person{Name: "Alice", Age: 30}
fmt.Println(p.Name) // 输出:Alice
方法
Go语言允许在结构体上定义方法。方法的第一个参数是receiver(接收者),表示方法作用的结构体对象。
func (p Person) greet() {
fmt.Printf("Hello, my name is %s\n", p.Name)
}
p := Person{Name: "Bob"}
p.greet() // 输出:Hello, my name is Bob
并发
Go原生支持并发编程,使用go关键字启动轻量级的线程(goroutine)。
func say(message string) {
fmt.Println(message)
}
go say("Hello") // 启动 goroutine
say("World")
通道
通道用于在goroutine之间传递数据。
ch := make(chan int)
go func() {
ch <- 10 // 发送数据到通道
}()
value := <-ch // 从通道接收数据
fmt.Println(value) // 输出:10