这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
Go-Day03
1.复习已学知识
- Go中定义变量,使用var进行定义变量,const用于定义常量,go支持类型自动推断,:=定义变量的简洁写法
- Go中使用if else,不需要加()
- Go中使用循环,只存在for这一种循环语句
- Go中switch语句,不需要加break,Go中case不存在穿透性这点跟Java不一样!支持任意类型
- Go中使用数组,真实开发场景很少使用数组,因为他的长度固定,使用Go中的切片进行替代
- Go中使用切片,使用make创建切片,使用跟数组一样,可以使用copy()拷贝A切片到B切片
2.继续学习走进Go语言基础语言的课程
- Go中map的使用,实际开发中使用最频繁的数据结构,在Java中叫HashMap,使用make创建map,需要指定俩个类型,第一个指定是key的类型,第二个指定的是value的类型,使用[]语法进行存取值,使用delete删除map中的元素,使用ok判断元素是否存在,Go中map是无序的
package main
import "fmt"
func main() {
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
fmt.Println(m) // map[one:1 two:2]
fmt.Println(len(m)) // 2
fmt.Println(m["one"]) // 1
fmt.Println(m["unknow"]) // 0
r, ok := m["unknow"]
fmt.Println(r, ok) // 0 false
delete(m, "one")
m2 := map[string]int{"one": 1, "two": 2}
var m3 = map[string]int{"one": 1, "two": 2}
fmt.Println(m2, m3)
}
- Go中range的使用,切片和map可以使用range进行快速的遍历
package main
import "fmt"
func main() {
nums := []int{2, 3, 4}
sum := 0
for i, num := range nums {
sum += num
if num == 2 {
fmt.Println("index:", i, "num:", num) // index: 0 num: 2
}
}
fmt.Println(sum) // 9
m := map[string]string{"a": "A", "b": "B"}
for k, v := range m {
fmt.Println(k, v) // b 8; a A
}
for k := range m {
fmt.Println("key", k) // key a; key b
}
}
- Go中函数的使用,也就是Java中的方法
package main
import "fmt"
func add(a int, b int) int {
return a + b
}
func add2(a, b int) int {
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中指针的使用,用于对常用参数的修改
package main
import "fmt"
func add2(n int) {
n += 2
}
func add2ptr(n *int) {
*n += 2
}
func main() {
n := 5
add2(n)
fmt.Println(n) // 5
add2ptr(&n)
fmt.Println(n) // 7
}
- Go中结构体的使用,有点像Java定义对象的感觉
package main
import "fmt"
type user struct {
name string
password string
}
func main() {
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}
fmt.Println(checkPassword(a, "haha")) // false
fmt.Println(checkPassword2(&a, "haha")) // false
}
func checkPassword(u user, password string) bool {
return u.password == password
}
func checkPassword2(u *user, password string) bool {
return u.password == password
}
总结
1.通过了今天的学习了解Go中map,它是实际开发中使用最频繁的数据结构之一,跟Java中的Java的hashmap类似,Go中Map是无序的;
2.使用range关键字可以快速的遍历数组和切片、map;
3.学会了在Go中定义函数,并且认识了指针;
4.在Go中认识了结构体,类似于Java的对象的概念,学会了定义结构体.