浅谈Go语言基础语法与常用特性 | 青训营

119 阅读4分钟

知识点梳理

     ~~~~~Go语言,也称Golong,是由Google开发的一门编程语言。它有着高性能、高并发、静态链接、跨平台等特点。跟随视频学习了Go语言后,并结合我学过的其他语言(C语言,python)进行类比,总结出了如下基础语法:
   ~~~1.变量和常量:Go语言是一门强类型语言,每一个变量都有它自己的类型。变量可以分为字符串,整数,浮点和布尔四种。与C语言相比,它的分类更加简洁。常量可以直接使用const定义,Go语言会自动识别,这一点也是比C便捷的地方。

var a int = 66
var b float64 = 1.11
var c bool = true
var d string = "Hello, World!"


const e int = 10
const f float64 = 1.5
const g bool = false
const h string = "Hello, World!"



   ~~~2.条件和循环语句:Go语言在判断语句中也有着if…else,switch的选择,但是它的判断条件不用加括号,这与python有相似之处,可以很大程度上节约时间。Go语言的循环语句只有for可选,使用规则与C语言相似。

    fmt.Println("You are an adult.")
} else {
    fmt.Println("You are a minor.")
}

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

   ~~~3.数组和切片:在Go语言中,数组的定义与C语言类似,它的性质也是类似的,即静态确定,无法增长。而切片则是Go语言所独有的一种语法机制,它可以被理解为一种动态数组,可以根据需要自由扩展和伸缩,比数组更加方便。

 var numbers [5]int // 声明一个包含5个整数的数组
 
 var colors []string // 声明一个切片
 colors = append(colors, "red") 
 colors = append(colors, "green") 
 colors = append(colors, "blue") //用了切片的内置函数`append`来向切片添加元素

   ~~~4.函数和指针:函数是用于封装可重用的代码块,而指针则是在内存中引用变量的地址。函数使用func进行定义,指针则是需要取地址符号“&”和“*”配合使用方可生效。此外,指针还可以用于函数参数传递,允许函数修改原始变量的值。

return x + y 
} 
func main() { 
result := add(5, 3) 
fmt.Println("Sum:", result) // 输出: Sum: 8 
}
func modifyByPointer(x *int) { 
*x = *x * 2 
} 

func main() { 
value := 5 
modifyByPointer(&value) 
fmt.Println("Modified:", value) // 输出: Modified: 10 
}

   ~~~5.接口和控制:在Go语言中,接口是一种定义一组方法签名的方式,它规定了类型应该具有哪些方法,具体类型可以通过实现接口中定义的方法来满足接口的要求。这种设计允许多个不同的类型实现相同的接口,从而实现了多态性。另外,Go语言提供了强大的并发支持,使用协程和通道来实现并发控制。协程让同一个程序中同时运行多个函数,而通道用于在协程之间传递数据。

package main
import "fmt"

// 定义一个接口
type Shape interface {
    Area() float64
}

// 定义一个结构体
type Circle struct {
    Radius float64
}

// 实现接口方法
func (c Circle) Area() float64 {
    return 3.14 * c.Radius * c.Radius
}

func main() {
    // 创建一个Circle类型的变量
    circle := Circle{Radius: 5}

    // 将circle赋值给接口变量
    var shape Shape
    shape = circle

    // 调用接口方法
    fmt.Println("Circle Area:", shape.Area()) // 输出: Circle Area: 78.5
}

package main

import (
    "fmt"
    "time"
)

func worker(id int, ch chan int) {
    time.Sleep(time.Second)
    fmt.Printf("Worker %d finished\n", id)
    ch <- id
}

func main() {
    numWorkers := 5
    ch := make(chan int)

    for i := 1; i <= numWorkers; i++ {
        go worker(i, ch)
    }

    // 从通道中接收数据
    for i := 1; i <= numWorkers; i++ {
        finishedWorker := <-ch
        fmt.Printf("Received from worker %d\n", finishedWorker)
    }
}

个人理解和学习建议

   ~~~以上便是我认为Go语言需要格外注意的知识点和常用的特性了。当然,Go语言并不是只有这些内容,青训营的老师也不止讲解了这些内容。在Go语言中,还有Json操作,数字解析,进程信息等等众多内容需要学习,我们不可能在青训营短短的一个月时间内完全学会并掌握它。但是,我们只要掌握了上述的知识点,就可以触类旁通,进而学会更多的语法甚至语言。    ~~~总而言之,Go语言的基础语法并不是很困难,虽然难于python,但是没有C语言复杂。在我们学习的Go语言的过程中,最重要的也不是语法,而是学习经验。对于计算机专业的同学们来说,伴随技术的发展,我们几乎无时无刻不要学习新知识,新框架,新算法,这些事物是学不尽的,我们只能尽可能培养自己的学习能力,这样才能更好的胜任工作,不会被淘汰。