Archlinux GO语言的配置和GO的基本语法|青训营

382 阅读5分钟

Archlinux GO语言的配置和GO的基本语法|青训营


在Archlinux中配置GO环境:

在Archlinux中配置GO语言环境比较简单,可以通过查看Archlinux wiki获得详情Arch Linux wiki
我们只需要安装go语言包:
sudo pacman -S go

在VScode中配置GO环境:

首先在Arch Linux中安装VScode
yay -S visual-studio-code-bin
然后我们可以参照:为 Go 开发配置Visual Studio Code 来配置环境,步骤如下:

安装 Go 扩展:

在Visual Studio Code中,单击活动栏中的“扩展”图标,打开“扩展”视图。 或者使用键盘快捷方式 (Ctrl+Shift+X) 。
搜索 Go 扩展,然后选择“安装”
Screenshot_20230727_161337.png

更新 Go 工具

在Visual Studio Code中,打开命令面板“帮助>显示所有命令”。 或者使用键盘快捷方式 (Ctrl+Shift+P) 搜索 ,然后从托盘运行命令
Screenshot_20230727_161753.png 出现提示时,选择所有可用的 Go 工具,然后单击“确定”。
Screenshot_20230727_161833.png 等待 Go 工具完成更新。
注意:遇到网络问题多试几次即可:
Screenshot_20230727_164916.png

编写GO程序:

在Visual Studio Code中,打开将在其中创建 Go 应用程序的根目录的文件夹。 若要打开文件夹,请单击活动栏中的资源管理器图标,然后单击“ 打开文件夹”。
单击“资源管理器”面板中的“ 新建文件夹 ”,然后为名为 的示例 Go 应用程序创建根控制器 sample-app
单击“资源管理器”面板中的“ 新建文件 ”,然后为该文件命名 main.go
打开终端 “终端 > 新建终端”,然后运行 命令 go mod init sample-app 来初始化示例 Go 应用。
将以下代码复制到 文件中 main.go

package main

import "fmt"

func main() {
    name := "Go Developers"
    fmt.Println("Azure for", name)
}

运行调试器:

通过单击编号行左侧的左侧,在第 7 行创建断点。 或者将光标放在第 7 行并点击 F9。
单击Visual Studio Code一侧的活动栏中的调试图标,打开“调试”视图。 或者使用键盘快捷方式 (Ctrl+Shift+D) 。
单击“ 运行并调试” ,或按 F5 运行调试器。 然后将鼠标悬停在第 7 行上的变量 name 上以查看其值。 单击调试器栏上的“ 继续 ”或按 F5 退出调试器。

GO语言基本语法

GO作为21世纪的C语言在语法上和C有很大的相似之处,这里我简单叙述一些比较特别的语法。

package

GO语言的第一行代码:

package main

Go语言使用包来组织源代码的,并实现命名空间的管理,任何一个Go语言程序必须属于一个包,即每个Go程序的开头要写上package <pkg_name>
同一个目录下的同级的所有go文件应该属于一个包,即每一个文件夹下应该属于同一个包,包名建议使用文件夹名。
每个Go项目都应该有一个main函数,且必须属于main包。main函数是程序的入口。
注:函数名首字母大写,就能被外部调用

语法

go的语法相较于C的一个特殊变化就是靠后,比如变量命名时类型靠后,函数返回值靠后,就连数组的长度也是靠后(靠近类型)的。 至于为什么会有这样的现象呢,可以看一下下面的链接: GO的声明语法

摘选:著名的例子是声明函数指针。遵循规则,你会得到这个: int (*fp)(int a, int b); 这里,fp 是一个指向函数的指针,因为如果您编写表达式 (*fp)(a, b),您将调用一个返回 int 的函数。如果 fp 的参数之一本身就是一个函数怎么办? int (*fp)(int (*ff)(int x, int y), int b) 这开始变得难以阅读。

go语法的另一个特点是省略,最明显的就是for语句,他的三个部分(init; condition; increment)都可以省略,当他三个都省略的时候,就成了一个死循环。
省略的另一方面是括号的省略,包括函数括号的省略,for的圆括号的省略,if语句的判断部分的省略等。

切片

切片(slice)指的是一个动态数组,他和数组的主要区别就是不定长,在实际开发中更频繁的被使用。
可以使用make创建一个切片(当然也可以使用var,你可以声明一个未指定大小的数组来定义切片)

var identifier []type
var slice1 []type = make([]type, len)

也可以简写为

slice1 := make([]type, len)

可以使用copy快捷的在两个切片间拷贝

s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"

c:= make([]string, len(s))
copy(c, s)

切片拥有和Python总差不多的切片操作,如s[1:3],主要区别是不支持复数(但是支持步长)。

fmt.Println(s) // [a,b,c,d,e]
fmt.Println(s[1:4]) // [b,c,d]
fmt.Println(s[::2]) // [a,c,e]

结构体方法

结构体方法类似于其他语言中的类成员函数
在 Go 语言中,方法的定义方式与函数的定义方式非常相似,唯一的区别在于方法需要在其名称前面加上接收者。

type People struct{
    name string
    age int
}
func (p People) Hello() {
    fmt.Printf("Hello,%s,your age is %d", p.name, p.age)
}
func (p *People) ChangeAge() {
    p.age = p.age + 1
}

结构体方法和函数相同,如果想要改变结构体本来的值,需要加上指针,也可以避免大数据量时的拷贝

错误处理

在GO中,习惯是使用一个单独的返回值来传递错误信息

注:附Go官网指南(中文版)GO语言之旅