走进Go语言学习 | 青训营笔记

51 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

本堂课重点内容

  1. go语言特点
  2. 基础语法

详细知识点介绍

go语言特点

  1. 高性能、高并发
  2. 语法简单、学习曲线平缓
  3. 丰富的标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收

使用net/http包来处理http请求,代码简便 image.png

基础语法

1.hello world

image.png

2.编译、运行

  1. 编译go build main.go
  2. 运行./main
  3. 编译+运行go run main.go

image.png

3.变量

var a int
var str = "mystring"
str := "golang"
const str string = "mystring"
const h = 100

image.png

4.ifelse

if {
} else {
}

image.png

5.循环

for {}
for i := 0;i < 10;i ++ {}
for i < 10 {}

image.png

6.switch

switch a{
    case 1:
    case 2:
    default:
}
switch{ // 使用switch是实现一连串的ifelse
    case a < 10:
    default:
}

image.png

7.数组

数组是值类型。 数组是定长的,一经定义长度不可再变

var a [5]int
a[1] = 19
len(a) // 5
var arr [2][3]int

image.png

8.切片

切片是引用类型。 切片是对定长数组的引用,长度可变。 切片必须要make才能使用,make之后会创建一个数组,然后返回引用这个数组的切片。

s := make([]string,3) // 创建一个长度为3的字符串数组切片
s = s.append(s,"d") // 增加切片元素
c := make([]string,len(s))
copy(c,s) // 复制s切片内容到c切片

image.png

9.map

m := make(map[string]int)
m["one"] = 1
r,ok := m["one"]
delete(m,"one")

image.png

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

image.png

11.函数

func add(a,b int) int {}

image.png

12.指针

image.png

13.结构体

image.png

14.结构体方法

go中的结构体方法类似于java语言中的类成员方法,实现了结构体方法的结构体实例可以直接调用结构体方法,不需要传参。 说到参数,参数的传递也有两种,一种是传递一个值,值传递的话在方法中改变形参的内容不会影响本体,方法中修改的只是副本。第二种是传递一个指针,本质就是传递一个地址,地址传递的话在方法中改变形参的值会影响本体的内容。两种传递的本质都是实参与形参之间的值拷贝,只不过如果传递的是地址,源地址和副本地址指向的都是本体。

func (u user) add() int {}
var u user
u.a = 10
u.b = 1024
u.add()

image.png

15.错误处理

import(
    "errors"
)
erroes.New("not found")

image.png

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)  // 转小写

image.png

17.字符串格式化

image.png

18.JSON处理

buf,err := json.Marshal(a) // 将结构体串行化为[]byte数组
buf,err := json.MarshalIndent(a,"","\t") // 串行化+格式控制
var b mystruct
err = json.Unmarshal(buf,&b) // 将buf反串行化到指定结构体中

image.png

19.时间处理

time.Now()
t =: time.Date(2022,3,27,1,25,36,0,time.UTC)
t.Year()
t.Day()

image.png

20.数字解析

image.png

21.进程信息

os.Args
os.Getenv("PATH")
os.Setenv("AA","BB")
exec.Command("grep","127.0.0.1","/etc/hosts").CombineOutput()

image.png

课后个人总结

本节课主要是go语言的一些常用基础语法,最难理解的是切片和调用者函数,即结构体方法。我觉得对于go语言的理解可以结合c语言的相关知识来理解,例如值传递,地址传递的区别和联系,可以结合C语言的相关知识来辅助理解。还有就是对于一些常用的标准库,要多多使用,多多熟练才行。