Go入门学习|青训营笔记
这是我参与的「第五届青训营 」笔记创作活动的第1天
一、本堂课重点内容:
- 为什么要使用Go
- Go的基本语法
二、详细知识点介绍:
-
Go的特性
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
-
Go的语法特点
-
Go的基本布局与用法
-
Go语言通过包来进行组织。 main包比较特殊,其定义了一个独立可执行的程序,不是一个库,它是整个程序的入口。 Import 声明必须跟在package声明后面。 package:“包”,指:类所在的包 import:“引入”,指:引入类中需要的类。
- 必须告诉编译器源文件需要哪些包,这就是跟随在package声明后面的import声明扮演的角色。hello world例子只用到了一个包,大多数程序需要导入多个包。
- 必须恰当导入需要的包,缺少了必要的包或者导入了不需要的包,程序都无法编译通过。这项严格要求避免了程序开发过程中引入未使用的包
-
-
Go的基本语法
-
if-else 判断结构:没有括号,同时大括号必须与if一行(这一点和C语言不同,需要注意)
-
循环只有for,没有while
-
switch case :不用加break,对于变量可以使用任意数据类型,很方便
-
数组:声明方式:
var a [5]int,表示声明了长度为5的整型数组 -
切片:可变长度的数组,声明方式:
a = make ([]int,5),表示声明了长度为5的整型切片 -
map:哈希字典,声明方式:
mp = make (map[string]int),其内部是乱序的,随机输出,操作有增删查改,append,delete,以及支持k-v索引式的修改 -
range:常用于for循环语句,得到第一个是索引,第二个是值
-
函数:关键字为func, 参数的类型放后面,参数本身在前面,这一点和Mysql很像,返回值有bool类型的ok,表示是否存在或是是否有错误
-
指针:用于传进函数内部,进行修改结构体的值或者调用者内部的值
-
结构体:声明
type user struct { name string password string }如果是JSON类型需要将name、password变量首字母大写
支持索引修改结构体内部的变量
var d user d.name = "wang" d.password = "1024" -
结构体方法:需要在func后面加上结构体参数,这一点与c++不同
type user struct { name string password string } func (u user) checkPassword(password string) bool { return u.password == password } func (u *user) resetPassword(password string) { u.password = password } -
错误处理:在参数中加一个error类型,如果出错就返回一个
error.new("错误信息"),未出错就返回nilfunc 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")
-
-
三、实践练习例子:
-
神奇的字符串操作
package main import ( "fmt" "strings" ) func main() { a := "hello" fmt.Println(strings.Replace(a, "e", "E", -1)) // hEllo // 1. a[1] = 'E' 错误操作 b := "你好" fmt.Println(len(b)) // 6 // 2. 长度为6为什么不是2,如何才能获得中文的长度呢,如果是“hello,世界”,该怎么获得其长度? fmt.Println(len([]rune(b))) // 2 }伴随着上面的几个问题,我对字符串进行了深入了解
// string is the set of all strings of 8-bit bytes, conventionally but not // necessarily representing UTF-8-encoded text. A string may be empty, but // not nil. Values of string type are immutable. type string string -----------------------------------可以翻译为:string是8位字节的集合,通常但不一定代表UTF-8编码的文本。string可以为空,但不能为nil。string的值是不能改变的
但是可以通过内置的方法修改,如
Replace下一个问题中文字符的问题应该怎么解决?
1.byte类型 byte类型是uint8的别名,表示一个字节, 2.rune类型 rune类型是Go语言中的一个基本类型,其实就是一个int32的别名,主要用于表示一个字符类型大于一个字节小于等于4个字节的情况下,特别是中文字符。对于英文字符串,不管是用rune类型还是byte类型,不管是字符串的长度还是取值,都是相同的。2).对于中文字符来说,rune类型的操作就比byte类型的操作更加友好很多,我们可以通过[:]操作直接取出中文的对应数量。
- 经典的Hello world
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
麻雀虽小五脏俱全,这是每个入门程序员第一个接触到的程序,首先指明该包的位置是在main里,定义了程序的入口,其次该包调用了fmt包,用于格式化输出,接着是用括号进行限制,最后是一个main函数,调用fmt包里的Println函数进行字符串打印。
运行方式:在终端窗口输入:go run ./main.go或者是先编译为exe文件在进行运行:go build ./main.go,接着对于生成的exe文件,执行:./main.exe
四、课后个人总结:
- JSON的处理还不是很清楚,后面需要继续学习