4.Go-結構體、結構體指針和方法

 4.1.結構體

結構體:將一個或多個變量組合到一塊兒造成新的類型,這個類型就是結構體,結構體是值類型函數

定義結構體和賦值spa

//Learn_Go/main.go
package main

import "fmt"

type People struct {
	Name string
	Age int
}

func main()  {
	var peo People
	fmt.Println(peo)           //{ 0}
	fmt.Printf("%p",&peo)     //0x110040f0

	//賦值
	//第一種
	peo = People{"derek",20}
	fmt.Println(peo)      //{derek 20}
	//第二種
	peo2 := People{Age:12,Name:"jack"}
	fmt.Println(peo2)     //{jack 12}

	//第三種
	peo.Name = "alice"
	peo.Age = 25
	fmt.Println(peo)     //{alice 25}
}

 4.2.結構體指針

因爲結構體是值類型,在方法傳遞時但願傳遞結構體地址,能夠使用結構體指針完成指針

能夠結合new()函數建立結構體指針code

//Learn_Go/main.go
package main

import "fmt"

type People struct {
	Name string
	Age int
}

func main()  {
	peo := new(People)
	fmt.Println(peo)              //&{ 0}
	fmt.Println(peo == nil)       //false

	peo.Name = "derek"
	peo.Age = 22
	fmt.Println(peo)              //&{derek 22}

	peo2 := peo
	fmt.Println(peo2)            //&{derek 22}

	peo2.Name = "Jack"
	fmt.Println(peo, peo2)       //&{Jack 22} &{Jack 22}
}

 4.3.方法

方法和函數語法比較像,區別是函數屬於包,經過包調用函數,而方法屬於結構體,經過結構體變量調用blog

默認是函數,隸屬於包,因此須要添加標識,告訴編譯器這個方法屬於哪一個結構體 編譯器

 (1)建立方法string

//Learn_Go/main.go
package main

import "fmt"

type People struct {
	Name string
	Weight int
}

func (p People) run() {
	fmt.Println(p.Name,"正在跑步,當前體重爲:",p.Weight)
}

func main()  {
	peo := People{"derek",120}
	peo.run()       //derek 正在跑步,當前體重爲: 120
}

(2)修改值,用指針編譯

//Learn_Go/main.go
package main

import "fmt"

type People struct {
	Name string
	Weight int
}

func (p *People) run() {
	fmt.Println(p.Name,"正在跑步,當前體重爲:",p.Weight)
	//運行一次run方法,體重減去1
	p.Weight -= 1
}

func main()  {
	peo := People{"derek",120}
	peo.run()       //derek 正在跑步,當前體重爲: 120
	fmt.Println("跑完步後的體重爲:",peo.Weight)        //跑完步後的體重爲: 119
}
相關文章
相關標籤/搜索