Golang筆記之結構體和方法

Golang中的struct有點跟Java中的類類似.指針

struct

管他什麼特性不特性的,先來段代碼.看看跟學過的其餘語言有啥區別.code

package main

import (
    "fmt"
)

type Person struct {
    name string
    age  int
}
type Student struct {
    grade  string
    Person //匿名字段
}

func main() {
    stu := new(Student)
    var stu2 Student = Student{"一年級", Person{"Arya Stark", 15}}
    stu3 := Student{grade: "二年級", Person: Person{"Magicer", 32}}
    stu.grade = "三年級"
    stu.Person = Person{"Jon Snow", 33}
    fmt.Println(stu) //輸出  &{三年級 {Jon Snow 33}}
    //在這裏能夠直接stu.name得到匿名字段的值,也能夠stu.Person.name
    fmt.Println(stu.name, stu.age, stu.grade, stu.Person) //輸出Jon Snow 33 三年級 {Jon Snow 33}
    fmt.Println(stu2)                                     //輸出   {一年級 {Arya Stark 15}}
    fmt.Println(stu3)                                     //輸出   {二年級 {Magicer 32}}

}

Golang中沒有繼承,可是咱們能夠使用組合的方式來實現和繼承相似的效果.好比上面的代碼.咱們不能經過顯示的讓Student繼承自Person可是咱們能夠經過組合的方式來獲得這種效果.繼承

type

咱們能夠經過type關鍵字來定義一個類型.好比這裏的Person類型和Student類型.咱們還能夠經過type關鍵字來爲int等來設置別名 如type grade int.經過type關鍵字來定義的get

方法

先來段跟方法有關的代碼,看下Golang中的方法是個什麼鬼.string

package main

import (
    "fmt"
)

type Student struct {
    name string
    age  int
}

//值方法
//當咱們不須要在方法中使用這個結構的值的時候, 能夠使用_
func (_ Student) lean() {
    fmt.Println("Student lean")
} //指針方法
//這裏的(stu *Student)用來表示這個方法是屬於誰的.能夠位於不一樣的文件中,只要是在同一個包中就能夠
//在這裏咱們的stu是Student的指針,只有這時候咱們才能夠修改p的值,
// 當使用(stu Student)時,咱們使用的是一份copy.
func (stu *Student) eat(food string) {
    fmt.Println(stu.name, " eat ", food, "\t ", stu)
}
func main() {
    stu := new(Student)
    stu.eat("Apple") //student eat  Apple     &{ 0}
    stu.lean()       // Student lean

    var stu2 Student = Student{"Jason", 22}
    fmt.Println(stu2) //{Jason 22}
    stu2.eat("Apple") //Jason  eat  Apple     &{Jason 22}
}

咱們看到上面Student中的nameage字段都是非導出字段.那麼若是咱們要在不一樣的包中對其的值進行修改怎麼辦呢?
這個時候咱們就能夠寫上跟Javasettergetter方法.以下class

func (stu *Student) setName(name string) {
    stu.name = name
}
func (stu *Student) getName() string {
    return stu.name
}

一個Golang初學者,記錄的東西不免有錯誤,還望多多指出啊.謝謝.import

相關文章
相關標籤/搜索