Go 语言(也称为 Golang)是由 Google 开发的一种静态强类型、编译型、并发型语言。Go 语言的设计目标是提供一种简单、高效、可靠的编程语言,适用于构建高性能的网络服务和分布式系统。本文将详细介绍 Go 语言的基础语法和常用特性,帮助你快速入门 Go 语言开发。
一、Go 语言基础语法
1. 变量和常量
在 Go 语言中,变量和常量的声明方式如下:
// 变量声明
var a int = 10
var b = 20 // 类型推断
c := 30 // 简短声明
// 常量声明
const PI = 3.14
const (
Sunday = iota // iota 是常量生成器,从 0 开始递增
Monday
Tuesday
)
2. 数据类型
Go 语言支持多种基本数据类型,包括整型、浮点型、布尔型、字符串等。
var i int = 10
var f float64 = 3.14
var b bool = true
var s string = "Hello, Go!"
3. 控制结构
Go 语言支持常见的控制结构,如条件语句和循环语句。
// 条件语句
if a > b {
fmt.Println("a is greater than b")
} else if a < b {
fmt.Println("a is less than b")
} else {
fmt.Println("a is equal to b")
}
// 循环语句
for i := 0; i < 10; i++ {
fmt.Println(i)
}
// 无限循环
for {
fmt.Println("Infinite loop")
break // 使用 break 跳出循环
}
4. 函数
Go 语言的函数定义如下:
func add(x int, y int) int {
return x + y
}
// 多返回值
func swap(x, y string) (string, string) {
return y, x
}
5. 数组和切片
Go 语言支持数组和切片(动态数组)。
// 数组
var arr [5]int
arr[0] = 1
arr[1] = 2
// 切片
var slice []int
slice = append(slice, 1)
slice = append(slice, 2)
6. 映射(Map)
Go 语言的映射类似于其他语言中的字典或哈希表。
var m map[string]int
m = make(map[string]int)
m["key1"] = 1
m["key2"] = 2
二、Go 语言常用特性
1. 并发编程
Go 语言天生支持并发编程,通过 goroutine 和 channel 实现。
// goroutine
go func() {
fmt.Println("Hello from goroutine")
}()
// channel
ch := make(chan int)
go func() {
ch <- 1 // 发送数据到 channel
}()
value := <-ch // 从 channel 接收数据
2. 接口
Go 语言的接口是一种类型,它定义了一组方法的集合。
type Shape interface {
Area() float64
}
type Rectangle struct {
Width, Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
func main() {
var s Shape
s = Rectangle{Width: 10, Height: 5}
fmt.Println(s.Area())
}
3. 错误处理
Go 语言通过返回多个值来处理错误。
func divide(a, b int) (int, error) {
if b == 0 {
return 0, fmt.Errorf("division by zero")
}
return a / b, nil
}
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
}
4. 包管理
Go 语言使用包来组织代码,通过 import 关键字引入其他包。
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Pi)
}
5. 测试
Go 语言内置了测试框架,通过 testing 包进行单元测试。
package main
import "testing"
func TestAdd(t *testing.T) {
result := add(2, 3)
if result != 5 {
t.Errorf("Expected 5, got %d", result)
}
}