Go 基础语法和常用特性解析 | 青训营

50 阅读2分钟

Go 语言据我了解是由 Google 开发的一种静态类型、编译型的开源编程语言。在现在挺火的,所以来学习一下关于go语言的知识。

在 Go 语言中,变量的声明方式与其他编程语言感觉没有无太大差异。使用关键字 var 声明变量,并指定变量类型。例如:

var num int //java:int num
var name string//java:String name 

基本数据类型包括整数、浮点数、布尔值和字符串啊等等。此外,Go 还有复数类型和字符类型,但是我暂时没用到这些。

流程控制语句的话,Go 语言有传统的控制语句如条件语句、循环语句和跳转语句。最常用的条件语句我觉得就是 if 语句,语法与其他语言差不多吧。例如:

if num > 10 {
    fmt.Println("111.")
} else if num == 10 {
    fmt.Println("222.")
} else {
    fmt.Println("333.")
}

循环语句包括了 for 循环和 range 循环。for 循环用于执行固定次数的循环, range 循环的话用于遍历数组、切片、映射等。例如:

for i := 0; i < 5; i++ {
    fmt.Println(i)
}

arr := []int{1, 2, 3, 4, 5}
for index, value := range arr {
    fmt.Println(index, value)
}

函数是 Go 的基本构建块吧,主要用于代码复写。函数它的声明格式是:func 函数名(参数列表) 返回值类型。例如:

func add(a, b int) int {
    return a + b
}

方法是与类型绑定的函数,可以实现面向对象编程的特性。例如,我们可以给结构体类型添加一些方法:

type Rectangle struct {
    width  int
    height int
}

func (r Rectangle) area() int {
    return r.width * r.height
}

我觉得Go 语言最牛逼的就是天生支持并发编程,提供了 goroutinechannel 这些来简化并发操作。goroutine 是一种轻量级线程,可以在程序中同时执行多个函数。channel 则用于不同 goroutine 之间的数据传输和同步。

就像这个例子,通过启动两个 goroutine 来并行执行两个函数:

func printNumbers() {
    for i := 1; i <= 10; i++ {
        fmt.Println(i)
        time.Sleep(1 * time.Second)
    }
}

func printLetters() {
    for i := 'a'; i <= 'j'; i++ {
        fmt.Println(string(i))
        time.Sleep(1 * time.Second)
    }
}

func main() {
    go printNumbers()
    go printLetters()
    time.Sleep(12 * time.Second)
}

还有,在 Go 语言中,错误居然是一种值,而不是异常。函数可以返回一个错误值,调用方可以通过判断错误来处理异常情况。我的常用做法是用多值返回,将返回值和错误作为函数结果返回。

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a /