十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
//創(chuàng)建方法
package main
import "fmt"
type book struct {
Name string
}
type eleBook struct {
Name string
}
func main() {
//創(chuàng)建一個(gè)對(duì)象
aBook := book{Name:"spark computer"}
aBook.show()
bBook := eleBook{Name:"k8s computer"}
bBook.show()
}
//創(chuàng)建一個(gè)method
//此mothod方法屬于book類(lèi)型
//(a book) 這個(gè)字段 是說(shuō)
// 此方法,屬于哪類(lèi)型,是跟類(lèi)型綁定的
// (a book)就是一個(gè)receiver
//只能指定的類(lèi)型的變量,才能調(diào)用
//方法的綁定,只能是同一個(gè)包中,才起作用
func (a book) show() {
fmt.Println("this is book:\t",a.Name)
}
// 這屬于重載了
//func (a book) show(info string) {
// fmt.Println("this is book")
//}
//創(chuàng)建一個(gè)method
//此mothod方法屬于eleBook類(lèi)型
func (a eleBook) show() {
fmt.Println("this is ele book")
}
package main
import "fmt"
type flower struct {
Name string
}
type rose struct {
Name string
}
func main() {
flower := flower{Name:"a big flower"}
rose := rose{Name:"a big rose"}
fmt.Println("init flower:\t", flower)
flower.show()
fmt.Println("after flower:\t", flower)
fmt.Println("===========================")
fmt.Println("init rose:\t", rose)
rose.show()
fmt.Println("after rose:\t", rose)
}
//(flower flower) 這種方式,是按值傳遞的,不能改變?cè)档?func (flower flower)show() {
flower.Name = "I'm flower"
fmt.Println("flower:\t", flower)
}
//(rose *rose) 是按引用傳遞的,可以改變?cè)档?func (rose *rose)show() {
rose.Name = " this is rose"
fmt.Println("rose:\t", rose)
}
//別名 與 方法的綁定
// 作用,就是,有一種增強(qiáng)的感覺(jué),如int類(lèi)型,本身沒(méi)有show,add方法
//別名 與 方法的組合,確有了
package main
import "fmt"
type TZ int
func main() {
var ty TZ = 3
fmt.Println("ty:\t" , ty)
//Method value 調(diào)用方式,通過(guò)類(lèi)型的變量來(lái)調(diào)用
ty.show()
ty.add()
fmt.Println("==================Method value Method Express的不同==============================")
//對(duì)方法的兩種不同的導(dǎo)調(diào)用方式而已
//Method express 調(diào)用方式,通過(guò)類(lèi)型直接來(lái)調(diào)用
//此種方式,需要自己輸入 變量
//因?yàn)閞eceiver接收的是地址,因此,我們傳入的是地址
(*TZ).show(&ty)
(*TZ).add(&ty)
}
//下面的這些方法,都是通過(guò) 某一個(gè)類(lèi)型的 變量 來(lái)進(jìn)行調(diào)用的
//java 是通過(guò)對(duì)象來(lái)調(diào)用的
func (tz *TZ)show() {
fmt.Println("---->:\t 這是int類(lèi)型", *tz) //tz是地址,*tz 是取地址里的內(nèi)容了
}
func (tz *TZ)add() {
fmt.Println("---->:\t 這是int類(lèi)型的加法")
}
//方法 的權(quán)限問(wèn)題,是否可以訪(fǎng)問(wèn) 私有字段呢?
//權(quán)限是以package 為級(jí)別的
//方法的訪(fǎng)問(wèn)權(quán)限是很高的,可以訪(fǎng)問(wèn)同一個(gè)package下的所有屬性,包括公共的,私有的
package main
import "fmt"
type bike struct {
//小寫(xiě)是私有屬性,私有屬性,只能在同一個(gè)package內(nèi),進(jìn)行訪(fǎng)問(wèn)的
name string
//大寫(xiě)是公共屬性
Color string
}
func main() {
bike := bike{name:"捷安特", Color:"黑色"}
fmt.Println("old bike:\t", bike)
//通過(guò)類(lèi)型的變量,來(lái)調(diào)用方法
bike.show()
fmt.Println("new bike:\t", bike)
}
func (bike *bike)show() {
bike.Color = "紅色"
bike.name = "永久" //看見(jiàn)了吧,方法是可以訪(fǎng)問(wèn)同一package下的私有屬性的
fmt.Println("bike:\t", bike)
}
//練習(xí)題:
//依據(jù)的理論知識(shí):為結(jié)構(gòu)增加方法的知識(shí)
//嘗試聲明一個(gè)底層類(lèi)型為int的類(lèi)型
//并實(shí)現(xiàn)調(diào)用某個(gè)方法就遞增100
//如 a:=0, 調(diào)用a.Increase()只會(huì),a從0變成100
package main
import "fmt"
//為int 聲明一個(gè)別名
type intFor int
func main() {
var a intFor = 0
fmt.Println(a.Increase())
}
//傳的地址
//注意,返回值的類(lèi)型是intFor
func (arg *intFor)Increase() intFor {
//添加上*,就表示取地址里的內(nèi)容了
*arg = 100
return *arg
}
例如,type intFor int,
不光是int類(lèi)型,也可以是其他類(lèi)型。
開(kāi)始擴(kuò)展思維,其實(shí),就是為某個(gè)類(lèi)型,增加方法;
Java里的一個(gè)類(lèi)里包括屬性,以及方法;
在Go語(yǔ)言中,各種屬性是封裝在一個(gè)類(lèi)型里,方法是通過(guò)receiver來(lái)綁定;
只是不同的表現(xiàn)形式而已
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。