精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

[]*T *[]T *[]*T 傻傻分不清楚

開發 后端
相信使用過切片會發現非常類似于 Java 中的 ArrayList,同樣是基于數組實現,也會擴容發生數據拷貝;這樣看來語言只是上層使用的選擇,一些通用的底層實現大家都差不多。

[[413416]]

本文轉載自微信公眾號「crossoverJie」,作者crossoverJie。轉載本文請聯系crossoverJie公眾號。

前言

作為一個 Go 語言新手,看到一切”詭異“的代碼都會感到好奇;比如我最近看到的幾個方法;偽代碼如下:

  1. func FindA() ([]*T,error) { 
  2.  
  3. func FindB() ([]T,error) { 
  4.  
  5. func SaveA(data *[]T) error { 
  6.  
  7. func SaveB(data *[]*T) error { 

相信大部分剛入門 Go 的新手看到這樣的代碼也是一臉懵逼,其中最讓人疑惑的就是:

  1. []*T 
  2. *[]T 
  3. *[]*T 

這樣對切片的聲明,先不看后面兩種寫法;單獨看 []*T 還是很好理解的:該切片中存放的是所有 T 的內存地址,會比存放 T 本身來說要更省空間,同時 []*T 在方法內部是可以修改 T 的值,而[]T 是修改不了。

  1. func TestSaveSlice(t *testing.T) { 
  2.  a := []T{{Name"1"}, {Name"2"}} 
  3.  for _, t2 := range a { 
  4.   fmt.Println(t2) 
  5.  } 
  6.  _ = SaveB(a) 
  7.  for _, t2 := range a { 
  8.   fmt.Println(t2) 
  9.  } 
  10.  
  11. func SaveB(data []T) error { 
  12.  t := data[0] 
  13.  t.Name = "1233" 
  14.  return nil 
  15.  
  16. type T struct { 
  17.  Name string 

比如以上例子打印的是

  1. {1} 
  2. {2} 
  3. {1} 
  4. {2} 

只有將方法修改為

  1. func SaveB(data []*T) error { 
  2.  t := data[0] 
  3.  t.Name = "1233" 
  4.  return nil 

才能修改 T 的值:

  1. &{1} 
  2. &{2} 
  3. &{1233} 
  4. &{2} 

示例

下面重點來看看 []*T 與 *[]T 的區別,這里寫了兩個 append 函數:

  1. func TestAppendA(t *testing.T) { 
  2.  x:=[]int{1,2,3} 
  3.  appendA(x) 
  4.  fmt.Printf("main %v\n", x) 
  5. func appendA(x []int) { 
  6.  x[0]= 100 
  7.  fmt.Printf("appendA %v\n", x) 

先看第一種,輸出是結果是:

  1. appendA [1000 2 3] 
  2. main [1000 2 3] 

說明在函數傳遞過程中,函數內部的修改能夠影響到外部。

下面我們再看一個例子:

  1. func appendB(x []int) { 
  2.  x = append(x, 4) 
  3.  fmt.Printf("appendA %v\n", x) 

最終結果卻是:

  1. appendA [1 2 3 4] 
  2. main [1 2 3] 

沒有影響到外部。

而當我們再調整一下會發現又有所不同:

  1. func TestAppendC(t *testing.T) { 
  2.  x:=[]int{1,2,3} 
  3.  appendC(&x) 
  4.  fmt.Printf("main %v\n", x) 
  5. func appendC(x *[]int) { 
  6.  *x = append(*x, 4) 
  7.  fmt.Printf("appendA %v\n", x) 

最終的結果:

  1. appendA &[1 2 3 4] 
  2. main [1 2 3 4] 

可以發現如果傳遞切片的指針時,使用 append 函數追加數據時會影響到外部。

slice 原理

在分析上面三種情況之前,我們先來了解下 slice 的數據結構。

直接查看源碼會發現 slice 其實就是一個結構體,只是不能直接對外訪問。

源碼地址 runtime/slice.go

其中有三個重要的屬性:

屬性 含義
array 底層存放數據的數組,是一個指針。
len 切片長度
cap 切片容量 cap>=len

提到切片就不得不想到數組,可以這么理解:

切片是對數組的抽象,而數組則是切片的底層實現。

其實通過切片這個名字也不難看出,它就是從數組中切了一部分;相對于數組的固定大小,切片可以根據實際使用情況進行擴容。

所以切片也可以通過對數組"切一刀"獲得:

  1. x1:=[6]int{0,1,2,3,4,5} 
  2. x2 := x[1:4] 
  3. fmt.Println(len(x2), cap(x2)) 

其中 x1 的長度與容量都是6。

  • x2 的長度與容量則為3和5。
  • x2 的長度很容易理解。

容量等于5可以理解為,當前這個切片最多可以使用的長度。

因為切片 x2 是對數組 x1 的引用,所以底層數組排除掉左邊一個沒有被引用的位置則是該切片最大的容量,也就是5。

同一個底層數組

以剛才的代碼為例:

  1. func TestAppendA(t *testing.T) { 
  2.  x:=[]int{1,2,3} 
  3.  appendA(x) 
  4.  fmt.Printf("main %v\n", x) 
  5. func appendA(x []int) { 
  6.  x[0]= 100 
  7.  fmt.Printf("appendA %v\n", x) 

在函數傳遞過程中,main 中的 x 與 appendA 函數中的 x 切片所引用的是同個數組。

所以在函數中對 x[0]=100,main函數中也能獲取到。

本質上修改的就是同一塊內存數據。

值傳遞帶來的誤會

在上述例子中,在 appendB 中調用 append 函數追加數據后會發現 main 函數中并沒有受到影響,這里我稍微調整了一下示例代碼:

  1. func TestAppendB(t *testing.T) { 
  2.  //x:=[]int{1,2,3} 
  3.  x := make([]int, 3,5) 
  4.  x[0] = 1 
  5.  x[1] = 2 
  6.  x[2] = 3 
  7.  appendB(x) 
  8.  fmt.Printf("main %v len=%v,cap=%v\n", x,len(x),cap(x)) 
  9. func appendB(x []int) { 
  10.  x = append(x, 444) 
  11.  fmt.Printf("appendB %v len=%v,cap=%v\n", x,len(x),cap(x)) 

主要是修改了切片初始化方式,使得容量大于了長度,具體原因后續會說明。

輸出結果如下:

  1. appendB [1 2 3 444] len=4,cap=5 
  2. main [1 2 3] len=3,cap=5 

main 函數中的數據看樣子確實沒有受到影響;但細心的朋友應該會注意到 appendB 函數中的 x 在 append() 之后長度 +1 變為了4。

而在 main 函數中長度又變回了3.

這個細節區別就是為什么 append() "看似" 沒有生效的原因;至于為什么要說“看似”,再次調整了代碼:

  1. func TestAppendB(t *testing.T) { 
  2.  //x:=[]int{1,2,3} 
  3.  x := make([]int, 3,5) 
  4.  x[0] = 1 
  5.  x[1] = 2 
  6.  x[2] = 3 
  7.  appendB(x) 
  8.  fmt.Printf("main %v len=%v,cap=%v\n", x,len(x),cap(x)) 
  9.  
  10.  y:=x[0:cap(x)] 
  11.  fmt.Printf("y %v len=%v,cap=%v\n", y,len(y),cap(y)) 

在剛才的基礎之上,以 append 之后的 x 為基礎再做了一個切片;該切片的范圍為 x 所引用數組的全部數據。

再來看看執行結果如何:

  1. appendB [1 2 3 444] len=4,cap=5 
  2. main [1 2 3] len=3,cap=5 
  3. y [1 2 3 444 0] len=5,cap=5 

會神奇的發現 y 將所有數據都打印出來,在 appendB 函數中追加的數據其實已經寫入了數組中,但為什么 x 本身沒有獲取到呢?

看圖就很容易理解了:

  • 在appendB中確實是對原始數組追加了數據,同時長度也增加了。
  • 但由于是值傳遞,所以 slice 這個結構體即便是修改了長度為4,也只是對復制的那個對象修改了長度,main 中的長度依然為3.
  • 由于底層數組是同一個,所以基于這個底層數組重新生成了一個完整長度的切片便能看到追加的數據了。

所以這里本質的原因是因為 slice 是一個結構體,傳遞的是值,不管方法里如何修改長度也不會影響到原有的數據(這里指的是長度和容量這兩個屬性)。

切片擴容

還有一個需要注意:

剛才特意提到這里的例子稍有改變,主要是將切片的容量設置超過了數組的長度;

如果不做這個特殊設置會怎么樣呢?

  1. func TestAppendB(t *testing.T) { 
  2.  x:=[]int{1,2,3} 
  3.  //x := make([]int, 3,5) 
  4.  x[0] = 1 
  5.  x[1] = 2 
  6.  x[2] = 3 
  7.  appendB(x) 
  8.  fmt.Printf("main %v len=%v,cap=%v\n", x,len(x),cap(x)) 
  9.  
  10.  y:=x[0:cap(x)] 
  11.  fmt.Printf("y %v len=%v,cap=%v\n", y,len(y),cap(y)) 
  12. func appendB(x []int) { 
  13.  x = append(x, 444) 
  14.  fmt.Printf("appendB %v len=%v,cap=%v\n", x,len(x),cap(x)) 

輸出結果:

  1. appendB [1 2 3 444] len=4,cap=6 
  2. main [1 2 3] len=3,cap=3 
  3. y [1 2 3] len=3,cap=3 

這時會發現 main 函數中的 y 切片數據也沒有發生變化,這是為什么呢?

這是因為初始化 x 切片時長度和容量都為3,當在 appendB 函數中追加數據時,會發現沒有位置了。

  • 這時便會進行擴容:
  • 將老數據復制一份到新的數組中。
  • 追加數據。

將新的數據內存地址返回給 appendB 中的 x .

同樣的由于是值傳遞,所以 appendB 中的切片換了底層數組對 main 函數中的切片沒有任何影響,也就導致最終 main 函數的數據沒有任何變化了。

傳遞切片指針

有沒有什么辦法即便是在擴容時也能對外部產生影響呢?

  1. func TestAppendC(t *testing.T) { 
  2.  x:=[]int{1,2,3} 
  3.  appendC(&x) 
  4.  fmt.Printf("main %v len=%v,cap=%v\n", x,len(x),cap(x)) 
  5. func appendC(x *[]int) { 
  6.  *x = append(*x, 4) 
  7.  fmt.Printf("appendC %v\n", x) 

輸出結果為:

  1. appendC &[1 2 3 4] 
  2. main [1 2 3 4] len=4,cap=6 

這時外部的切片就能受到影響了,其實原因也很簡單;

剛才也說了,因為 slice 本身是一個結構體,所以當我們傳遞指針時,就和平時自定義的 struct 在函數內部通過指針修改數據原理相同。

最終在 appendC 中的 x 的指針指向了擴容后的結構體,因為傳遞的是 main 函數中 x 的指針,所以同樣的 main 函數中的 x 也指向了該結構體。

總結

所以總結一下:

  • 切片是對數組的抽象,同時切片本身也是一個結構體。
  • 參數傳遞時函數內部與外部引用的是同一個數組,所以對切片的修改會影響到函數外部。
  • 如果發生擴容,情況會發生變化,同時擴容會導致數據拷貝;所以要盡量預估切片大小,避免數據拷貝。
  • 對切片或數組重新生成切片時,由于共享的是同一個底層數組,所以數據會互相影響,這點需要注意。
  • 切片也可以傳遞指針,但場景很少,還會帶來不必要的誤解;建議值傳值就好,長度和容量占用不了多少內存。

相信使用過切片會發現非常類似于 Java 中的 ArrayList,同樣是基于數組實現,也會擴容發生數據拷貝;這樣看來語言只是上層使用的選擇,一些通用的底層實現大家都差不多。

 

這時我們再看標題中的 []*T *[]T *[]*T 就會發現這幾個并沒有什么聯系,只是看起來很像容易唬人。

 

責任編輯:武曉燕 來源: crossoverJie
相關推薦

2025-10-27 00:00:00

2021-03-10 08:56:37

Zookeeper

2022-05-15 21:52:04

typeTypeScriptinterface

2024-02-29 09:08:56

Encoding算法加密

2020-10-30 08:20:04

SD卡TF卡存儲

2018-12-17 12:30:05

Kubernetes存儲存儲卷

2018-05-22 16:24:20

HashMapJavaJDK

2020-03-03 17:35:09

Full GCMinor

2025-08-18 03:25:00

2023-02-27 15:46:19

數據元元數據

2023-09-03 21:18:07

Python編程語言

2021-02-08 23:47:51

文件存儲塊存儲對象存儲

2025-05-12 08:40:00

前端監控DOM

2025-08-14 08:21:17

PODAODTO

2016-11-04 12:51:46

Unix網絡IO 模型

2021-11-09 06:01:35

前端JITAOT

2022-02-25 09:14:33

類變量共享實例變量

2024-11-04 00:00:03

viewportDOMSPA

2025-08-26 04:00:00

2020-11-11 07:32:18

MySQL InnoDB 存儲
點贊
收藏

51CTO技術棧公眾號

成人四虎影院| 国产人成在线视频| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩三级精品电影久久久| 欧美日韩激情四射| 深夜福利在线看| 精品一二三四区| 国模吧一区二区| 亚洲成人黄色av| 亚洲小说春色综合另类电影| 狠狠躁夜夜躁人人爽超碰91| 夜夜爽99久久国产综合精品女不卡| 国产免费的av| 国产美女精品| 久久伊人精品一区二区三区| 蜜桃精品成人影片| 国产日韩在线观看视频 | 欧美黑吊大战白妞| 神马久久一区二区三区| 日韩情涩欧美日韩视频| 精品国产成人av在线免| 18videosex性欧美麻豆| 久久综合av免费| 亚洲va欧美va国产综合久久| 中文字幕亚洲精品一区| 欧美精品尤物在线观看| 亚洲第一区中文99精品| 国产传媒免费观看| 周于希免费高清在线观看| 亚洲欧美日韩精品久久久久| 日本高清视频一区二区三区| 懂色av一区二区三区四区 | xxx中文字幕| 欧美一级大黄| 婷婷久久综合九色综合伊人色| 伊人久久大香线蕉av一区| 免费黄网站在线观看| 成人免费精品视频| 亚洲一区二区三区xxx视频| 国产乱码77777777| 在线视频精品| 久久久久久有精品国产| 国产精品三区在线观看| 日本一二区不卡| 亚洲欧洲xxxx| jlzzjizz在线播放观看| 国产精品18hdxxxⅹ在线| 91精品欧美福利在线观看| wwwwww.色| 日本久久免费| 一本色道亚洲精品aⅴ| a级黄色一级片| 成人性生交大片免费看网站| 亚洲精品一二三四区| 中文字幕色一区二区| 亚洲s色大片| 日本一区二区高清| 天堂资源在线亚洲视频| 国产专区在线播放| 欧美激情综合在线| 欧美精品一区在线| 黄色av网站在线免费观看| 91香蕉视频污在线| 欧美日韩电影一区二区| 九色在线播放| 国产欧美日韩在线| 亚洲一区二区三区在线观看视频| 国产在线视频网址| 国产精品看片你懂得| 视频一区二区三区在线观看 | 久久精品91久久久久久再现| 老司机精品免费视频| 日本道不卡免费一区| 自拍偷拍亚洲欧美| 91高清免费看| 激情综合激情| 欧美影院在线播放| 亚洲免费视频二区| 激情av综合网| 丁香婷婷久久久综合精品国产| 丰满肥臀噗嗤啊x99av| 波多野结衣亚洲一区| 蜜桃av噜噜一区二区三| 成人性爱视频在线观看| 亚洲欧洲精品一区二区三区不卡| 超碰97在线看| 日韩欧美精品一区二区三区| 欧洲av一区二区嗯嗯嗯啊| 日韩av加勒比| 欧美理伦片在线播放| 永久免费看mv网站入口亚洲| 欧美三级黄色大片| 亚洲精品视频啊美女在线直播| 97欧美精品一区二区三区| 欧美超碰在线观看| 国产在线观看免费一区| 国产一区在线免费观看| eeuss影院www在线播放| 一区二区三区蜜桃| 黄色片久久久久| 外国成人毛片| 国产视频精品免费播放| 亚洲色图100p| av成人天堂| 国产日韩欧美在线观看| 蜜桃久久一区二区三区| 欧美—级在线免费片| 免费特级黄色片| 亚洲第一会所001| 欧美变态口味重另类| 瑟瑟视频在线观看| 国模 一区 二区 三区| 国产精品成人免费视频| 囯产精品一品二区三区| 国产精品欧美久久久久无广告 | 最新在线黄色网址| 天天综合亚洲| 国产91色在线|免| www.久久成人| 中国av一区二区三区| 国产3p露脸普通话对白| av在线亚洲一区| 亚洲人成电影网站色…| 麻豆亚洲av成人无码久久精品| 奇米影视一区二区三区小说| 精品一区二区三区免费毛片| 成人免费网站在线观看视频| 91黄色免费版| 草草地址线路①屁屁影院成人| 欧美激情在线| 国产在线98福利播放视频| 青青色在线视频| 亚洲一区av在线| 福利视频999| 成人综合久久| 国产精品吹潮在线观看| 涩爱av在线播放一区二区| 日韩美女视频一区二区 | 老女人性淫交视频| 久久99精品国产.久久久久久 | 亚洲黄色片免费看| 日韩精品欧美激情一区二区| 国产成人精品视频| 日本福利片高清在线观看| 亚洲妇女屁股眼交7| 亚洲熟女乱综合一区二区| 婷婷亚洲综合| 成人国产在线视频| 黄色在线观看网站| 91精品国产色综合久久| 国产精品丝袜一区二区| 九色|91porny| 亚洲精品偷拍视频| 欧洲精品99毛片免费高清观看| 日韩在线观看网站| 91国在线视频| 亚洲欧美激情插| 性xxxxxxxxx| 亚洲经典三级| 久久久水蜜桃| 奇米777日韩| 中文字幕av一区二区| 在线观看你懂的网站| 国产婷婷精品av在线| 精品久久久久久中文字幕2017| 国产一区99| 国产精品九九久久久久久久| 第九色区av在线| 欧亚洲嫩模精品一区三区| 免费一级特黄3大片视频| 麻豆精品久久精品色综合| 这里只有精品66| 无人区乱码一区二区三区| 久久久久亚洲精品| 水莓100国产免费av在线播放| 91国在线观看| 久草手机视频在线观看| 国产成人欧美日韩在线电影| 国产精品专区在线| 免费av一区二区三区四区| 国产精品99久久99久久久二8| jizz亚洲| 欧美大片日本大片免费观看| 亚洲一区欧美在线| 国产蜜臀av在线一区二区三区| 成人免费在线观看视频网站| 外国成人激情视频| 国内一区二区三区在线视频| 欧美日韩视频免费观看| 久久五月天综合| 少妇精品高潮欲妇又嫩中文字幕| 色哟哟在线观看一区二区三区| 91无套直看片红桃在线观看| 国产精品一级片在线观看| 久久久999视频| 日韩欧美网址| 国产日韩一区二区| 欧美成人一二区| 欧美极品在线播放| 国产大学生校花援交在线播放 | 国外成人在线直播| 国产高清av在线| 欧美大片在线观看| 中文在线免费看视频| 亚洲一区二区三区激情| 69xxx免费| 成人av中文字幕| 黄色永久免费网站| 一本色道久久综合亚洲精品高清| 亚洲国产另类久久久精品极度| 6080亚洲理论片在线观看| 国产精品成人aaaaa网站| 成人影音在线| 精品国产一区二区三区久久狼5月| 免费观看黄色av| 欧美日韩国产色站一区二区三区| 久久综合成人网| 国产精品久久久久永久免费观看| 人妻激情偷乱频一区二区三区| 美国毛片一区二区三区| 久久国产亚洲精品无码| 久久久久久久久久久久久久| 欧美精品一区二区三区四区五区 | 欧美人狂配大交3d怪物一区| 亚欧视频在线观看| 亚洲免费观看在线观看| 性少妇xx生活| 国产日韩欧美高清在线| 中文在线观看免费视频| 精品一区二区三区视频| 中文字幕无码不卡免费视频| 日韩视频不卡| 国产传媒久久久| 亚洲91中文字幕无线码三区| 水蜜桃一区二区三区| 亚洲婷婷伊人| 国产精品区一区二区三在线播放| 亚洲天堂中文字幕在线观看| 成人激情电影一区二区| yw.尤物在线精品视频| 欧洲亚洲女同hd| 97人人爽人人澡人人精品| 九九久久国产精品| 九色porny丨首页在线| 中文字幕亚洲一区| www.在线播放| 国产一区二区三区精品久久久| 免费一级在线观看| 国产视频精品xxxx| 欧美视频免费一区二区三区| 亚洲国产精久久久久久| 空姐吹箫视频大全| 欧美mv日韩mv| 亚洲精品字幕在线观看| 亚洲成人久久久| 乱色精品无码一区二区国产盗| 日韩欧美色综合| 亚洲国产av一区二区| 精品国产污污免费网站入口| 成人午夜免费福利| 日韩av在线免费观看一区| 免费在线视频一级不卡| 亚洲香蕉在线观看| 在线观看免费黄视频| 中文字幕一区二区三区电影| 免费在线观看黄色| 超碰精品一区二区三区乱码| 羞羞污视频在线观看| 国内精品久久久久久| 一二三四视频在线中文| 日本不卡高字幕在线2019| 97精品国产综合久久久动漫日韩| 国产美女精品免费电影| 国产中文欧美日韩在线| av日韩中文字幕| 神马久久av| 日韩精彩视频| 永久亚洲成a人片777777| 999一区二区三区| 香蕉久久a毛片| www.国产视频.com| a在线欧美一区| 波多野结衣av在线观看| 中文字幕一区二区三区在线播放| 国产免费无码一区二区视频 | 国产美女作爱全过程免费视频| 99热在线精品观看| 午夜激情av在线| 高清不卡在线观看av| 波多野结衣福利| 综合欧美一区二区三区| 日韩精品无码一区二区| 在线观看日产精品| www.亚洲黄色| 亚洲视频欧美视频| 怡红院在线播放| 青草青草久热精品视频在线观看| 99er精品视频| 免费亚洲一区二区| 亚洲影视一区| 日韩av资源在线| 福利电影一区二区| 欧美波霸videosex极品| 亚洲午夜私人影院| 伊人久久成人网| 日韩av有码在线| 成人在线直播| 日本久久久久亚洲中字幕| 国产精品白丝久久av网站| 久久精品女人的天堂av| 91精品国产91久久久久久密臀| 日韩视频免费播放| 精品一区二区三区在线观看| 88久久精品无码一区二区毛片| 亚洲日本va午夜在线影院| 五月婷婷六月婷婷| 欧美精品一区二区三区在线播放 | 69精品国产久热在线观看| 日韩欧美一区二区视频在线播放| 国产综合激情| 天天看片天天操| 国产欧美日韩在线| 成年人免费看毛片| 日韩一级精品视频在线观看| 91精品国产综合久久久久久豆腐| 亚洲91精品在线| 日韩精品一区二区三区中文字幕 | 欧美日韩一区二区免费在线观看| 国产精品玖玖玖| 中文字幕av一区中文字幕天堂| 一区二区乱码| 国产一区喷水| 亚洲国产日本| 无码人妻少妇色欲av一区二区| 中文字幕av不卡| 在线观看日本网站| 亚洲精品国产拍免费91在线| 欧美6一10sex性hd| 亚洲一区二区少妇| 天天操夜夜操国产精品| 日本888xxxx| 欧美国产欧美亚州国产日韩mv天天看完整| 精品成人久久久| 亚洲激情电影中文字幕| 黄色美女视频在线观看| 亚洲a中文字幕| 亚洲精品a级片| 亚洲理论中文字幕| 亚洲视频免费观看| 国产日韩欧美一区二区东京热| 俺也去精品视频在线观看| 99久久999| 日本一区二区免费高清视频| 久久精品国产一区二区三| 国产三级短视频| 欧美日韩免费一区二区三区| 在线免费av电影| 成人国产亚洲精品a区天堂华泰| 91日韩免费| 三级黄色片播放| 亚洲一卡二卡三卡四卡| 亚洲av综合色区| 欧美国产高潮xxxx1819| 2018国产精品| 亚洲高清免费一级二级三级| 日韩在线视频观看免费| 456国产精品| 国产尤物久久久| 亚洲欧美国产中文| 亚洲三级久久久| 国产夫绿帽单男3p精品视频| 久久91亚洲精品中文字幕| y111111国产精品久久久| 大陆极品少妇内射aaaaa| 久久婷婷一区二区三区| 中文字幕乱伦视频| xvideos亚洲| 91精品导航| 那种视频在线观看| 国产精品亲子伦对白| 精品国产av一区二区三区| 97视频在线观看免费高清完整版在线观看| 天天躁日日躁成人字幕aⅴ| 五月婷婷深爱五月| 亚洲精品视频在线观看网站| 日本精品一区二区在线观看| 日本sm极度另类视频| 欧美大人香蕉在线| www国产视频| 在线国产电影不卡| av理论在线观看| 免费久久久一本精品久久区| 免费观看在线综合色| 久久免费在线观看视频| 亚洲视频在线观看| 清纯唯美激情亚洲| 日韩亚洲在线视频| 一区二区三区不卡在线观看| 青青久在线视频免费观看| 亚洲aⅴ男人的天堂在线观看|