这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
本堂课的重点
- go语言的特点和优势
- go的基本语法
详细内容
什么是 Go 语言
Go 语言是由 Google 开发的一门跨平台的编程语言,最早在2009年发布。
Go 语言具有如下特点:
- 高性能、高并发。
- 丰富的标准库。Go 语言提供了大量高质量的标准库。
- 完善的工具链。在编译、格式化、质量检查、包管理、测试等方面拥有完善的工具链。
- 静态链接。在代码编译之后以单个可执行文件作为构件,可将该可执行文件直接部署。
- 快速编译。编译速度较快(相比于c++),同时支持增量编译。
- 跨平台。可以在几乎所有的平台、架构下运行。同时自带交叉编译。
- 垃圾回收。无需考虑内存管理。
go的变量形式与声明
四种声明方式:
var a = "initial"
var b, c int = 1, 2
var e float64
f := float32(e)
tips:用=一定有var,而是否写变量的类型其实都可以,只要后面接了值。
常用3、4种声明方式,一种是有初始值的声明,一种是没有初始值的声明。
变量类型:大致和c++类似,int,int64,float32,float64、bool、emum等。
循环
for init;condition;next;
只有for一种,上面这三个部分,任意去掉一个、两个或者全部去掉,都是可以的。
if 与 switch
switch 变量 {
case value:
fmt.Println("one")
switch的用法:如果switch后面接了变量,那么判断变量与value是否相等,如果没有接变量,那么判断value是否非false。
tips:fallthrough,可用于替代if语句
array slice 和 map
声明方法:
s := make([]string, 3)
m := make(map[string]int)
copy(c, s) //复制slice
扩容机制
range
range用法:
for index, value := range nums{
}
for key, value := range map {
}
func point struct struct-method
对比下面两组区别: 谁是在做无用功
func checkPassword(u user, password string) {
u.password == password
}
func checkPassword2(u *user, password string) {
u.password == password
}
func (u user) checkPassword(password string) {
u.password = password
}
func (u *user) resetPassword(password string) {
u.password = password
}
常用库
errors库的使用:errors.New("string")
string库:
a := "hello"
fmt.Println(strings.Contains(a, "ll")) // true
fmt.Println(strings.Count(a, "l")) // 2
fmt.Println(strings.HasPrefix(a, "he")) // true
fmt.Println(strings.HasSuffix(a, "llo")) // true
fmt.Println(strings.Index(a, "ll")) // 2
fmt.Println(strings.Join([]string{"he", "llo"}, "-")) // he-llo
fmt.Println(strings.Repeat(a, 2)) // hellohello
fmt.Println(strings.Replace(a, "e", "E", -1)) // hEllo
fmt.Println(strings.Split("a-b-c", "-")) // [a b c]
fmt.Println(strings.ToLower(a)) // hello
fmt.Println(strings.ToUpper(a)) // HELLO
fmt.Println(len(a)) // 5
b := "你好"
fmt.Println(len(b)) // 6
fmt库:所有的类型都能用%v,%+v和%#v表示详细内容。%.2f表示保留几位小数 time库: strconv库:
f, _ := strconv.ParseFloat("1.234", 64)
fmt.Println(f) // 1.234
n, _ := strconv.ParseInt("111", 10, 64)
fmt.Println(n) // 111
n, _ = strconv.ParseInt("0x1000", 0, 64)
fmt.Println(n) // 4096
n2, _ := strconv.Atoi("123")
fmt.Println(n2) // 123
n2, err := strconv.Atoi("AAA")
fmt.Println(n2, err) // 0 strconv.Atoi: parsing "AAA": invalid syntax
os库: 这部分有点像python
fmt.Println(os.Args) // [/var/folders/8p/n34xxfnx38dg8bv_x8l62t_m0000gn/T/go-build3406981276/b001/exe/main a b c d]
fmt.Println(os.Getenv("PATH")) // /usr/local/go/bin...
fmt.Println(os.Setenv("AA", "BB"))
buf, err := exec.Command("grep", "127.0.0.1", "/etc/hosts").CombinedOutput()
if err != nil {
panic(err)
}
fmt.Println(string(buf)) // 127.0.0.1 localhost
课后个人总结:
总体来说,go语言简洁易懂,有点像python和c++的混搭。