Go语言入门指南 | 青训营
Go语言基础语法
变量声明与赋值 Go语言是静态类型语言,但可以使用类型推断简化变量声明。:
var age int // 声明一个整型变量
name := "John" // 声明并初始化一个字符串变量
条件语句 Go语言的条件语句使用if和else关键字,但与其他语言不同的是,条件语句中的条件表达式不需要括号。
if score >= 60 {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}
循环语句 Go语言的唯一循环结构是for循环,但可以通过不同方式实现不同类型的循环。
// 基本的for循环
for i := 0; i < 5; i++ {
fmt.Println(i)
}
// 类似while的循环
num := 0
for num < 10 {
num++
}
数组和切片 Go语言支持数组和切片类型.类似于python,可以灵活对数组进行处理
func main() {
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2]) // c
fmt.Println("len:", len(s)) // 3
s = append(s, "d")
s = append(s, "e", "f")
fmt.Println(s) // [a b c d e f]
c := make([]string, len(s))
copy(c, s)
fmt.Println(c) // [a b c d e f]
fmt.Println(s[2:5]) // [c d e]
fmt.Println(s[:5]) // [a b c d e]
fmt.Println(s[2:]) // [c d e f]
good := []string{"g", "o", "o", "d"}
fmt.Println(good) // [g o o d]
}
Go语言常用特性解析
- 并发支持 Go语言天生支持并发编程,通过
goroutine和channel实现高效的并发处理。 建议在Go语言中协程间通过channel来共享内存
func f(taskNum int, ch chan string) {
// 模拟耗时操作
time.Sleep(time.Second)
ch <- fmt.Sprintf("Task %d 完成", taskNum)
}
func main() {
ch := make(chan string)
for i := 1; i <= 3; i++ {
go f(i, ch)
}
for i := 1; i <= 3; i++ {
fmt.Println(<-ch)
}
}
Go 对 JSON 的操作
Go语言内置了encoding/json包来处理JSON序列化。使用该包的Marshal函数,可以将Go数据结构序列化为JSON格式的字节切片。这样的序列化结果可以用于网络传输或文件存储。
在进行JSON序列化时,Go语言会根据字段的可见性来决定是否包含该字段。大写字母开头的字段会被导出,参与JSON序列化,而小写字母开头的字段不会导出
Go语言的encoding/json包也提供了Unmarshal函数,将JSON数据反序列化为Go数据结构。这个函数将JSON格式的字节切片作为输入,然后将数据解析到指定的Go数据结构中。
type userInfo struct {
Name string
Age int `json:"age"`
Hobby []string
}
func main() {
a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}
buf, err := json.Marshal(a)
if err != nil {
panic(err)
}
fmt.Println(buf) // [123 34 78 97...]
fmt.Println(string(buf)) // {"Name":"wang","age":18,"Hobby":["Golang","TypeScript"]}
buf, err = json.MarshalIndent(a, "", "\t")
if err != nil {
panic(err)
}
fmt.Println(string(buf))
var b userInfo
err = json.Unmarshal(buf, &b)
if err != nil {
panic(err)
}
fmt.Printf("%#v\n", b) // main.userInfo{Name:"wang", Age:18, Hobby:[]string{"Golang", "TypeScript"}}
}
Go语言的优势 Go语言拥有简洁、高效、并发的特性,使其成为构建大规模网络服务和分布式系统的理想选择。其静态类型和编译型的特点,使得代码更加稳健和高效。
并发编程的挑战 虽然Go语言天生支持并发编程,但并发也带来了新的挑战,比如竞态条件和资源管理。合理地使用goroutine和channel,以及采用同步机制,是确保并发程序正确运行的关键。
切片与数组的灵活性 切片作为对数组的引用,具有动态扩容的能力,能够更好地适应实际需求。合理地使用切片,可以避免不必要的内存浪费,提高代码的可读性和性能。
开源生态系统的贡献 Go语言拥有活跃的开源社区和丰富的生态系统,各种优秀的开源项目为开发者提供了便利。