Go语言基础5 | 青训营笔记

65 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第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里可以为结构体去定义一些方法,非常类似于其他语言里的类成员函数。也有指针与非指针两种写法。 下面是声明一个结构体,元素为namepassword

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
}