day2 go语言基础 | 青训营

47 阅读2分钟

昨天的笔记没有记录全基础部分,今天再写一篇。

1.map(映射)

map类似于字典或者哈希,存储键值对 创建一个map,在这里使用make函数创建是一个不错的方式

	s := make(map[string]int)
	s[`one`] = 1
	fmt.Println(s[`one`])

当然也可以用下面这种方式在初始化时直接赋值,需要注意的是,即使是只有一个元素也需要有逗号

s := map[string]int{
	"one":1,
}
	fmt.Println(s["one"])

一些其他应用

val, ok := m[key] // 若键存在,ok为true,val为对应的值;若键不存在,ok为false,val为零值
delete(m, key) // 根据键删除键值对
//循环遍历
for key,value := range s{
	fmt.Println(key,value)
}

2.range

在这里只写一下对数组的遍历,因为会返回索引值,如果不想要索引值,用下划线取代即可忽略

	s := []int{1,2,3,4}
	for _,num := range s{
		fmt.Println(num)
	}
        

3.函数

go里面喜欢把数据类型写在后面,比如新建一个map:

s:= map[string]int

在创建函数时也一样,函数的返回值类型是写在参数列表后面,如果是多个返回值就用括号,并且根据老师所说在实际应用中一般都是多返回值

func add1(a int,b int)int{
	return a+b
}

func add2(a,b int){
	fmt.Println(a+b)
}
func exist(m map[string] int, k string) (v int,ok bool){
	v,ok = m[k]
	return v,ok
}

4. 指针

指针主要的作用是对传入的参数进行修改,例如第一个函数就只是对参数的拷贝进行操作,第二个函数使用了指针才能实现真正的修改

func add2(n int){
	n += 2
}
func add2ptr(n *int){
	*n += 2
}
func main() {
	m := 2
	add2(m)
	fmt.Println(m)
	add2ptr(&m)
	fmt.Println(m)
}

5.结构体

从上面指针那里得出,传入的参数在函数中会进行一份拷贝再进行其他操作,因此在这里如果传入的参数是结构体,可以使用指针,避免拷贝大结构体带来了资源的消耗

type user struct {
	name   string
	passwd string
}

func checkPasswd(u *user, passwd string) bool {
	return u.passwd == passwd
}
func main() {
	var a = user{`xm`, `12345`}
	b := user{name: `xm`, passwd: `12345`}
	var c user
	c.name = `xm`
	c.passwd = `12345`

	fmt.Println(a, b, c)
	fmt.Println(checkPasswd(&c,`1234`)) 

}

下面记录一下结构体函数,类似类的成员函数,可以用a.xxx这种形式使用

type user struct {
	name   string
	passwd string
}

func (u *user) resetPasswd(passwd string){
	u.passwd = passwd
}
func(u *user) chechPasswd(passwd string) bool{
	return u.passwd == passwd
}
func main() {
	var a = user{`xm`, `12345`}
	a.resetPasswd(`123`)
	fmt.Println(a.chechPasswd(`12345`))
}