这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
本堂课重点内容
- go语言特点
- 基础语法
详细知识点介绍
go语言特点
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
使用net/http包来处理http请求,代码简便
基础语法
1.hello world
2.编译、运行
- 编译
go build main.go - 运行
./main - 编译+运行
go run main.go
3.变量
var a int
var str = "mystring"
str := "golang"
const str string = "mystring"
const h = 100
4.ifelse
if {
} else {
}
5.循环
for {}
for i := 0;i < 10;i ++ {}
for i < 10 {}
6.switch
switch a{
case 1:
case 2:
default:
}
switch{ // 使用switch是实现一连串的ifelse
case a < 10:
default:
}
7.数组
数组是值类型。 数组是定长的,一经定义长度不可再变
var a [5]int
a[1] = 19
len(a) // 5
var arr [2][3]int
8.切片
切片是引用类型。 切片是对定长数组的引用,长度可变。 切片必须要make才能使用,make之后会创建一个数组,然后返回引用这个数组的切片。
s := make([]string,3) // 创建一个长度为3的字符串数组切片
s = s.append(s,"d") // 增加切片元素
c := make([]string,len(s))
copy(c,s) // 复制s切片内容到c切片
9.map
m := make(map[string]int)
m["one"] = 1
r,ok := m["one"]
delete(m,"one")
10.range
num := []int{2,3,4}
for i ,num := range nums {}
m := map[string]string{"a":"A","b","B"}
for k,v := range m {}
for k := range m {} // key
11.函数
func add(a,b int) int {}
12.指针
13.结构体
14.结构体方法
go中的结构体方法类似于java语言中的类成员方法,实现了结构体方法的结构体实例可以直接调用结构体方法,不需要传参。 说到参数,参数的传递也有两种,一种是传递一个值,值传递的话在方法中改变形参的内容不会影响本体,方法中修改的只是副本。第二种是传递一个指针,本质就是传递一个地址,地址传递的话在方法中改变形参的值会影响本体的内容。两种传递的本质都是实参与形参之间的值拷贝,只不过如果传递的是地址,源地址和副本地址指向的都是本体。
func (u user) add() int {}
var u user
u.a = 10
u.b = 1024
u.add()
15.错误处理
import(
"errors"
)
erroes.New("not found")
16.字符串操作
a := "hello"
strings.Contains(a,"ll") // a是否包含指定字符串
strings.Count(a,"l") // 指定字符的数量
strings.HasPrefix(a,"he") // 是否以指定字符串为前缀
strings.HasSuffix(a,"llo") // 是否以指定字符串为后缀
strings.Index(a,"ll") // 返回指定字符串在字符串的起始位置
strings.Join([]string{"he","llo"},"-") // 将string数组中的元素以指定字符串连接
strings.Repeat(a,2) // 重复字符串指定次数
strings.Replace(a,"e","E",-1) // 替换
strings.Split("a-b-c","-") // 分割
strings.ToLower(a) // 转大写
strings.ToUpper(a) // 转小写
17.字符串格式化
18.JSON处理
buf,err := json.Marshal(a) // 将结构体串行化为[]byte数组
buf,err := json.MarshalIndent(a,"","\t") // 串行化+格式控制
var b mystruct
err = json.Unmarshal(buf,&b) // 将buf反串行化到指定结构体中
19.时间处理
time.Now()
t =: time.Date(2022,3,27,1,25,36,0,time.UTC)
t.Year()
t.Day()
20.数字解析
21.进程信息
os.Args
os.Getenv("PATH")
os.Setenv("AA","BB")
exec.Command("grep","127.0.0.1","/etc/hosts").CombineOutput()
课后个人总结
本节课主要是go语言的一些常用基础语法,最难理解的是切片和调用者函数,即结构体方法。我觉得对于go语言的理解可以结合c语言的相关知识来理解,例如值传递,地址传递的区别和联系,可以结合C语言的相关知识来辅助理解。还有就是对于一些常用的标准库,要多多使用,多多熟练才行。