这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
一、本堂课重点内容:
- 变量
- 循环
- 条件判断
- 分支
- 数组
- 切片
- map
- 遍历
- 函数
- 指针
- 结构体
- 结构体方法
- 错误
- 字符串
- 输出
- json串
- 字符串与数字转换
- 进程
- 项目
- 猜数字
- 字典
- socks5代理
二、详细知识点介绍:
Go 语言的基础组成有以下几个部分:
包声明 引入包 函数 变量 语句 & 表达式 注释
package main
import "fmt"
func main() {
/* 这是我的第一个简单的程序 */
fmt.Println("Hello, World!")
}
- 第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
- 下一行 import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。
- 下一行 func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。
- 下一行 /.../ 是注释,在程序执行时将被忽略。单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。
- 下一行 fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。
使用 fmt.Print("hello, world\n") 可以得到相同的结果。
Print 和 Println 这两个函数也支持使用变量,如:fmt.Println(arr)。如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台。 - 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。
-
变量
- 声明变量有4种方法
var a = "initial" //var 变量名 = 变量值 var b, c int = 1, 2 //var 变量名 变量类型 = 变量值 (变量类型可省略) var d float64 //var 变量名 变量类型 d = 3.14 //赋值 f := float32(e) //变量名 := 变量值 -
循环
- 死循环
for { fmt.Println("loop") break }- 普通循环
for j := 7; j < 9; j++ { fmt.Println(j) }* 循环没有小括号
-
条件判断
- 单条件判断
if 7%2 == 0 { fmt.Println("7 is even") } else { fmt.Println("7 is odd") }* 条件判断没有小括号
- 多条件判断
if num := 9; num < 0 { fmt.Println(num, "is negative") } else if num < 10 { fmt.Println(num, "has 1 digit") } else { fmt.Println(num, "has multiple digits") } -
分支
- 分支
switch a { case 1: fmt.Println("one") case 2: fmt.Println("two") case 3: fmt.Println("three") case 4, 5: fmt.Println("four or five") default: fmt.Println("other") }* 没有break
-
数组
- 声明
var a [5]int a[4] = 100 b := [5]int{1, 2, 3, 4, 5} -
切片
- Go 语言切片是对数组的抽象。slice
- 声明
s := make([]string, 3)* 理解的话,就像C++中的vector,Java中的ArrayList
-
map
- Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
- 声明
m := make(map[string]int) m2 := map[string]int{"one": 1, "two": 2} var m3 = map[string]int{"one": 1, "two": 2}- 赋值
m["one"] = 1 m["two"] = 2- 输出
fmt.Println(m["one"]) // 1 fmt.Println(m["unknow"]) // 0 r, ok := m["unknow"] fmt.Println(r, ok) // 0 false- 删除
delete(m, "one") -
遍历
- Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。
- 格式
nums := []int{2, 3, 4} for i, num := range nums { fmt.Println("index:", i, "num:", num) // index: 0 num: 2 } m := map[string]string{"a": "A", "b": "B"} for k, v := range m { fmt.Println(k, v) // b 8; a A } -
函数
- Go 语言最少有个 main() 函数。你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。函数声明告诉了编译器函数的名称,返回类型,和参数。
- 声明
func add(a int, b int) int { //func 函数名(形参名 形参类型) 返回值类型{} return a + b } func exists(m map[string]string, k string) (v string, ok bool) { v, ok = m[k] return v, ok } func main() { res := add(1, 2) fmt.Println(res) // 3 v, ok := exists(map[string]string{"a": "A"}, "a") fmt.Println(v, ok) // A True } -
指针
- Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。
- 格式
func add2ptr(n *int) { *n += 2 } func main() { n := 5 add2ptr(&n) fmt.Println(n) // 7 }* 和C一样想在函数体里面更改函数外的变量,就要用到指针。
-
结构体
- Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
- 格式
type user struct { name string password string }- 声明输出
a := user{name: "wang", password: "1024"} b := user{"wang", "1024"} c := user{name: "wang"} c.password = "1024" var d user d.name = "wang" d.password = "1024" fmt.Println(a, b, c, d) // {wang 1024} {wang 1024} {wang 1024} {wang 1024} -
结构体方法
- 格式
func (u *user) resetPassword(password string) { u.password = password } func main() { a := user{name: "wang", password: "1024"} a.resetPassword("2048") fmt.Println(a.checkPassword("2048")) // true }* func (变量名 *变量类型) 变量名 (形参值 形参类型){}
* 理解起来就像类中方法 只不过分开了 -
错误
- 格式
err error = errors.New("not found") -
字符串
- Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
-
json串
- json
-
输出
- fmt
-
字符串与数字转换
- strconv
三、实践练习例子:
- 项目
- 猜数字
- 字典
- socks5代理
四、课后个人总结:
个人初始Go语言觉得难度还好,不算太难。只是觉得变量声明这里和其他语言确实不太一样。其他还好。
五、引用参考:
- 代码引用自课堂文件
- 相关介绍引用自菜鸟教程