起源与传承:go 诞生于 2007 年,由 google 开发,作为 c++++ 的替代方案,借鉴了 python、java 和 c# 的优点。创新特性:并发性:goroutine 和 channel 实现轻量级并发编程。内存管理:垃圾收集器自动管理内存。接口:提高代码可扩展性和可重用性。泛型(go 1.18):编写可重用和类型安全的代码。
Go 的语言传承与创新
起源与传承
Go 语言诞生于 2007 年,由 Google 开发,作为 C++ 的一种替代方案。它继承了 C++ 的强大特性,如静态类型、编译型和高性能,同时借鉴了其他语言的优点,如 Python 的简洁性、Java 的并发性和 C# 的可移植性。
创新特性
- 并发性:Go 语言引入了 Goroutine 和 Channel,实现了轻量级的并发编程,简化了多线程开发。
- 内存管理:Go 采用垃圾收集器自动管理内存,释放了程序员管理内存的负担。
- 接口:接口是 Go 中的一项关键概念,它允许不同的类型实现相同的接口,提高了代码的可扩展性和可重用性。
- 泛型:Go 1.18 中引入了泛型,允许编写可重用和类型安全的代码。
实战案例
Goroutine 并发
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个匿名 Goroutine
go func() {
fmt.Println("Hello from Goroutine")
}()
// 主线程等待 Goroutine 完成
time.Sleep(1 * time.Second)
}
Channel 通信
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个 Channel
ch := make(chan string)
// 创建一个 Goroutine 发送数据
go func() {
ch <- "Hello from Goroutine"
time.Sleep(1 * time.Second)
}()
// 主线程从 Channel 接收数据
fmt.Println(<-ch)
}
接口和类型断言
package main
import (
"fmt"
)
type Animal interface {
Speak() string
}
type Dog struct{}
func (d Dog) Speak() string {
return "Woof"
}
func main() {
var animal Animal = Dog{}
if dog, ok := animal.(Dog); ok {
fmt.Println(dog.Speak())
}
}