Go语言入门指南:基础语法和常用特性解析
简介
什么是Go语言?
Go语言是由Google开发的一门通用型计算机编程语言,拥有以下特点:
-
高性能与高并发
Go的性能可媲美C++和Java。通过标准库或第三方库即可快速构建高并发应用。 -
语法简洁,学习曲线平缓
语法风格接近C语言,并在其基础上进行了简化,非常适合新手学习。 -
丰富的标准库和完善的工具链
提供了丰富的库支持,并内置了强大的开发工具链。 -
静态链接与快速编译
编译后生成单一可执行文件,无需附加依赖,适合容器化部署,构建速度极快。 -
跨平台支持
支持多平台构建,可轻松开发跨平台应用。 -
垃圾回收机制
内置垃圾回收功能,开发者无需管理内存释放,专注于业务逻辑。
入门
开发环境
-
安装Go语言
官方地址:go.dev/
国内镜像:studygolang.com/dl -
配置开发环境
推荐的IDE:VS Code(需安装Go插件)或 Goland。
基础语法
变量与常量
变量
Go语言中的变量必须声明后才能使用。支持以下几种声明方式:
// 声明变量,自动推导类型
var a = "hello"
// 显式声明类型
var b, c int = 1, 2
// 简短声明(仅限函数内部)
d := true
常量
常量用const声明,值在定义时必须指定,且不可修改。
const pi = 3.14
// 使用iota枚举
const (
a = iota // 0
b // 1
c // 2
)
运算符
算术运算符
+ - * / %
关系运算符
== != > < >= <=
逻辑运算符
&& || !
位运算符
& | ^ << >>
赋值运算符
= += -= *= /= %=
控制结构
条件语句
Go语言的if语句不需要括号:
if x > 10 {
fmt.Println("x is greater than 10")
} else {
fmt.Println("x is 10 or less")
}
循环语句
Go语言仅有for一种循环结构:
for i := 0; i < 5; i++ {
fmt.Println(i)
}
- 无限循环:
for { ... } - 跳出循环:
break - 跳过本次迭代:
continue
switch语句
Go的switch不需要break:
switch a {
case 1:
fmt.Println("One")
case 2, 3:
fmt.Println("Two or Three")
default:
fmt.Println("Other")
}
数据结构
数组
数组是固定长度的序列,声明方式如下:
var a [5]int // 长度为5的整型数组
b := [3]string{"a", "b", "c"} // 初始化数组
切片
切片是动态长度的数组,用make创建,支持append扩展:
s := make([]int, 3) // 长度为3的切片
s = append(s, 4, 5) // 动态扩展
Map
map是键值对结构,声明方式如下:
m := make(map[string]int)
m["key"] = 42
value, exists := m["key"]
Range
用于遍历数组、切片、map等:
for index, value := range nums {
fmt.Println(index, value)
}
函数
- 支持多个返回值:
func add(a int, b int) (int, int) {
return a + b, a - b
}
- 支持变长参数:
func sum(nums ...int) int {
total := 0
for _, num := range nums {
total += num
}
return total
}
结构体
Go使用struct定义自定义数据类型:
type Person struct {
Name string
Age int
}
p := Person{Name: "Alice", Age: 25}
指针
Go支持指针,但不允许指针运算:
x := 10
ptr := &x
fmt.Println(*ptr) // 解引用
常用功能
字符串操作
strings.Contains: 判断子字符串strings.Join: 拼接字符串strings.Split: 分割字符串
时间处理
使用time包:
import "time"
fmt.Println(time.Now()) // 当前时间
JSON处理
利用encoding/json进行序列化和反序列化:
import "encoding/json"
type Data struct {
Key string `json:"key"`
}
jsonData, _ := json.Marshal(Data{Key: "value"})
fmt.Println(string(jsonData))
进程信息
通过os和os/exec管理进程信息:
import "os"
args := os.Args // 获取命令行参数
os.Setenv("KEY", "VALUE")