一、基础语法
-
变量和常量
- 变量声明:Go 语言变量的声明格式为
var 变量名 类型,例如:var age int。也可以在声明时进行赋值,如var name string = "Tom"。此外,还可以使用短变量声明符号“:=”,在函数内部快速声明并初始化变量,例如age := 26。 - 常量声明:使用
const关键字声明常量,例如const PI = 3.14159。
- 变量声明:Go 语言变量的声明格式为
-
数据类型
- 整型:包括
int、int8、int16、int32、int64等,以及对应的无符号整型uint、uint8、uint16、uint32、uint64。不同整型的取值范围不同。 - 浮点型:
float32和float64,分别表示单精度和双精度浮点数。 - 复数类型:
complex64和complex128,用于表示复数。 - 布尔类型:
bool,只有true和false两个值。 - 字符串类型:使用双引号包裹字符串内容,例如
"Hello, Go"。可以通过索引访问字符串中的单个字符。 - rune 类型:用于表示 Unicode 码点,实际上是一个
int32类型的别名。
- 整型:包括
-
运算符
- 二元运算符:包括算术运算符(如
+、-、*、/、%)、比较运算符(如==、!=、<、>、<=、>=)、逻辑运算符(如&&、||)等。 - 一元运算符:如
++(自增)、--(自减)等。
- 二元运算符:包括算术运算符(如
-
控制流语句
- 条件语句:使用
if、else if、else进行条件判断。例如:
- 条件语句:使用
if age >= 18 {
fmt.Println("成年人")
} else {
fmt.Println("未成年人")
}
- **循环语句**:
- `for`循环是 Go 语言中唯一的循环语句结构,可以用于遍历数组、切片、映射等数据结构,也可以用于普通的计数循环。例如:
for i := 0; i < 5; i++ {
fmt.Println(i)
}
- `range`关键字用于在`for`循环中迭代数组、切片、映射等。例如:
nums := []int{1, 2, 3, 4, 5}
for index, num := range nums {
fmt.Printf("索引:%d,值:%d\n", index, num)
}
- **选择语句**:使用`switch`、`case`进行多分支选择。例如:
day := "Monday"
switch day {
case "Monday":
fmt.Println("周一")
case "Tuesday":
fmt.Println("周二")
default:
fmt.Println("其他")
}
- 函数
- 函数定义:使用
func关键字定义函数,函数可以有参数和返回值。例如:
- 函数定义:使用
func add(a int, b int) int {
return a + b
}
- **参数传递**:可以按值传递(传递参数的副本)或按引用传递(传递参数的内存地址)。对于切片、映射等类型,默认是按引用传递。
- **返回值**:可以返回多个值。例如:
func divide(a int, b int) (int, bool) {
if b == 0 {
return 0, false
}
return a / b, true
}
- 包和导入
- 包声明:每个 Go 语言源文件开头都有一个
package声明,用于指定该文件所属的包。例如package main表示这是一个可执行程序的主包。 - 导入包:使用
import关键字导入其他包。例如import "fmt"用于导入标准库中的fmt包,以使用其中的格式化输出函数等。
- 包声明:每个 Go 语言源文件开头都有一个
二、常用特性
- 指针:Go 语言中有指针类型,可以通过指针间接访问和修改变量的值。例如:
var num int = 10
ptr := &num
*ptr = 20
fmt.Println(num) // 输出 20
- 结构体:结构体是一种自定义的数据类型,用于组合多个不同类型的字段。例如:
type Person struct {
Name string
Age int
}
- 方法:可以为结构体类型定义方法,方法是与特定类型相关联的函数。例如:
func (p Person) SayHello() {
fmt.Printf("大家好,我叫%s,我今年%d岁。", p.Name, p.Age)
}
- 接口:接口定义了一组方法的集合,任何类型只要实现了接口中定义的所有方法,就可以被视为该接口的实现类型。接口体现了 Go 语言的多态性。例如:
type Shape interface {
Area() float64
}
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius
}
- 并发编程:
- goroutine:是 Go 语言中并发执行的轻量级线程,可以通过在函数调用前添加
go关键字来创建一个 goroutine。例如:
- goroutine:是 Go 语言中并发执行的轻量级线程,可以通过在函数调用前添加
go func() {
fmt.Println("这是一个 goroutine")
}()
- **通道(channel)**:用于在 goroutine 之间进行通信和同步。可以使用`make`函数创建一个通道,通道有发送和接收操作。例如:
ch := make(chan int)
go func() {
ch <- 10 // 发送数据到通道
}()
data := <-ch // 从通道接收数据
- 错误处理:Go 语言中使用
error类型来表示错误。函数可以返回一个error类型的值来指示是否发生错误。例如:
func divide(a int, b int) (int, error) {
if b == 0 {
return 0, errors.New("除数不能为 0")
}
return a / b, nil
}
通过学习以上基础语法和常用特性,可以开始编写简单的 Go 语言程序,并逐步深入了解和应用 Go 语言的更多功能。