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

首頁 > 編程 > Golang > 正文

Go語言中的復(fù)合類型詳細(xì)介紹

2020-04-01 19:25:08
字體:
供稿:網(wǎng)友
這篇文章主要介紹了Go語言中的復(fù)合類型詳細(xì)介紹,復(fù)合類型包括:結(jié)構(gòu)體、數(shù)組、切片、Maps,需要的朋友可以參考下
 

golang復(fù)合類型包括:結(jié)構(gòu)體、數(shù)組、切片、Maps。

1、數(shù)組

數(shù)組

golang中的數(shù)組與C語言中的數(shù)組差異很大,倒更類似Pascal中的數(shù)組。 (Slice,下個(gè)話題,有些像C語言中的數(shù)組)

 

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

var ar [3]int

 

聲明ar為一個(gè)擁有三個(gè)整型數(shù)的數(shù)組,所有元素初始化為0。

大小是類型的一個(gè)組成部分。

內(nèi)置的函數(shù)len可以用于獲取數(shù)組大?。?/p>

 

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

len(ar) = 3

 

數(shù)組是值類型

golang中的數(shù)組是值,而非C語言中的隱式指針。你可以獲得數(shù)組的地址,并生成一個(gè)指向數(shù)組的指針(例如,將其高效地傳遞給函數(shù)):

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

func f(a [3]int) { fmt.Println(a) }   
func fp(a *[3]int) { fmt.Println(a) }   
  
func main() {   
    var ar [3] int  
    f(ar) // 傳遞一個(gè)ar的拷貝   
    fp(&ar) // 傳遞一個(gè)指向ar的指針   
}  

 

輸出結(jié)果:

 

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

[0 0 0]

 

&[0 0 0]

 

數(shù)組字面值

所有的符合類型都有相同的值創(chuàng)建語法。以數(shù)組為例,其語法如下:

3個(gè)整數(shù)的數(shù)組:

 

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

[3]int{1, 2, 3}

 

10個(gè)整數(shù)的數(shù)組,前三個(gè)元素不是0:

 

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

[10]int{ 1, 2, 3}

 

不想數(shù)?使用…代表長度:

 

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

[...]int{1, 2, 3}

 

不想初始化所有值?使用key:value對:

 

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

[10]int{2:1, 3:1, 5:1, 7:1}

 

指向數(shù)組字面值的指針

你可以獲取數(shù)組字面值的地址,這樣可以得到一個(gè)指向新建數(shù)組實(shí)例的指針:

 

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

func fp(a *[3]int) { fmt.Println(a) }   
func main() {   
    for i := 0; i < 3; i++ {   
        fp(&[3]int{i, i*i, i*i*i})   
    }   
}  

 

輸出結(jié)果:

 

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

&[0 0 0]
&[1 1 1]
&[2 4 8]

 

2、切片(Slice)

切片

切片是對數(shù)組中某一段的引用。

切片比普通數(shù)組應(yīng)用得更多也更廣泛。

切片使用的代價(jià)很低。

一個(gè)切片類型很像一個(gè)沒有大小的數(shù)組類型:

 

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

var a []int

 

內(nèi)置的len(a)可以返回切片中元素的個(gè)數(shù)。

通過對數(shù)組或切片進(jìn)行"切片",我們可以創(chuàng)建一個(gè)新切片:

 

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

a = ar[7:9]

 

a(上面例子中的a)的有效下標(biāo)值是0和1;len(a) == 2。

切片速記

當(dāng)對數(shù)組進(jìn)行切片時(shí),第一個(gè)下標(biāo)值默認(rèn)是0:

ar[:n]等價(jià)于a[0:n]。

第二個(gè)下標(biāo)值默認(rèn)為len(array/slice):

ar[n:]等價(jià)于ar[n:len(ar)]。

因此由數(shù)組創(chuàng)建切片時(shí):

ar[:]等價(jià)于ar[0:len(ar)]。

切片引用數(shù)組

概念上:

 

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

type Slice struct {
base *elemType // 指向0th元素的指針
len int // 切片中元素的數(shù)量
cap int // 切片可以容納元素的數(shù)量
}

 

數(shù)組:

 

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

ar: 7 1 5 4 3 8 7 2 11 5 3

 

切片:

 

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

a = ar[7:9] :base = &ar[7](指向ar中的2) len = 2 cap = 4

 

創(chuàng)建切片

切片字面值看起來像沒有指定大小的數(shù)組字面值:

 

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

var slice = []int{1,2,3,4,5}

 

上面代碼創(chuàng)建了一個(gè)長度為5的數(shù)組并創(chuàng)建一個(gè)切片用于引用這個(gè)數(shù)組。

我們可以使用內(nèi)置的make函數(shù)分配一個(gè)切片(底層實(shí)際是個(gè)數(shù)組):

 

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

var s100 = make([]int, 100) // slice: 100 ints

 

為何用make而不是用new?因?yàn)槲覀冃枰獎?chuàng)建切片,而不僅僅是為了分配內(nèi)存。注意make([]int, 10)返回[]int,而new([]int)返回*[]int。

使用make創(chuàng)建切片、map以及channel。

切片容量

切片是對底層數(shù)組的一個(gè)引用。因此存在一些在數(shù)組里但卻沒在切片引用的范圍內(nèi)的元素。

內(nèi)置的函數(shù)cap(capacity)用于報(bào)告切片可能增長到多長。

 

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

var ar = [10]int{0,1,2,3,4,5,6,7,8,9}
var a = ar[5:7] // 引用子數(shù)組{5,6}

 

len(a) = 2,cap(a) = 5,現(xiàn)在我們可以重新切片:

 

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

a = a[0:4] // 引用子數(shù)組 {5,6,7,8}

 

len(a)現(xiàn)在是4,而cap(a)依舊是5。

調(diào)整切片大小

切片可被當(dāng)作可增長的數(shù)組用。使用make分配一個(gè)切片,并指定其長度和容量。當(dāng)要增長時(shí),我們可以做重新切片:

 

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

var sl = make([]int, 0, 100) // 長度 0, 容量 100   
func appendToSlice(i int, sl []int) []int {   
    if len(sl) == cap(sl) { error(…) }   
    n := len(sl)   
    sl = sl[0:n+1] // 長度增加1   
    sl[n] = i   
    return sl   

 

因此,sl的長度總是元素的個(gè)數(shù),但其容量可根據(jù)需要增加。

這種手法代價(jià)很小,并且是Go語言中的慣用法。

切片使用的代價(jià)很小

你可以根據(jù)需要自由地分配和調(diào)整切片大小。它們的傳遞僅需要很小的代價(jià);不必分配。

記住它們是引用,因此下層的存儲可以被修改。

例如,I/O使用切片,而不是計(jì)數(shù):

 

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

func Read(fd int, b []byte) int  
var buffer [100]byte   
    for i := 0; i < 100; i++ {   
    // 每次向Buffer中填充一個(gè)字節(jié)   
    Read(fd, buffer[i:i+1]) // no allocation here   
}  

 

拆分一個(gè)Buffer:

 

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

header, data := buf[:n], buf[n:]

 

字符串也可以被切片,而且效率相似。

3、Maps

maps

Map是另外一種引用類型。它們是這樣聲明的:

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

var m map[string]float64

這里聲明了一個(gè)map,索引key的類型為string,值類型為float64。這類似于C++中的類型*map<string, float64>。

 

對于給定map m,len(m)返回key的數(shù)量。

map的創(chuàng)建

和創(chuàng)建一個(gè)切片一樣,一個(gè)map變量是一個(gè)空引用;在可以使用它之前,應(yīng)先要向里面放入一些內(nèi)容。

三種方式:

1) 字面值:逗號分隔的key:value對列表

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

m = map[string]float64{"1":1, "pi":3.1415}

2) 創(chuàng)建
復(fù)制代碼代碼如下:

m = make(map[string]float64) // make not new

3) 賦值
復(fù)制代碼代碼如下:

var m1 map[string]float64
m1 = m // m1和m現(xiàn)在引用相同的map

 

map索引

(接下來的幾個(gè)例子全都使用:

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

m = map[string]float64{"1":1, "pi":3.1415})

訪問一個(gè)元素;如果該元素不存在,則得到對應(yīng)map value類型的零值:
復(fù)制代碼代碼如下:

one := m["1"]
zero := m["not present"] // zero被置為0.0.

設(shè)置一個(gè)元素的值(兩次設(shè)置將更新為最新值)
復(fù)制代碼代碼如下:

m["2"] = 2
m["2"] = 3 // 思維混亂

 

測試存在性

要測試一個(gè)map中是否存在某個(gè)key,我們可以使用一個(gè)多項(xiàng)賦值的"comma, om"形式:

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

m = map[string]float64{"1":1, "pi":3.1415}

 

var value float64
var present bool

value, present = m[x]

 

或者按慣例:

 

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

value, ok := m[x] // "comma ok" 形式

 

如果map中存在x這個(gè)key,布爾變量會被設(shè)置為true;value會被賦值為map中key對應(yīng)的值。相反,布爾變量會被設(shè)置為false,value被設(shè)置為相應(yīng)值類型的零值。

刪除

使用多元賦值可以刪除map中的一個(gè)值:

 

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

m = map[string]float64{"1":1.0, "pi":3.1415}

 

var keep bool
var value float64
var x string = f()

m[x] = v, keep

 

如果keep的值為true,則將v賦值到map中;如果keep為false,則刪除map中的key x。因此刪除一個(gè)key:

 

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

m[x] = 0, false // 從map中刪除x

 

譯注:Go 1中上述的刪除方式已被取消,取而代之的是delete(m, x)。

for和range

對于數(shù)組、切片和map(以及我們在第三部分將要看到的更多類型),for循環(huán)提供了一種特殊的語法用于迭代訪問其中的元素。

 

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

m := map[string]float64{"1":1.0, "pi":3.1415}

 

for key, value := range m {
fmt.Printf("key %s, value %g/n", key, value)
}

 

只用一個(gè)變量,我們可以獲得key:

 

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

for key = range m {
fmt.Printf("key %s/n", key)
}

 

變量可以用:=賦值或聲明。

對于數(shù)組和切片來說,通過這種方式我們可以獲得元素的下標(biāo)以及元素值。

將range用于字符串

將for range用于字符串時(shí),實(shí)際迭代的元素是Unicode碼點(diǎn)(code point),而不是字節(jié)(對字節(jié),可使用[]byte或使用標(biāo)準(zhǔn)的for語句)。我們假設(shè)字符串包

含使用UTF-8編碼的字符。

下面循環(huán):

 

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

s := "[/u00ff/u754c]"
for i, c := range s {
fmt.Printf("%d:%q ", i, c) // %q for 'quoted'
}

 

輸出:0:'[' 1:'ÿ' 3:'界' 6:']'

如果遇到了錯誤的UTF-8碼點(diǎn),這個(gè)字符將被設(shè)置為U+FFFD,下標(biāo)向后移動一個(gè)字節(jié)。

4、Structs

structs

對于Go中的struct,你應(yīng)該感覺十分熟悉:簡單的數(shù)據(jù)字段聲明。

 

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

var p struct {
x, y float64
}

 

更常用的是:

 

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

 

type Point struct {
x, y float64
}
var p Point

 

struct允許程序員定義內(nèi)存布局。

struct是值類型

struct是值類型,new(StructType)返回一個(gè)指向零值的指針(分配的內(nèi)存都被置0)。

 

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

type Point struct {
x, y float64
}
var p Point
p.x = 7
p.y = 23.4
var pp *Point = new(Point)
*pp = p
pp.x = Pi // (*pp).x的語法糖

 

對于結(jié)構(gòu)體指針,沒有->符號可用。Go提供了間接的方式。

創(chuàng)建結(jié)構(gòu)體

結(jié)構(gòu)體是值類型,因此你可只通過聲明就可以創(chuàng)建一個(gè)全0的結(jié)構(gòu)體變量。

你也可以使用new創(chuàng)建一個(gè)結(jié)構(gòu)體。

 

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

var p Point // 零值
pp := new(Point) // 慣用法

 

結(jié)構(gòu)體字面值語法也不出所料:

 

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

p = Point{7.2, 8.4}
p = Point{y:8.4, x:7.2}
pp = &Point{7.2, 8.4} // 慣用法
pp = &Point{} //也是慣用法,== new(Point)

 

和數(shù)組一樣,得到了結(jié)構(gòu)體字面值的地址,就得到了新建結(jié)構(gòu)體的地址。

這些例子都是構(gòu)造器。

導(dǎo)出類型和字段

只有當(dāng)結(jié)構(gòu)體的字段(和方法,即將講解)名字的首字母大寫時(shí),它才能被包外可見。

私有類型和字段:

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

type point struct { x, y float64 }

導(dǎo)出類型和字段:
復(fù)制代碼代碼如下:

type Point struct { X, Y float64 }

導(dǎo)出類型和私有類型混合字段:
復(fù)制代碼代碼如下:

type Point struct {
X, Y float64 // exported
name string // not exported
}

你甚至可以創(chuàng)建一個(gè)帶有導(dǎo)出字段的私有類型。(練習(xí):何時(shí)能派上用場呢?)

 

匿名字段

在一個(gè)結(jié)構(gòu)體內(nèi),你可以聲明不帶名字的字段,比如另外一個(gè)結(jié)構(gòu)體類型。這些字段被稱為匿名字段。它們看起來就像里層的結(jié)構(gòu)體簡單插入或“嵌入”到

外層結(jié)構(gòu)體似的。

這個(gè)簡單的機(jī)制為從其他類型繼承已有的實(shí)現(xiàn)提供了一種方法。

下面是一個(gè)例子。

一個(gè)匿名結(jié)構(gòu)體字段:

 

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

type A struct {
ax, ay int
}

 

type B struct {
A
bx, by float64
}

 

B看起來像有四個(gè)字段ax、ay、bx和by。B可看成{ax, ay int; bx, by float64}。

然后B的字面值必須提供細(xì)節(jié):

 

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

b := B{A{1, 2}, 3.0, 4.0}
fmt.Println(b.ax, b.ay, b.bx, b.by)

 

輸出1 2 3 4

匿名字段以類型作為名字

匿名字段不僅僅是簡單插入這些字段這么簡單,其含義更為豐富:B還擁有字段A。匿名字段看起來就像名字為其類型名的字段。

 

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

b := B{A{ 1, 2}, 3.0, 4.0}
fmt.Println(b.A)

 

輸出:{1 2}。如果A來自于另外一個(gè)包,這個(gè)字段依舊被稱為A。

 

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

import "pkg"
type C struct { pkg.A }

c := C {pkg.A{1, 2}}
fmt.Println(c.A) // 不是 c.pkg.A

 

任意類型的匿名字段

任何具名類型或指向具名類型的指針都可以用作匿名字段。它們可以出現(xiàn)在結(jié)構(gòu)體中的任意位置。

 

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

type C struct {
x float64
int
string
}
c := C{3.5, 7, "hello"}
fmt.Println(c.x, c.int, c.string)

 

輸出:3.5 7 hello

沖突和遮蔽

如果有兩個(gè)字段具有相同的名字(可能是一個(gè)繼承類型的名字),代碼將遵循下面規(guī)則:

1) 外層的名字遮蔽內(nèi)層的名字。這提供了一個(gè)重寫字段/方法的方式。
2) 如果在同一層次上出現(xiàn)了相同的名字,如果名字被使用,那么將是一個(gè)錯誤。(如果沒有使用,不會出現(xiàn)錯誤)

二義性是沒有規(guī)則能解決的,必須被修正。

沖突的例子

 

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

type A struct { a int }
type B struct { a, b int }
type C struct { A; B }
var c C

 

使用c.a將會出現(xiàn)錯誤。它到底是c.A.a還是c.B.a呢?

 

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

type D struct { B; b float64 }
var d D

 

使用d.b沒有問題:它是float64類型變量,不是d.B.b。要獲得內(nèi)層的b,可用d.B.b。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
天天做天天爱天天高潮| 成人高潮免费视频| 2019天天操夜夜操| 亚洲精品久久久久久久久久| 18禁男女爽爽爽午夜网站免费| 成人va在线观看| 福利在线观看| 久久悠悠精品综合网| 久久网站免费观看| 最近2018年手机中文在线| 青青草免费在线| 日韩欧美久久一区| 亚洲小说春色综合另类网蜜桃| 亚洲色偷偷色噜噜狠狠99网| 久久亚洲精精品中文字幕早川悠里| 欧美日韩精品在线一区| 先锋av资源在线| 一级黄色大片免费观看| 天堂视频免费看| 欧美日韩中文| 超碰在线视屏| 欧美国产高跟鞋裸体秀xxxhd| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 欧美日韩国产在线观看| 性欧美丰满熟妇xxxx性久久久| 亚洲精品中文字幕乱码| 男人的天堂www| 亚洲精品白浆| av成人免费在线| 亚洲欧美综合乱码精品成人网| 久久91精品视频| 三上悠亚影音先锋| 国产99精品国产| 91亚洲免费视频| 在线播放中文一区| 9.1片黄在线观看| 精品国产综合| 国产区在线看| 奇米777第四色| 成人综合婷婷国产精品久久蜜臀| 国产精品久久久久久久免费大片| 欧美高清在线| 深夜福利网站在线观看| 草裙成人精品一区二区三区| 精品亚洲欧美日韩| 清纯唯美亚洲经典中文字幕| 亚洲激情精品| 日韩欧美专区在线| 丁香色欲久久久久久综合网| www.超碰97.com| 国产精品天天干| 国产午夜福利一区二区| 激情欧美日韩一区二区| 国产日韩欧美不卡| 国产自产一区二区| 日本一道高清亚洲日美韩| 狠狠色狠狠色综合日日小说| 国产男男gay网站| 久久性色av| 九九免费精品视频在线观看| 亚洲激情视频| 99久久精品久久亚洲精品| 性色av一区二区三区免费| 欧美精品一区二区三区视频| 国产肉体ⅹxxx137大胆| 第一会所亚洲原创| 2018天天弄| 丝袜美腿成人在线| 国产欧美一区二区精品忘忧草| 五月婷婷一区| 久久精品国产亚洲AV成人婷婷| 亚洲第一黄色| 中文在线一区二区| 伦xxxx在线| 69堂免费精品视频在线播放| 老牛影视av牛牛影视av| freemovies性欧美| 日韩成人免费在线| 国内在线视频| 成人黄色片网站| 亚洲欧美小视频| 99视频精品免费视频| jlzzjlzz亚洲日本少妇| 国产免费专区| 一本一本久久| 日韩电影在线播放| 日日噜噜噜噜久久久精品毛片| 丝袜+亚洲+另类+欧美+变态| 日韩xxx高潮hd| 欧美自拍一区| 精品无码av一区二区三区| 日本特黄特色aaa大片免费| 青春草免费视频| 亚洲精品国产无套在线观| 欧美午夜电影在线观看| 操操操干干干| 国产午夜小视频| 成年人福利网站| 国产精品av一区二区| 亚洲男人都懂的网站| 国产hs免费高清在线观看| 久久一二三区| 国产av无码专区亚洲av毛网站| 在线日韩一区| 三年片免费观看大全| 欧美在线一级va免费观看| 丰满少妇又爽又紧又丰满电影| 欧美日韩免费观看一区三区| 亚洲欧美日韩综合精品网| 精品白丝av| 精品毛片乱码1区2区3区| 色噜噜狠狠一区二区三区果冻| 高清成人在线| 久久精品女同亚洲女同13| 欧美成人一区二区三区电影| 97人人做人人爱| 国产精品自拍片| 国产精品一级二级| 精品这里只有精品| 麻豆成人在线播放| 中国日本在线视频中文字幕| 日韩小视频网站| 亚洲人精品午夜| 美女把尿口扒开让男人桶在线观看| 午夜精品短视频| 一本色道久久综合熟妇| 亚洲嫩模很污视频| 国产在线观看免费一区| 图片专区亚洲欧美另类| 少妇大叫太大太粗太爽了a片小说| а√天堂资源国产精品| 视频区 图片区 小说区| 狠狠色综合播放一区二区| 免费毛片一区二区三区久久久| 日韩有码中文字幕在线| 美女日韩欧美| 免费在线观看国产精品| 97人妻一区二区精品免费视频| 久久综合图片| 国产精品 日产精品 欧美精品| 奴色虐av一区二区三区| 欧美成人精品福利在线视频| 99久久婷婷国产综合精品电影√| 国产成人一区二区三区小说| 国产精品成人免费一区久久羞羞| 国产成人综合欧美精品久久| 黄网站色欧美视频| √天堂资源在线| 中文字幕在线视频网| 黑丝一区二区| 久久久99久久精品欧美| 成人激情av| 欧美日韩一区二区三区不卡视频| 国内毛片毛片毛片毛片毛片| 国产精品迅雷| 日本中文字幕不卡| 国产在线视频91| 色姑娘综合天天| 91爱爱小视频k| 91麻豆国产自产在线观看| 在线观看亚洲一区二区| 拍拍拍无挡免费播放视频在线观看| 欧美xxxx性猛交bbbb| 在线看片线路1| 国产又粗又大又爽视频| 亚洲午夜极品| 黄色av一区二区三区| 国产91ⅴ在线精品免费观看| 少妇视频在线播放| 色琪琪一区二区三区亚洲区| 欧美性受xxxx黑人猛交88| 蜜桃传媒一区二区三区| 激情欧美日韩一区| 一本久道久久综合狠狠爱| 国产又大又粗又爽的毛片| 亚洲ww精品| 亚洲欧美综合另类中字| 3d性欧美动漫精品xxxx软件| 精品久久久久久久久久久院品网| 欧美另类极品videosbest最新版本| 国产精品人人爽人人爽| 国产av无码专区亚洲精品| 国模私拍视频在线观看| 这里只有精品视频| free性欧美69巨大| www.国产一区二区| 一级黄色小视频| 精品日韩在线一区| 猫咪在线永久网站| 精品一区二区三区在线观看国产| 草久在线视频| 国产精品178页| 超鹏97在线| 污视频网站在线观看| 欧美日韩亚洲综合一区| 亚洲精品国产suv一区88| 亚洲欧洲日韩女同| 一区二区免费在线观看| 国产无遮挡裸体免费久久| 五月婷婷一区| 国产精品一区二区三区四区在线观看| 国产精品无码久久久久| 国产做受高潮漫动| 免费毛片在线播放免费| 色婷婷综合久久久中文一区二区| 亚洲欧美精品中文字幕在线| 成人av资源网| 丝袜美腿av在线| 好看的日韩精品视频在线| 国产suv精品一区二区四区视频| 最近中文字幕mv免费高清视频8| 草莓视频一区| 午夜精品影视国产一区在线麻豆| 深夜精品寂寞黄网站在线观看| 成人欧美一区二区三区视频xxx| 亚洲天堂中文网| 好操啊在线观看免费视频| 成人黄色免费网址| 另类小说欧美激情| 秋霞午夜剧场| 九九亚洲精品| 中文字幕a在线观看| 亚洲一区三区在线观看| 国产大奶在线| 91久久精品一区二区| 国产成人一区二区三区小说| 水蜜桃一区二区| 欧美精品电影在线| 亚洲一级影院| 欧美成人黑人xx视频免费观看| 亚洲视屏在线观看| 国产亚洲福利社区一区| 欧美亚洲精品在线| 欧美一区二区三区四区五区| 一日本道久久久精品国产| 一本到12不卡视频在线dvd| 国产欧美日韩综合精品一区二区| 超碰97av在线| 国产黄色免费视频| 国产欧美中文在线| 成人免费观看www在线| 2020国产精品久久精品美国| 国内精品在线一区| 东方欧美亚洲色图在线| 超碰在线中文字幕| 含羞草www国产在线视频| 青青草免费在线观看| 亚洲日本无吗高清不卡| 久久久亚洲国产美女国产盗摄| av资源网站在线观看| www深夜成人a√在线| 免费日韩一区二区三区| 最新国产精品自拍| 欧美亚洲色图校园春色| www国产在线| 9人人澡人人爽人人精品| 日韩高清第一页| brazzers欧美精品| 正义之心1992免费观看全集完整版| 污片在线免费观看| 999国产在线视频| 粉嫩av一区| 影音先锋中文字幕影院| 三级av免费观看| 日韩精品在线免费播放| 欧洲国产伦久久久久久久| 97超碰资源站在线观看| 久久精品国产2020观看福利| 国产香蕉视频在线观看| 中文字幕一区二区三区乱码图片| 在线观看av网站| 日韩城人网站| 综合国产第二页| 国产午夜在线一区二区三区| 1区1区3区4区产品乱码芒果精品| √天堂中文官网8在线| 日韩精品一二三四区| 牛牛精品一区二区| 另类图片激情| 在线国产精品网| 国产做受69高潮| 日本www.色| 久久99久久人婷婷精品综合| 欧美激情xxxxx| av一本在线| 影音先锋中文字幕在线| 香蕉视频黄在线观看| 99国产在线观看| 精品国产乱子伦| 亚洲免费久久| 日韩黄色片视频| 91亚洲精品久久久| 国产精品视频一二三区| 欧美精品导航| 国产精品久久久久久久一区探花| 日韩av一区在线观看| 黄色在线免费播放| 97久草视频| 精品国产1区二区| 一级美女在线| 在线免费观看a级片| 日本久久黄色| 一区二区三区四区蜜桃| 国产99久久久| 国产综合色区在线观看| 欧美激情喷水视频| 欧美高清在线一区| 夫妇露脸对白88av| 久久久久亚洲av无码专区首jn| 国产美女久久精品香蕉69| 欧美极品jizzhd欧美| 国产免费高清av| 亚洲最新无码中文字幕久久| 欧美一级在线免费观看| 懂色av粉嫩av浪潮av| 国产成人精品无码免费看夜聊软件| 97人洗澡人人免费公开视频碰碰碰| 久久久一本二本三本| 一区二区三区免费视频播放器| 中文在线综合| 久久久99999| 成熟老妇女视频| 中文字幕一区电影| 亚洲高清av一区二区三区| 少妇高潮一区二区三区| 三级国产在线观看| 性欧美疯狂猛交69hd| 午夜91在线|