Go(又称Golang)是一种由Google开发的编程语言,它以其简洁、高效和并发支持而闻名。无论是系统编程、网络编程还是云计算领域,Go语言都得到了广泛的应用。本篇笔记将为您介绍Go语言的基础语法和常用特性,帮助您入门这门强大的编程语言。
1. Hello, World!
让我们从传统的“Hello, World!”程序开始。在Go语言中,可以使用以下代码来打印这个经典的欢迎信息
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
在这个例子中,我们首先声明了一个main包,然后导入了fmt包,用于格式化和输出。main函数是每个Go程序的入口点,其中的fmt.Println用于将文本打印到控制台。
2. 声明变量
在Go语言中,可以使用var关键字来声明变量。变量可以在声明时初始化,也可以单独赋值。Go语言会自动推断变量的类型。
package main
import "fmt"
func main() {
var message string = "Hello, Gopher!"
fmt.Println(message)
var number int
number = 42
fmt.Println(number)
name := "Alice"
fmt.Println(name)
}
在这个示例中,我们声明了一个字符串变量message,一个整数变量number,以及使用短变量声明方式声明的字符串变量name。
3. 控制流程
Go语言支持常见的控制流程结构,例如条件语句和循环语句。
条件语句
package main
import "fmt"
func main() {
age := 18
if age < 18 {
fmt.Println("未成年")
} else if age == 18 {
fmt.Println("刚好成年")
} else {
fmt.Println("已成年")
}
}
循环语句
package main
import "fmt"
func main() {
// for循环
for i := 1; i <= 5; i++ {
fmt.Println(i)
}
// while循环
j := 1
for j <= 5 {
fmt.Println(j)
j++
}
// 无限循环
for {
fmt.Println("无限循环")
break
}
}
4. 数组和切片
Go语言提供了数组和切片两种数据结构来存储多个元素。数组在声明时需要指定长度,而切片则是动态可变长度的。
package main
import "fmt"
func main() {
// 声明数组
var numbers [5]int
numbers[0] = 1
numbers[1] = 2
fmt.Println(numbers)
// 声明切片
fruits := []string{"apple", "banana", "orange"}
fmt.Println(fruits)
}
5. 函数
函数是Go语言的基本构建块之一,它们可以接受参数并返回一个值。
package main
import "fmt"
// 定义一个函数,接受两个整数参数并返回它们的和
func add(a, b int) int {
return a + b
}
func main() {
result := add(3, 5)
fmt.Println(result)
}
6. 并发支持
Go语言在语言级别提供了强大的并发支持,通过goroutine和channel实现。
package main
import (
"fmt"
"time"
)
func printNumbers() {
for i := 1; i <= 5; i++ {
fmt.Println(i)
time.Sleep(time.Second)
}
}
func printLetters() {
for char := 'a'; char <= 'e'; char++ {
fmt.Println(string(char))
time.Sleep(time.Second)
}
}
func main() {
go printNumbers() // 启动一个新的goroutine
go printLetters() // 启动另一个新的goroutine
// 等待一段时间以确保goroutines有足够时间执行
time.Sleep(6 * time.Second)
}
7. 包和可见性
Go语言中的代码组织使用包(package)的概念。一个包可以包含多个文件,但同一个目录下的文件必须属于同一个包。可以通过大写字母开头来实现跨包的可见性。
8. 错误处理
Go语言通过返回值来处理错误,约定将错误作为函数的最后一个返回值。一般情况下,如果函数执行成功,错误值为nil,否则为具体的错误信息。
9. defer语句
defer语句用于延迟函数的执行,通常在函数结束前进行资源清理操作。
package main
import "fmt"
func main() {
defer fmt.Println("这行会在函数结束前被执行")
fmt.Println("Hello")
}
10. 结构体和方法
Go语言中的结构体类似于面向对象编程中的类,可以包含属性和方法。
package main
import "fmt"
type Rectangle struct {
width int
height int
}
// 为Rectangle定义一个计算面积的方法
func (r Rectangle) Area() int {
return r.width * r.height
}
func main() {
rect := Rectangle{width: 10, height: 5}
fmt.Println("面积:", rect.Area())
}
Go语言还有许多其他特性和功能,这篇笔记只是一个入门指南,帮助了解了一些基础语法和常用特性。通过学习和实践,可以深入掌握Go语言,并在实际项目中发挥其优势。