Go语言的基础语法与常用特性解析 | 青训营

58 阅读4分钟

作为一名有着C++编程经验的开发者,我一直对学习新的编程语言充满好奇。每一门语言都是一扇通向新思维和工具的大门。在这么多选择中,Go(也被称为Golang)因其高效、可读性和简洁性而备受赞誉。因为这次机会,我也有机会接触到Go语言,所以我决定写下这篇文章,作为自己从C++迈向Go旅程的见证,并从Go语言的基础语法和常用特性开始。

环境搭建

首先,学习一门新语言的第一步就是,我决定开始搭建Go语言的开发环境。因为我使用的是Windows系统,所以我在官方网站(golang.org/dl/) 上找到了Win系统的安装包。完成安装后,还需要设置GOPATHGOBIN环境变量,以便更好地管理Go项目和生成的二进制文件。具体在安装时遇到的问题在网上都能找到教程,整体也并不复杂,所以我就不在此赘述。

Go语言关键字

Go是与C++类似的编译型语言,同时它的编译速度非常快。它总共有25个关键字,我将它列举如下:

  • break default func interface select
  • case defer go map struct
  • chan else goto package switch
  • const fallthrough if range type
  • continue for import return var

当然在这篇文章中由于篇幅有限无法说明所有的关键字,所以仅作记录使用。

Hello,世界!

作为学习新语言的传统,当然还是要从经典的“Hello,World!”程序开始。在Go中,源代码文件的扩展名是.go。可以从创建一个名为hello.go的文件开始,并输入以下内容:

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

首先我们要了解一个概念,Go程序是通过package来组织的,package <pkgName> 这一行告诉我们当前文件属于哪个包,而包名main则告诉我们它是一个可独立运行的包,它在编译后会产生可执行文件。除了main包之外,其它的包最后都会生成*.a文件(也就是包文件)并放置在$GOPATH/pkg/$GOOS_$GOARCH中。

程序整体看起来与C++程序类似,所以我们直接运行这个程序。

接下来,我在终端中运行以下命令,编译并运行这个程序:

go run hello.go

然后就得到了hello world的输出。

基础语法

Go语言中的一些基础语法有和C++类似的,但也有很多不同之处,下面进行详细说明:

  • 变量声明与赋值: 在Go中,可以使用var关键字声明变量,就像这样:

    var name string
    name = "Alice"
    

一个特点是——与C++不同的,Go把变量类型放在变量名后面。

当然,还有一种更简洁的方式,就是使用短变量声明:

age := 25
  • 函数定义: 函数的定义使用了func关键字,就像这样:

    func add(a, b int) int {
        return a + b
    }
    
  • 条件语句: 条件语句的写法与C++类似:

    if x > 10 {
        fmt.Println("x is greater than 10")
    } else {
        fmt.Println("x is not greater than 10")
    }
    
  • 循环语句: Go中只有for循环,但通过不同的写法可以实现不同类型的循环:

    for i := 0; i < 5; i++ {
        fmt.Println(i)
    }
    
    // 类似于C++的while循环
    sum := 0
    for sum < 10 {
        sum += 1
    }
    

常用特性

除了基础语法,Go还提供了许多有用的特性,能够让编程变得更加便利:

  • 切片(Slices): 切片类似于C++中的动态数组,它们可以在不指定长度的情况下存储元素:

    numbers := []int{1, 2, 3, 4, 5}
    
  • 映射(Maps): Go的映射类似于C++的std::map,用于存储键值对:

    ages := map[string]int{
        "Alice": 25,
        "Bob":   30,
    }
    
  • 并发(Concurrency): Go在语言级别原生支持并发,通过goroutines实现轻量级线程,使得编写并发代码更加简单:

    go func() {
        // 并发执行的代码
    }()
    
  • 错误处理: 在Go中,鼓励明确地处理错误,通过返回值来表示函数执行的成功或失败:

    result, err := someFunction()
    if err != nil {
        fmt.Println("Error:", err)
    }
    

总结

通过这段时间的学习,我也初步了解了C++程序员学习Go语言的过程。在Go语言中,我发现了一些熟悉的概念,同时也有许多从未见过的新特性,如果你有C/C++程序的编写经验,那么学习Go语言的压力并不算很大。Go以其简洁性、高效性和并发性而受到广泛赞誉,所以在各个方面的应用也越来越多,尤其是在web编程的后端方面使用率愈发提升,通过对它的学习一定能受益良多。


希望我的分享能够成功展示出我学习Go语言的过程,也为阅读文章的你提供一些经验。如果你有任何问题,欢迎随时向我提问。在学习新的编程语言时,始终保持热情和好奇心,相信一定会取得不错的成果!