下面是 Go 语言的一些基本语法介绍,帮助快速上手Go语言:
1. Go 程序结构
Go 程序的基本结构非常简单,通常包括 package 声明、导入的包以及 main 函数。
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
package main:指定这是一个可执行程序。import "fmt":导入标准库中的fmt包,用于输出函数。func main():main是程序的入口点。
2. 变量声明
Go 提供了多种方式来声明变量:
使用 var 声明变量:
var x int
var y string
x = 10
y = "Hello"
使用简短声明方式:
x := 10
y := "Hello"
这种方式不需要提前指定类型,Go 会根据赋值推断出类型。
多变量声明:
var x, y int = 1, 2
a, b := 3, "world"
3. 数据类型
Go 是静态类型语言,但也有类型推导。常见的数据类型包括:
- 基本类型:
int,float64,string,bool - 复合类型:数组、切片、映射(map)、结构体(struct)、通道(channel)
例如:
var age int = 25
var pi float64 = 3.14159
var name string = "Alice"
var isActive bool = true
4. 控制结构
条件语句
if x > 10 {
fmt.Println("x is greater than 10")
} else if x == 10 {
fmt.Println("x is equal to 10")
} else {
fmt.Println("x is less than 10")
}
循环语句
Go 只有 for 循环,其他语言中的 while 和 do-while 都可以用 for 来表示:
for i := 0; i < 5; i++ {
fmt.Println(i)
}
无限循环:
for {
// 无限循环
}
5. 函数
Go 语言的函数定义使用 func 关键字。
无参数函数:
func sayHello() {
fmt.Println("Hello!")
}
带参数的函数:
func add(a int, b int) int {
return a + b
}
多返回值函数:
Go 支持多个返回值:
func divide(a, b int) (int, int) {
return a / b, a % b
}
6. 数组和切片
数组
数组是固定长度的,可以通过 [...] 来定义长度。
var arr [3]int = [3]int{1, 2, 3}
切片
切片是动态数组,可以自动扩展。
slice := []int{1, 2, 3} // 声明并初始化切片
slice = append(slice, 4) // 向切片添加元素
7. Map(映射)
Go 的 map 是一个哈希表,支持通过键值对存取数据。
m := make(map[string]int)
m["apple"] = 5
m["banana"] = 3
fmt.Println(m["apple"]) // 输出: 5
8. 结构体(Struct)
结构体是 Go 中的一种复合数据类型,类似于其他语言中的类。
type Person struct {
Name string
Age int
}
func main() {
p := Person{Name: "Alice", Age: 25}
fmt.Println(p.Name) // 输出: Alice
fmt.Println(p.Age) // 输出: 25
}
9. 接口(Interface)
Go 中的接口定义了一组方法,但不需要实现它们。这使得 Go 支持面向接口编程。
type Speaker interface {
Speak() string
}
type Person struct {
Name string
}
func (p Person) Speak() string {
return "Hello, my name is " + p.Name
}
func introduce(s Speaker) {
fmt.Println(s.Speak())
}
func main() {
p := Person{Name: "Alice"}
introduce(p)
}
10. 并发
Go 内建对并发的支持,最常用的工具是 Goroutines 和 Channels。
Goroutines
Goroutines 是轻量级线程,通过 go 关键字启动。
go func() {
fmt.Println("This is running concurrently.")
}()
Channels
Channels 是 Go 中用于在 Goroutines 之间传递数据的管道。
ch := make(chan int)
go func() {
ch <- 42 // 发送数据到通道
}()
value := <-ch // 从通道接收数据
fmt.Println(value) // 输出: 42
11. 错误处理
Go 通过返回值而非异常来处理错误。常见的做法是返回一个 error 类型的值。
func divide(a, b int) (int, error) {
if b == 0 {
return 0, fmt.Errorf("cannot divide by zero")
}
return a / b, nil
}
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}