这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
Go语言基础语法
首先通过一段简单的代码了解Go语言
package main
import (
"fmt"
)
func main() {
fmt.Println("HelloWorld")
}
其中package main表示该程序为main包(main即为整个项目的入口包)
improt("fmt")则表示导入标准库里面的 fmt 包,此包主要是用来往屏幕输入输出字符串,格式化字符串。
fmt.Println("HelloWorld")即为输出 HelloWorld 字符串。
(将鼠标在代码上悬停一秒,可看到关于此代码(函数)的文档,下面的链接将会跳转到pkg.go.dev,能看到整个包的文档,可在其中挑选所需函数。
变量的声明
var name = "abc"此方式声明变量一般可自动推导变量类型,若有需要,可明示变量类型,如var b,c int = 1 , 2
另一种方式name := float32(e);
常量声明:const d = 10000(也可根据上下文自动推导类型,若要确定类型,则可用const e string = "constant"。
if else语句
if后的判断无须添加括号,并且后面的执行内容前后必须又大括号包括进去。
switch的判别与if else的判别一致(无须加括号),须注意的是case之间无须使用break分隔,默认只执行第一个case。
循环
Go语言中只有for循环,判别语句以及后续内容与if else语句相同。
数组 切片
数组:var a[5]int,长度固定,使用少。
切片:s := make([]string, 3),可使用append追加元素,可由len()获取长度,也提供了计算容量的方法cap()。切片可索引。
map(集合)数据结构
定义:m := make(map[string]int)
delete()函数用于删除集合的元素,参数为map和其对应的key。map的输出为一个偏随机的输出。
range(语法范围)
对于一个切片(slice) 或者 集合(map) 等,可用range快速遍历。
对于数组,range会返回两个值,第一个是索引,第二个是对应位置的值。
对于集合(map),range的第一个值是 key ,第二个值是 value 。
函数
可返回多个值:return a,b
函数类型后置:
func add(a int, b int) int {
return a + b
}
指针
一个指针变量指向了一个值的内存地址, 与C语言用法相同。
结构体
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
type user struct {
name string
passward string
}
结构体的方法
在建立了如上结构体后:
func (u user) checkPassword(passward string) bool {
return u.passward == passward
}
该函数便变成一个类成员函数。
错误处理
如下示:
func findUser(users []user, name string) (v *user, err error) {
for _, u := range users {
if u.name == name {
return &u, nil
}
}
return nil, errors.New("not found")
}
字符串操作
len()函数可以返回一个字符串中字节数目;索引操作s[i]返回第i个字节的字节值,i必须满足0<=i<len(s)条件约束,超出则会导致panic异常。
子字符串操作s[i : j]基于原始的s字符串的第i个字节开始到第j个字节(并不包含j本身)生成一个新字符串。生成的新字符串将包含j-i个字节。
+操作符将两个字符串连构造成一个新字符串(与C++相同);
除+外,== < +=等均与C++相似。
字符串是不可修改的,因此尝试修改字符串内部数据的操作也是被禁止的。 字符串格式化:
fmt.Println(s,n)可打印任意字符串。
fmt.Printf()类似于C语言中的printf(),可用printf("%v")打印任意类型的变量。(用"%+v"得到较详细的结构,用"%-v"进一步详细。
JSON处理
对于一个结构体(结构体中每个字段的第一个字段为大写),那么该结构体便可用json.Marshal(name)序列化。(输出时用string类型转换才能打印出字符串,否则只能打印出16进制类型的编码)
序列化的字段也可以用json.Unmarshal来反序列化到一个空的变量里面。
时间处理:
time.Now()等。
数字解析:
"strconv"包中相关内容
进程信息:
os.Args,os.Getenv("PATH"),os.Setenv("AA","BB"),exe.Command("grep","127.0.0.1","/etc/hosts").CombinedOutput()等。