Golang
中的struct
有點跟Java
中的類類似.指針
管他什麼特性不特性的,先來段代碼.看看跟學過的其餘語言有啥區別.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關鍵字來定義一個類型.好比這裏的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
中的name
和age
字段都是非導出字段.那麼若是咱們要在不一樣的包中對其的值進行修改怎麼辦呢?
這個時候咱們就能夠寫上跟Java
中setter
和getter
方法.以下class
func (stu *Student) setName(name string) { stu.name = name } func (stu *Student) getName() string { return stu.name }
一個Golang
初學者,記錄的東西不免有錯誤,還望多多指出啊.謝謝.import