欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Go基礎(chǔ)知識梳理(三)

Go基礎(chǔ)知識梳理(三)

結(jié)構(gòu)

type Person struct {
    name string
    sex int
}

func main() {
    //推薦寫法
    person := Person{
        name: "張三",
        sex: 1,
    }
    //不推薦寫法
    person = Person{"李四", 1}
    
    p := New(Person)
    //會初始化name="", sex = 0
}

接口

//接口的一些特點(diǎn):
//接口的命名一般以er結(jié)尾,具體看業(yè)務(wù)場景
//接口內(nèi)部的方法不需要func引導(dǎo)
//在接口的定義中沒有實(shí)現(xiàn)只有聲明

type Person inteface{
    Say()
    Run()
}

//具有Person中的方法,則視為該接口的實(shí)現(xiàn)類
type Man struct{}
func (m Man) Say(){}
func (m Man) Run(){}

type Woman struct{}
func (m Woman) Say(){}
func (m Woman) Run(){}

方法

//首先看一段代碼
type Person struct {
    Age int
}
func (p Person) Age() {
    fmt.Println(p.Age)
}
func (p *Person) Age2() {
    fmt.Println(p.Age)
}
//發(fā)現(xiàn)兩個Age方法,一個接受的是值類型,一個接受的指針,那么區(qū)別在哪里呢?
//這兩個方法實(shí)際等于
func Age(p Person) {
    fmt.Println(p.Age)
}
func Age2(p *Person) {
    fmt.Println(p.Age)
}
//也就是說相當(dāng)于參數(shù)來進(jìn)行傳值
//傳值類型也就是值的拷貝(數(shù)據(jù)的副本),在函數(shù)內(nèi)改變其數(shù)值不會影響到原來的值
//傳入的數(shù)值類型為指針,就是相當(dāng)于傳入該數(shù)據(jù)的內(nèi)存地址,在函數(shù)內(nèi)改變其數(shù)值會影響全局
//高級用法
//src/net/http/server.go
type HandlerFunc func(ResponseWriter, *Request)

//這是一種包裝器的編程技法,為函數(shù)添加方法
func (f HandlerFunc) ServeHttp(w ResponseWriter, r *Request) {
    f(w, r)
}

//同時HandlerFunc實(shí)現(xiàn)了Handler接口
type Handler interface{
    ServeHttp(ResponseWriter, *Request)
}

func (mux *ServeMux) Handle(pattern string, handler Handler)

//handler方法轉(zhuǎn)為HandlerFunc函數(shù),同時因?yàn)镠andlerFunc實(shí)現(xiàn)了Handler接口,所以可以運(yùn)用mux的Handle方法
func (mux *ServeMux) HandlerFunc(pattern string, handler func(ResponseWriter, *Request)) {
    mux.Handle(pattern, HandlerFunc(handler))
}

通過 http 標(biāo)準(zhǔn)庫里面對于函數(shù)類型的使用,我們可以看到函數(shù)類型的如下意義
( 1 )函數(shù)也是一種類型,可以在函數(shù)字面量類型的基礎(chǔ)上定義一種命名函數(shù)類型。
(2 )有名函數(shù)和匿名函數(shù)的函數(shù)簽名與命名函數(shù)類型的底層類型相同,它們之間可以進(jìn)行類型轉(zhuǎn)換。
(3 )可以為有名函數(shù)類型添加方法,這種為一個函數(shù)類型添加方法的技法非常有價值,可以方便地為一個函數(shù)增加“攔截”或“過濾”等額外功能,這提供了一種裝飾設(shè)計(jì)模式
(4 )為有名函數(shù)類型添加方法,使其與接口打通關(guān)系,使用接口的地方可以傳遞函數(shù)類型的變量,這為函數(shù)到接口的轉(zhuǎn)換開啟了大門

類型斷言

//推薦寫法
var i interface{}
i = 1
var a int
if _, ok := i.(int); !ok {
	//err處理
	return
}
a = i.(int)
fmt.Println(a)

//或者
var i interface{}
i = 1
if a, ok := i.(int); ok {
	fmt.Println(a)
	return
}

網(wǎng)站欄目:Go基礎(chǔ)知識梳理(三)
分享URL:http://chinadenli.net/article20/dsoisjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、域名注冊、企業(yè)建站、云服務(wù)器自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司