青训营X豆包MarsCode 技术训练营|实践记录以及工具使用 Go 语言入门指南

23 阅读3分钟

Go语言和其他的高级语言一样,都是需要安装环境,也就是编译器,才能运行。Go语言安装:安装包下载地址为:go.dev/dl,安装完之后,还需要添加 Path 环境变量。安装好之后,可以创建一个目录,然后写一个go文件,如下所示:

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

go run命令执行,如果安装没问题就会显示Hello, World! 同时我们可以通过vscode来编写go文件,同时安装AI编程助手。

在语法上go程序与python程序一样,不需要写行分隔符,默认空白。在注释方面和java一样,采用了///* */。在变量命令方面和其他语言一样,不能是关键字等规则。在字符串拼接上,go语言和python、java语言一样可以通过“+”操作符进行拼接。

在数据类型上,go有数字类型、字符串类型、布尔型、派生类型。Go 的字符串是由单个char连接起来的。数据类型和其他编译语言差不多。在变量声明上,Go语言与JavaScript语言十分类似,都是用var定义的,区别是go语言是 var name type。同样在go语言中和JavaScript语言类似,有值类型和引用类型。值类型指的是直接在内存存储这个值,而引用类型只是在内存存储了指针,也就是引用(地址),实际上存储在别的地方。类似于操作系统的逻辑地址和物理地址的转换。

Go的常量定义和JavaScript一样,采用了const定义。在条件语句中,go语言的写法和python差不多,区别就是少了python的“:”。在函数定义方面,go采用了func function_name( [parameter list] ) [return_types]{ }。在数组定义上,go采用了”var arrayName [size]dataType”,初始化数组则可以采用var numbers = [5]int{1, 2, 3, 4, 5}。Go语言的指针定义为var var_name *var-type。而定义结构体和c语言差不多 type name struct{ name type},访问变量也是一样的采用xx.xx

在变量的垃圾回收算法上,go语言有过三个算法。在Go版本为1.3时候,go采用的是普通标记清除法,整体过程需要暂停所有应用程序的执行,以便进行全面的垃圾回收。这会导致较长的停顿时间,影响程序执行效率极低;在Go版本为1.5时候,采用了三色标记法, 堆空间启动写屏障,用于记录对象的引用变化。而栈空间不启动写屏障。在全部扫描之后,需要重新扫描一次栈(需要暂停所有应用程序的执行),相较于前一个版本效率提高不少,但是还需要停顿;在Go版本为1.8时候,Go语言采用了三色标记法结合混合写屏障机制, 栈空间不启动,堆空间启动。整个过程几乎不需要停顿,效率较高。

在我看来,Go语言在语法上和JavaScript语言很相似。但是JavaScript是一种单线程编程语言,主要通过事件循环和异步回调来处理并发。而Go语言支持并发编程,通过 goroutines 和 channels 实现轻量级的并发模型。goroutines 是用户级的轻量级线程,可以高效地管理和调度大量并发任务,而 channels 用于 goroutines 之间的通信和同步。在代码编写上,go语言和python语言一样写起来简单,比c、java等语言要少一些代码量,在执行效率上go语言比python语言要快,Go语言的强类型和静态编译特性提供了更好的类型安全性和错误检测,有助于减少运行时错误。