这是我参与「第五届青训营 」笔记创作活动的第5天
基础语法
指针
Go语言也支持指针,但相比C/C++,这里支持的指针操作非常的有限。指针的一个主要用途就是对传入的参数进行修改。
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
}
结构体
结构体是带类型的字段的集合
下面是声明一个结构体user。
type user struct {
name string
password string
}
下面是一些初始化的方法。如果没有对一个结构体初始化,或者只对部分元素初始化,那么结构体元素将使用默认值,自动初始化为0或者空串。可以使用.来访问结构体元素。
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
}
结构体方法
在Golang里可以为结构体去定义一些方法,非常类似于其他语言里的类成员函数。也有指针与非指针两种写法。
下面是声明一个结构体,元素为name和password
type user struct {
name string
password string
}
下面是声明一个check用户密码是否匹配的函数方法
func (u user) checkPassword(password string) bool {
return u.password == password
}
下面是声明一个用于修改或者重置用户密码的函数方法
func (u *user) resetPassword(password string) {
u.password == password
}
func main() {
a := user{name: "wang", password: "1024"}
a.reserPassword("2048")
fmt.Println(a.checkPassword("2048")) // true
}