以下是Go语言最有特色的几个特性,并附带相应的代码示例:
并发编程
Go语言原生支持轻量级的并发,通过goroutine和channel来实现并发编程。
package main
import (
"fmt"
"time"
)
func printMessage(message string) {
for i := 0; i < 5; i++ {
fmt.Println(message)
time.Sleep(time.Millisecond * 500)
}
}
func main() {
go printMessage("Hello")
go printMessage("World")
time.Sleep(time.Second * 3)
}
垃圾回收
Go语言具有自动内存管理,使用垃圾回收器(garbage collector)来自动释放不再使用的内存。
package main
import "fmt"
func createSlice() []int {
slice := make([]int, 0, 5)
for i := 1; i <= 5; i++ {
slice = append(slice, i)
}
return slice
}
func main() {
slice := createSlice()
fmt.Println(slice)
}
类型推断
Go语言具有类型推断功能,可以根据赋值语句自动推断变量的类型。
package main
import "fmt"
func main() {
message := "Hello, Go!"
count := 10
ratio := 3.14
fmt.Println(message)
fmt.Println(count)
fmt.Println(ratio)
}
函数多返回值
Go语言支持函数返回多个值,简化了某些情况下的代码编写。
package main
import "fmt"
func swap(a, b int) (int, int) {
return b, a
}
func main() {
x, y := 10, 20
x, y = swap(x, y)
fmt.Println(x, y) // 输出:20 10
}
defer语句
Go语言提供了defer语句,用于延迟执行函数调用,常用于资源释放和异常处理。
package main
import "fmt"
func cleanup() {
fmt.Println("Cleanup")
}
func main() {
defer cleanup()
fmt.Println("Hello, Go!")
}
匿名函数和闭包
Go语言支持匿名函数和闭包的概念,可以在函数内部定义函数,并访问外部函数的变量。
package main
import "fmt"
func generateIncrementer() func() int {
count := 0
return func() int {
count++
return count
}
}
func main() {
increment := generateIncrementer()
fmt.Println(increment()) // 输出:1
fmt.Println(increment()) // 输出:2
fmt.Println(increment()) // 输出:3
}
接口和类型断言
Go语言通过接口(interface)实现多态性,同时提供了类型断言(type assertion)机制来在运行时检查接口的具体类型。
package main
import "fmt"
type Shape interface {
Area() float64
}
type Rectangle struct {
width float64
height float64
}
func (r Rectangle) Area() float64 {
return r.width * r.height
}
type Circle struct {
radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.radius * c.radius
}
func printArea(shape Shape) {
fmt.Println("Area:", shape.Area())
}
func main() {
rect := Rectangle{width: 3, height: 4}
circ := Circle{radius: 5}
printArea(rect) // 输出:Area: 12
printArea(circ) // 输出:Area: 78.5
}
错误处理
Go语言通过错误值(error value)和多返回值的方式进行错误处理,简化了错误处理的流程。
package main
import (
"errors"
"fmt"
)
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Result:", result)
}
这些特性使得Go语言在并发编程、内存管理、简洁性和可靠性方面具有独特的优势。请逐段运行这些代码示例,以了解更多关于Go语言的编码特性。