亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > Golang > 正文

Go語(yǔ)言中的方法、接口和嵌入類型詳解

2020-04-01 19:24:18
字體:
供稿:網(wǎng)友
這篇文章主要介紹了Go語(yǔ)言中的方法、接口和嵌入類型詳解,本文分別對(duì)它們做了詳細(xì)講解,需要的朋友可以參考下
 

概述

在 Go 語(yǔ)言中,如果一個(gè)結(jié)構(gòu)體和一個(gè)嵌入字段同時(shí)實(shí)現(xiàn)了相同的接口會(huì)發(fā)生什么呢?我們猜一下,可能有兩個(gè)問題:

1.編譯器會(huì)因?yàn)槲覀兺瑫r(shí)有兩個(gè)接口實(shí)現(xiàn)而報(bào)錯(cuò)嗎?
2.如果編譯器接受這樣的定義,那么當(dāng)接口調(diào)用時(shí)編譯器要怎么確定該使用哪個(gè)實(shí)現(xiàn)?

在寫了一些測(cè)試代碼并認(rèn)真深入的讀了一下標(biāo)準(zhǔn)之后,我發(fā)現(xiàn)了一些有意思的東西,而且覺得很有必要分享出來,那么讓我們先從 Go 語(yǔ)言中的方法開始說起。

方法

Go 語(yǔ)言中同時(shí)有函數(shù)和方法。一個(gè)方法就是一個(gè)包含了接受者的函數(shù),接受者可以是命名類型或者結(jié)構(gòu)體類型的一個(gè)值或者是一個(gè)指針。所有給定類型的方法屬于該類型的方法集。

下面定義一個(gè)結(jié)構(gòu)體類型和該類型的一個(gè)方法:

復(fù)制代碼代碼如下:

type User struct {
  Name  string
  Email string
}

 

func (u User) Notify() error

 

首先我們定義了一個(gè)叫做 User 的結(jié)構(gòu)體類型,然后定義了一個(gè)該類型的方法叫做 Notify,該方法的接受者是一個(gè) User 類型的值。要調(diào)用 Notify 方法我們需要一個(gè) User 類型的值或者指針:

 

復(fù)制代碼代碼如下:

// User 類型的值可以調(diào)用接受者是值的方法
damon := User{"AriesDevil", "ariesdevil@xxoo.com"}
damon.Notify()

 

// User 類型的指針同樣可以調(diào)用接受者是值的方法
alimon := &User{"A-limon", "alimon@ooxx.com"}
alimon.Notify()

 

在這個(gè)例子中當(dāng)我們使用指針時(shí),Go 調(diào)整和解引用指針使得調(diào)用可以被執(zhí)行。注意,當(dāng)接受者不是一個(gè)指針時(shí),該方法操作對(duì)應(yīng)接受者的值的副本(意思就是即使你使用了指針調(diào)用函數(shù),但是函數(shù)的接受者是值類型,所以函數(shù)內(nèi)部操作還是對(duì)副本的操作,而不是指針操作,參見:http://play.golang.org/p/DBhWU0p1Pv)。

我們可以修改 Notify 方法,讓它的接受者使用指針類型:

 

復(fù)制代碼代碼如下:

func (u *User) Notify() error

 

再來一次之前的調(diào)用(注意:當(dāng)接受者是指針時(shí),即使用值類型調(diào)用那么函數(shù)內(nèi)部也是對(duì)指針的操作,參見:http://play.golang.org/p/SYBb4xPfPh):

 

復(fù)制代碼代碼如下:

// User 類型的值可以調(diào)用接受者是指針的方法
damon := User{"AriesDevil", "ariesdevil@xxoo.com"}
damon.Notify()

 

// User 類型的指針同樣可以調(diào)用接受者是指針的方法
alimon := &User{"A-limon", "alimon@ooxx.com"}
alimon.Notify()

 

如果你不清楚到底什么時(shí)候該使用值,什么時(shí)候該使用指針作為接受者,你可以去看一下這篇介紹。這篇文章同時(shí)還包含了社區(qū)約定的接受者該如何命名。

接口

Go 語(yǔ)言中的接口很特別,而且提供了難以置信的一系列靈活性和抽象性。它們指定一個(gè)特定類型的值和指針表現(xiàn)為特定的方式。從語(yǔ)言角度看,接口是一種類型,它指定一個(gè)方法集,所有方法為接口類型就被認(rèn)為是該接口。

下面定義一個(gè)接口:

復(fù)制代碼代碼如下:

type Notifier interface {
  Notify() error
}

 

我們定義了一個(gè)叫做 Notifier 的接口并包含一個(gè) Notify 方法。當(dāng)一個(gè)接口只包含一個(gè)方法時(shí),按照 Go 語(yǔ)言的約定命名該接口時(shí)添加 -er 后綴。這個(gè)約定很有用,特別是接口和方法具有相同名字和意義的時(shí)候。

我們可以在接口中定義盡可能多的方法,不過在 Go 語(yǔ)言標(biāo)準(zhǔn)庫(kù)中,你很難找到一個(gè)接口包含兩個(gè)以上的方法。

實(shí)現(xiàn)接口

當(dāng)涉及到我們?cè)撛趺醋屛覀兊念愋蛯?shí)現(xiàn)接口時(shí),Go 語(yǔ)言是特別的一個(gè)。Go 語(yǔ)言不需要我們顯式的實(shí)現(xiàn)類型的接口。如果一個(gè)接口里的所有方法都被我們的類型實(shí)現(xiàn)了,那么我們就說該類型實(shí)現(xiàn)了該接口。

讓我們繼續(xù)之前的例子,定義一個(gè)函數(shù)來接受任意一個(gè)實(shí)現(xiàn)了接口 Notifier 的類型的值或者指針:

復(fù)制代碼代碼如下:

func SendNotification(notify Notifier) error {
  return notify.Notify()
}

 

SendNotification 函數(shù)調(diào)用 Notify 方法,這個(gè)方法被傳入函數(shù)的一個(gè)值或者指針實(shí)現(xiàn)。這樣一來一個(gè)函數(shù)就可以被用來執(zhí)行任意一個(gè)實(shí)現(xiàn)了該接口的值或者指針的指定的行為。

用我們的 User 類型來實(shí)現(xiàn)該接口并且傳入一個(gè) User 類型的值來調(diào)用 SendNotification 方法:

復(fù)制代碼代碼如下:

func (u *User) Notify() error {
  log.Printf("User: Sending User Email To %s<%s>/n",
      u.Name,
      u.Email)
  return nil
}

 

func main() {
  user := User{
    Name:  "AriesDevil",
    Email: "ariesdevil@xxoo.com",
  }
  
  SendNotification(user)
}

// Output:
cannot use user (type User) as type Notifier in function argument:
User does not implement Notifier (Notify method has pointer receiver)

 

詳細(xì)代碼:http://play.golang.org/p/KG8-Qb7gqM

為什么編譯器不考慮我們的值是實(shí)現(xiàn)該接口的類型?接口的調(diào)用規(guī)則是建立在這些方法的接受者和接口如何被調(diào)用的基礎(chǔ)上。下面的是語(yǔ)言規(guī)范里定義的規(guī)則,這些規(guī)則用來說明是否我們一個(gè)類型的值或者指針實(shí)現(xiàn)了該接口:

1.類型 *T 的可調(diào)用方法集包含接受者為 *T 或 T 的所有方法集

這條規(guī)則說的是如果我們用來調(diào)用特定接口方法的接口變量是一個(gè)指針類型,那么方法的接受者可以是值類型也可以是指針類型。顯然我們的例子不符合該規(guī)則,因?yàn)槲覀儌魅?SendNotification 函數(shù)的接口變量是一個(gè)值類型。

1.類型 T 的可調(diào)用方法集包含接受者為 T 的所有方法

這條規(guī)則說的是如果我們用來調(diào)用特定接口方法的接口變量是一個(gè)值類型,那么方法的接受者必須也是值類型該方法才可以被調(diào)用。顯然我們的例子也不符合這條規(guī)則,因?yàn)槲覀?Notify 方法的接受者是一個(gè)指針類型。

語(yǔ)言規(guī)范里只有這兩條規(guī)則,我通過這兩條規(guī)則得出了符合我們例子的規(guī)則:

1.類型 T 的可調(diào)用方法集不包含接受者為 *T 的方法

我們碰巧趕上了我推斷出的這條規(guī)則,所以編譯器會(huì)報(bào)錯(cuò)。Notify 方法使用指針類型作為接受者而我們卻通過值類型來調(diào)用該方法。解決辦法也很簡(jiǎn)單,我們只需要傳入 User 值的地址到 SendNotification 函數(shù)就好了:

復(fù)制代碼代碼如下:

func main() {
  user := &User{
    Name:  "AriesDevil",
    Email: "ariesdevil@xxoo.com",
  }
  
  SendNotification(user)
}

 

// Output:
User: Sending User Email To AriesDevil<ariesdevil@xxoo.com>

 

詳細(xì)代碼:http://play.golang.org/p/kEKzyTfLjA

嵌入類型

結(jié)構(gòu)體類型可以包含匿名或者嵌入字段。也叫做嵌入一個(gè)類型。當(dāng)我們嵌入一個(gè)類型到結(jié)構(gòu)體中時(shí),該類型的名字充當(dāng)了嵌入字段的字段名。

下面定義一個(gè)新的類型然后把我們的 User 類型嵌入進(jìn)去:

 

復(fù)制代碼代碼如下:

type Admin struct {
  User
  Level  string
}

 

我們定義了一個(gè)新類型 Admin 然后把 User 類型嵌入進(jìn)去,注意這個(gè)不叫繼承而叫組合。 User 類型跟 Admin 類型沒有關(guān)系。

我們來改變一下 main 函數(shù),創(chuàng)建一個(gè) Admin 類型的變量并把變量的地址傳入 SendNotification 函數(shù)中:

復(fù)制代碼代碼如下:

func main() {
  admin := &Admin{
    User: User{
      Name:  "AriesDevil",
      Email: "ariesdevil@xxoo.com",
    },
    Level: "master",
  }
  
  SendNotification(admin)
}

 

// Output
User: Sending User Email To AriesDevil<ariesdevil@xxoo.com>

 

詳細(xì)代碼:http://play.golang.org/p/ivzzzk78TC

事實(shí)證明,我們可以 Admin 類型的一個(gè)指針來調(diào)用 SendNotification 函數(shù)。現(xiàn)在 Admin 類型也通過來自嵌入的 User 類型的方法提升實(shí)現(xiàn)了該接口。

如果 Admin 類型包含了 User 類型的字段和方法,那么它們?cè)诮Y(jié)構(gòu)體中的關(guān)系是怎么樣的呢?

當(dāng)我們嵌入一個(gè)類型,這個(gè)類型的方法就變成了外部類型的方法,但是當(dāng)它被調(diào)用時(shí),方法的接受者是內(nèi)部類型(嵌入類型),而非外部類型。— Effective Go

因此嵌入類型的名字充當(dāng)著字段名,同時(shí)嵌入類型作為內(nèi)部類型存在,我們可以使用下面的調(diào)用方法:

 

復(fù)制代碼代碼如下:

admin.User.Notify()

 

// Output
User: Sending User Email To AriesDevil<ariesdevil@xxoo.com>

 

詳細(xì)代碼:http://play.golang.org/p/0WL_5Q6mao

這兒我們通過類型名稱來訪問內(nèi)部類型的字段和方法。然而,這些字段和方法也同樣被提升到了外部類型:

復(fù)制代碼代碼如下:

admin.Notify()

 

// Output
User: Sending User Email To AriesDevil<ariesdevil@xxoo.com>

 

詳細(xì)代碼:http://play.golang.org/p/2snaaJojRo

所以通過外部類型來調(diào)用 Notify 方法,本質(zhì)上是內(nèi)部類型的方法。

下面是 Go 語(yǔ)言中內(nèi)部類型方法集提升的規(guī)則:

給定一個(gè)結(jié)構(gòu)體類型 S 和一個(gè)命名為 T 的類型,方法提升像下面規(guī)定的這樣被包含在結(jié)構(gòu)體方法集中:

1.如果 S 包含一個(gè)匿名字段 T,S 和 *S 的方法集都包含接受者為 T 的方法提升。

這條規(guī)則說的是當(dāng)我們嵌入一個(gè)類型,嵌入類型的接受者為值類型的方法將被提升,可以被外部類型的值和指針調(diào)用。

1.對(duì)于 *S 類型的方法集包含接受者為 *T 的方法提升

這條規(guī)則說的是當(dāng)我們嵌入一個(gè)類型,可以被外部類型的指針調(diào)用的方法集只有嵌入類型的接受者為指針類型的方法集,也就是說,當(dāng)外部類型使用指針調(diào)用內(nèi)部類型的方法時(shí),只有接受者為指針類型的內(nèi)部類型方法集將被提升。

1.如果 S 包含一個(gè)匿名字段 *T,S 和 *S 的方法集都包含接受者為 T 或者 *T 的方法提升

這條規(guī)則說的是當(dāng)我們嵌入一個(gè)類型的指針,嵌入類型的接受者為值類型或指針類型的方法將被提升,可以被外部類型的值或者指針調(diào)用。

這就是語(yǔ)言規(guī)范里方法提升中僅有的三條規(guī)則,我根據(jù)這個(gè)推導(dǎo)出一條規(guī)則:

1.如果 S 包含一個(gè)匿名字段 T,S 的方法集不包含接受者為 *T 的方法提升。

這條規(guī)則說的是當(dāng)我們嵌入一個(gè)類型,嵌入類型的接受者為指針的方法將不能被外部類型的值訪問。這也是跟我們上面陳述的接口規(guī)則一致。

回答開頭的問題

現(xiàn)在我們可以寫程序來回答開頭提出的兩個(gè)問題了,首先我們讓 Admin 類型實(shí)現(xiàn) Notifier 接口:

 

復(fù)制代碼代碼如下:

func (a *Admin) Notify() error {
  log.Printf("Admin: Sending Admin Email To %s<%s>/n",
      a.Name,
      a.Email)
      
  return nil
}

 

Admin 類型實(shí)現(xiàn)的接口顯示一條 admin 方面的信息。當(dāng)我們使用 Admin 類型的指針去調(diào)用函數(shù) SendNotification 時(shí),這將幫助我們確定到底是哪個(gè)接口實(shí)現(xiàn)被調(diào)用了。

現(xiàn)在創(chuàng)建一個(gè) Admin 類型的值并把它的地址傳入 SendNotification 函數(shù),來看看發(fā)生了什么:

 

復(fù)制代碼代碼如下:

func main() {
  admin := &Admin{
    User: User{
      Name:  "AriesDevil",
      Email: "ariesdevil@xxoo.com",
    },
    Level: "master",
  }
  
  SendNotification(admin)
}

 

// Output
Admin: Sending Admin Email To AriesDevil<ariesdevil@xxoo.com>

 

詳細(xì)代碼:http://play.golang.org/p/JGhFaJnGpS

預(yù)料之中,Admin 類型的接口實(shí)現(xiàn)被 SendNotification 函數(shù)調(diào)用?,F(xiàn)在我們用外部類型來調(diào)用 Notify 方法會(huì)發(fā)生什么呢:

復(fù)制代碼代碼如下:

admin.Notify()

 

// Output
Admin: Sending Admin Email To AriesDevil<ariesdevil@xxoo.com>

 

詳細(xì)代碼:http://play.golang.org/p/EGqK6DwBOi

我們得到了 Admin 類型的接口實(shí)現(xiàn)的輸出。User 類型的接口實(shí)現(xiàn)不被提升到外部類型了。

現(xiàn)在我們有了足夠的依據(jù)來回答問題了:

1.編譯器會(huì)因?yàn)槲覀兺瑫r(shí)有兩個(gè)接口實(shí)現(xiàn)而報(bào)錯(cuò)嗎?

不會(huì),因?yàn)楫?dāng)我們使用嵌入類型時(shí),類型名充當(dāng)了字段名。嵌入類型作為結(jié)構(gòu)體的內(nèi)部類型包含了自己的字段和方法,且具有唯一的名字。所以我們可以有同一接口的內(nèi)部實(shí)現(xiàn)和外部實(shí)現(xiàn)。

1.如果編譯器接受這樣的定義,那么當(dāng)接口調(diào)用時(shí)編譯器要怎么確定該使用哪個(gè)實(shí)現(xiàn)?

如果外部類型包含了符合要求的接口實(shí)現(xiàn),它將會(huì)被使用。否則,通過方法提升,任何內(nèi)部類型的接口實(shí)現(xiàn)可以直接被外部類型使用。

總結(jié)

在 Go 語(yǔ)言中,方法,接口和嵌入類型一起工作方式是獨(dú)一無(wú)二的。這些特性可以幫助我們像面向?qū)ο竽菢咏M織結(jié)構(gòu)然后達(dá)到同樣的目的,并且沒有其它復(fù)雜的東西。用本文中談到的語(yǔ)言特色,我們可以以極少的代碼來構(gòu)建抽象和可伸縮性的框架。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
福利视频在线播放| 成人一级黄色片| 成人在线tv视频| 国产亚洲免费的视频看| 最新超碰在线| 三妻四妾完整版在线观看电视剧| 在线免费国产视频| 精品少妇theporn| 91国自产精品中文字幕亚洲| 国产精品少妇在线视频| 99re8在线精品视频免费播放| 国产精品久久久久久久久久小说| 亚洲欧美国产毛片在线| 啊啊啊好爽视频| 久久电影一区| 欧美另类高清videos的特点| av在线不卡播放| 四虎影视成人永久免费观看视频| 99视频有精品高清视频| 亚洲欧美日韩另类| 免费在线观看av网址| 91嫩草国产线观看亚洲一区二区| 欧美日韩xxxxx| 日本一欧美一欧美一亚洲视频| 成人精品在线视频| 91精品国产色综合久久不卡98口| 午夜精品久久久久久久久久| 亚洲人成网站在线播放2019| 欧美日韩中文字幕一区二区三区| 国产a级片视频| 婷婷四月色综合| 日韩视频免费观看高清完整版在线观看| 99久久婷婷国产一区二区三区| a看欧美黄色女同性恋| 色屁屁草草影院ccyy.com| 亚洲免费在线看| 91精品国产综合久久精品图片| 午夜成人在线视频| 成人免费毛片在线观看| 国产精品久久久久久久久搜平片| 亚洲精品午夜久久久久久久| 久久激情视频久久| 日本肉肉一区| 欧美日韩在线一区二区三区| 懂色aⅴ精品一区二区三区蜜月| 亚洲视频资源在线| 日本亚洲欧洲无免费码在线| 欧美一区二区三区啪啪| 久久露脸国语精品国产91| www.亚洲一二| 日韩电影中文字幕一区| 久久免费视频一区| 午夜天堂精品久久久久| 国产精品99久久久久久宅男| 成人看片在线| 精品久久精品久久| 国产性生活毛片| 欧美虐宫另类残忍视频| 成年人免费影院| 欧美牲交a欧美牲交aⅴ免费真| 欧美第一页在线| www.欧美精品| 欧美一区二区美女| 亚洲一区二区三区香蕉| 久久99国产乱子伦精品免费| 黄瓜视频免费观看在线观看www| 美女视频一区在线观看| 精品视频在线视频| 丰满肥臀噗嗤啊x99av| 亚洲激情图片一区| 在线观看日韩| 亚欧美在线观看| 国产丝袜视频一区| 丝袜足控免费网站xx网站| 国产精品久久久久白浆| 992tv在线影院| 成人午夜又粗又硬又大| 午夜免费视频网站| 亚洲一区二区网站| 国产农村妇女毛片精品久久麻豆| 国产精品人人| 久久精品中文字幕| xxxx69hd| 九九热精品在线观看| 成人精品电影在线| 永久免费毛片在线播放不卡| 夜夜嗨av一区二区三区四区| 成 人免费视频播放| 国产一区免费电影| 日本在线观看| 大地资源网3页在线观看| 色综合色综合色综合色综合色综合| 在线免费观看一区二区| 一本色道久久88精品综合| 色视频精品视频在线观看| 91精品人妻一区二区三区| 波多野结衣乳巨码无在线| 久久免费大视频| xxxxx99| 91 中文字幕| 奇门遁甲1982国语版免费观看高清| 欧美另类高清zo欧美| 一本色道久久综合亚洲精品小说| 欧美 另类 交| 伊色综合久久之综合久久| 波多野结衣办公室双飞| 国产精品国产三级国产aⅴ原创| 久久狠狠久久| 国产色婷婷国产综合在线理论片a| 在线中文字幕日韩| 亚洲一区二区三区中文字幕在线观看| 日韩一级片免费| 嘿嘿视频在线观看| 视频一区二区在线观看| 国产精品爱啪在线线免费观看| 亲子伦视频一区二区三区| 免费一级肉体全黄毛片| 日韩久久精品一区二区三区| 亚洲一区成人| www.一区二区三区.com| 国产福利免费观看| 亚欧美中日韩视频| 男生女生差差差的视频在线观看| 色先锋av资源| 久久er精品视频| 久久99精品国产99久久| 欧美 日韩 成人| 午夜影院在线| 老司机99精品99| 成人在线视频成人| 欧美精品一区二区三区一线天视频| 亚洲欧洲成人自拍| 色综合久久久无码中文字幕波多| 国产精品日韩精品| 欧美亚洲午夜视频在线观看| 97aⅴ精品视频一二三区| 亚洲精品一二| 黄色a**址| 亚洲天堂成人| 中文字幕一区二区三区精彩视频| 拔插拔插华人永久免费| 亚洲精品国产精品国自产网站| 中文字幕777| 国产亚洲第一区| 国产又爽又黄的激情精品视频| 国产脚交av在线一区二区| 亚洲国产成人精品一区二区| 超碰地址久久| 中文字幕亚洲不卡| 亚洲欧美一区二区三区四区| 无码人妻精品一区二区中文| 国产在线观看黄色| 中文字幕av亚洲精品一部二部| 亚洲成色www.777999| 国产高清视频在线| 中文字幕亚洲一区| 中文字幕在线观看欧美| 亚洲三级黄色片| 欧美一区二区三区小说| 日韩精品人妻中文字幕有码| 高清中文字幕一区二区三区| 日韩精品久久久久久久的张开腿让| 久久这里有精品15一区二区三区| 成人妇女淫片aaaa视频| 欧美日韩成人网| 午夜天堂在线视频| 在线亚洲男人天堂| 在线观看成人免费视频| 波霸ol色综合久久| 亚洲黄色av网址| 欧美大人香蕉在线| 91免费日韩| 欧美国产一级片| 国产精品久久久精品四季影院| 国产精品人妻一区二区三区| 可以免费看污视频的网站| 成人免费视频观看视频| 精品国产乱码久久久久久闺蜜| 最新亚洲精品国自产在线观看| 45www国产精品网站| 一二三区在线播放| 一区二区三区视频免费视频观看网站| 色播视频在线播放| 欧美成人性生活视频| 日本dhxxxxxdh14日本| 精品日韩在线| 变态黄色小视频网站| 国产成人在线观看免费网站| 久久www人成免费看片中文| 91精品国产综合久久久久久久久| 国产99久一区二区三区a片| 亚欧精品一区| 亚洲免费av电影| 国产精品 日韩| 青草国产精品久久久久久| 一区二区三区四区欧美日韩| 韩国一区二区三区美女美女秀| 一本色道久久88综合日韩精品| 欧美性生交xxxxxdddd| 亚洲美女激情视频| 精品av在线播放| 999视频在线观看| 亚洲国产欧美国产综合一区| 亚洲成人1区2区| 中文字幕在线看视频国产欧美在线看完整| 好男人免费精品视频| 少妇精品久久久久久久久久| 日韩码欧中文字| 欧美日韩精品久久| 亚洲久久中文字幕| 国产一级淫片免费| 久久亚洲免费视频| www.久久久久| 亚洲春色在线| 亚洲午夜精品久久久中文影院av| 中文字幕精品亚洲| 日韩欧美一区二区三区| 免费看黄色一级大片| 国产成人综合亚洲欧美在| 97视频久久久| 日本成人免费在线| 午夜免费播放观看在线视频| 天天影视色综合| 99热在线免费播放| 奇米视频888| 亚洲一区二区欧美日韩| 国产一区二区三区国产精品| bestiality新另类大全| 国产免费a级片| 性欧美ⅴideo另类hd| 欧美tickling网站挠脚心| 男女羞羞视频在线观看| 97久久超碰福利国产精品…| 久久久久久久中文字幕| 天天舔夜夜操| 欧美日韩国产不卡| 欧美一级小视频| 蜜桃色一区二区三区| 欧美色女视频| 懂色av一区二区三区免费观看| 欧美电影精品一区二区| 日本午夜精品一区二区三区| 中文字幕人妻一区二| 成人拍拍拍免费视频网站| 国产黑丝在线一区二区三区| 久久亚洲影视婷婷| 一二三四社区在线视频6| 欧美激情xxxxx| 《视频一区视频二区| 国产精品视频在线免费观看| 国产中文字幕在线免费观看| 亚洲一区在线视频观看| av在线免费播放网站| 丁香婷婷综合色啪| 久久久久se| 国产高清成人久久| 丰满少妇中文字幕| 色偷偷888欧美精品久久久| 99久久99热久久精品免费看| 国产免费又粗又猛又爽| 蜜桃麻豆www久久国产精品| 在线视频日韩| 日韩小视频在线观看专区| 国产美女撒尿一区二区| 中文字幕中文字幕在线中一区高清| 99热超碰在线| 538在线精品| 亚洲xxxx3d| 后进极品白嫩翘臀在线视频| 视频一区在线免费观看| 一道本无吗一区| 精品午夜一区二区三区| 亚洲熟女少妇一区二区| 岛国精品一区二区三区| 精品免费久久久| 国产精品不卡| 中文字幕乱码人妻综合二区三区| 久久精品综合视频| 91九色对白| 欧美精品乱码久久久久久| 国精产品久拍自产在线网站| 狠狠操天天操夜夜操| 日本美女高潮视频| 日韩av最新在线观看| 91在线国内视频| 男人的天堂色| 国产一区二区三区免费播放| 久久撸在线视频| 国产精品免费观看在线| 久久久国产精品久久久| 视频三区二区一区| 中文字幕日本乱码精品影院| 日韩亚洲欧美中文三级| 欧美日韩国产中文字幕在线| 九九九热999| 天天在线视频色| 欧美涩涩视频| 国产成人三级在线观看视频| www亚洲色图| 日本在线xxx| 911精品国产一区二区在线| 捆绑裸体绳奴bdsm亚洲| 欧美肥婆xxxx欧美另类| 久久久亚洲欧洲日产| 国内精品免费**视频| 免费在线观看国产黄| 羞羞色院91蜜桃| 久久久久成人黄色影片| 图片区日韩欧美亚洲| 日韩电影中文字幕| 中文字幕无码不卡免费视频| 综合久久久久久| 亚洲精品mv| 亚洲国产成人在线| 成人精品影院| 国产人成高清视频观看| 黄色网页免费看| 婷婷激情小说网| 欧美午夜春性猛交xxxx| 国产在线欧美在线| 91大神免费观看| 紧缚奴在线一区二区三区| 日本精品一区二区三区四区| 91精品免费视频| 91在线观看免费高清完整版在线观看| 国产麻豆高清视频在线第一页| 亚州av在线播放| 国产亚洲精品日韩|