零基础学习Go的Day03| 青训营笔记

94 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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的对象的概念,学会了定义结构体.