Go语言入门指南 | 青训营

122 阅读3分钟

Go语言入门指南 | 青训营

Go语言基础语法

变量声明与赋值 Go语言是静态类型语言,但可以使用类型推断简化变量声明。:

var age int // 声明一个整型变量
name := "John" // 声明并初始化一个字符串变量

条件语句 Go语言的条件语句使用ifelse关键字,但与其他语言不同的是,条件语句中的条件表达式不需要括号。

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语言常用特性解析

  1. 并发支持 Go语言天生支持并发编程,通过goroutinechannel实现高效的并发处理。 建议在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语言天生支持并发编程,但并发也带来了新的挑战,比如竞态条件和资源管理。合理地使用goroutinechannel,以及采用同步机制,是确保并发程序正确运行的关键。 切片与数组的灵活性 切片作为对数组的引用,具有动态扩容的能力,能够更好地适应实际需求。合理地使用切片,可以避免不必要的内存浪费,提高代码的可读性和性能。 开源生态系统的贡献 Go语言拥有活跃的开源社区和丰富的生态系统,各种优秀的开源项目为开发者提供了便利。