零基础之go语言2 | 青训营笔记

59 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天 

上个笔记记到切片了,这次从map开始

go语言2:

语法

map

遵循数据结构,golang的map也由key与value组成
golang 中的 map,的 key 可以是很多种类型,比如 bool, 数字,string, 指针, channel ,还可以是只包含前面几个类型的 接口, 结构体, 数组。

声明一个map: var m map[string]string

使用map前,需要make给map分配数据空间

    a := make(map[string]string, 10) 
    a["no1"] = "hello" 
    a["no2"] = "world" 
    fmt.Println(a)
    运行结果:map[no1:hello no2:world]

    //[]内的内容为key,而=后的内容为value,key不可重复,value可重复
    //与java相同,golang的map是无序的
    

map的定义如下

  1.      声明过程中直接赋值:
         a := map[string]string{
              a["k1"] = "V1"
              a["k2"] = "V2"
         }
    
  2.      使用:=直接赋值
         a := make(map[string]string, 10) 
         a["no1"] = "hello" 
         a["no2"] = "world"
    

range

    对于slicemap,可以用 range 来快速遍历。
    range 遍历的时候,对于数组会返回两个值,第一个是索引,第二个是对应位置的值。
    如果不需要索引的话,可以用"_"填充

一个例子:

number := []int{1, 2, 3, 4, 5, 0}
sum := 0
for i, num := range number {
   sum += num
}
fmt.Println("sum is ", sum)
结果为:sum is  15

对比java

golang的range与java中的迭代器非常相同
对于上面代码的for循环中
i, num := range number
这里i,num分别对于range遍历时的索引和值
但是java中的值却不是显式的,需要程序员自己通过索引找到值

指针

在java中,指针的概念并不明显,甚至可以说指针是隐式的,java的开发是无法像c一样对指针调试
而golang,能用于显式调整指针。但与c相比,支持的操作很有限。go中指针的一个主要用途就是对于传入参数进行修改。

在函数中传入要改变变量的地址,在函数内用*+参数改变变量

如图

image.png

结果

image.png

结构体

golang的结构体与c语言的非常相似。
在java中我并没有用过结构体这一概念,通常我会创建一个public的class类成员来代替结构体。

以下代码分别写出了三种定义结构体的方法
var a user
a.name = "kukuku"
a.pwd = "1128"

b := user{name: "luolou", pwd: "123456"}

c := user{"miao", "2048"}

d := user{name: "justName"}

fmt.Println(a, b, c, d)

结果:{kukuku 1128} {luolou 123456} {miao 2048} {justName }

结构体方法

结构体方法,顾名思义就是某个结构体所含有的方法,类比java来说,结构体就是一个类,而结构体方法就是该类里面的各种方法

现为上面的结构体user定义两个方法:修改密码、验证密码

func (u *user) reset(pwd string) {
   u.pwd = pwd
}
func (u user) check(pwd string) bool {
   return u.pwd==pwd
}

在main函数执行增添以下代码:
a.reset("011128")
println(a.check("123456"))
输出结果为false