精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

麻豆映画在线观看| 91精品国产乱码久久久久久久久| 久久婷五月综合| 在线午夜影院| 成av人片一区二区| 日韩美女视频在线观看| 男人晚上看的视频| 久久悠悠精品综合网| 在线观看亚洲一区| 成人短视频在线观看免费| 婷婷五月综合久久中文字幕| 日韩电影在线一区二区| 欧美国产中文字幕| 丁香六月激情综合| 国产成人av毛片| 欧美日韩国产a| 黄色免费观看视频网站| av香蕉成人| 久久精品日产第一区二区三区高清版 | 亚洲综合激情小说| 日韩中文字幕一区二区| 亚洲女人18毛片水真多| 蜜桃av一区二区三区电影| 97精品免费视频| 91日韩中文字幕| 欧美特黄一级大片| 日韩av中文字幕在线免费观看| 日韩av.com| 忘忧草在线www成人影院| 亚洲一二三四区不卡| 伊人久久大香线蕉av一区| 三级毛片在线免费看| 国产成人免费视频网站| 国产美女扒开尿口久久久| 国产精品久久久久久久久久精爆| 66久久国产| 综合国产在线观看| 人妻视频一区二区| 综合国产视频| 日韩电视剧免费观看网站| 亚洲成人激情小说| 欧美久久一区二区三区| 欧美美女一区二区| 午夜两性免费视频| 国产精品4hu.www| 91黄视频在线观看| 热久久精品免费视频| 国模套图日韩精品一区二区| 精品露脸国产偷人在视频| 久久久久久免费看| 6699嫩草久久久精品影院| 一区二区成人在线| 日本香蕉视频在线观看| 日本小视频在线免费观看| 亚洲男同性恋视频| 大片在线观看网站免费收看| av片哪里在线观看| 亚洲黄色小说网站| 大陆极品少妇内射aaaaaa| av免费在线观看网址| 伊人性伊人情综合网| 白白操在线视频| 草美女在线观看| 精品福利在线观看| 热久久精品国产| 深夜视频一区二区| 欧美日韩高清一区二区不卡| 在线免费黄色网| 日韩精品一区二区三区中文在线| 日韩欧美国产一区二区三区| 图片区偷拍区小说区| 欧美黑人巨大videos精品| 亚洲欧美日韩成人| 刘亦菲国产毛片bd| 欧美区日韩区| 91av成人在线| 制服丝袜在线一区| 国产一区二区三区观看| www.成人av| 你懂得在线网址| 国产精品久久久久毛片软件| 久久久无码中文字幕久...| 超碰在线97国产| 欧美中文字幕一区| 一区二区三区人妻| 四虎5151久久欧美毛片| 中文字幕日韩欧美| 久久久久久久久久99| 99国产精品视频免费观看一公开| 日韩美女免费视频| 国产成人精品毛片| 久久午夜电影网| 日本女人高潮视频| 悠悠资源网亚洲青| 欧美久久久久久久久久| 在线黄色免费网站| 久久高清精品| 51久久精品夜色国产麻豆| 中文字幕乱码视频| 成人精品国产免费网站| 日韩精品不卡| 国内高清免费在线视频| 欧美在线免费观看亚洲| 中文字幕avav| 欧美一区二区三| 性视频1819p久久| 91tv国产成人福利| 91麻豆产精品久久久久久 | av黄色在线观看| 亚洲一区二区欧美激情| 久久久久国产一区| 欧美日韩麻豆| 欧美精品在线免费观看| 伊人精品在线视频| 久久综合色婷婷| 欧美日韩中文字幕在线播放| 国产v综合v| 久久成人综合| 国内揄拍国内精品少妇国语| 中文字幕久久一区| av福利导福航大全在线| 欧美日韩国产片| 日韩av在线第一页| 四虎永久在线观看| 国产女人18毛片水真多成人如厕| 日本丰满少妇黄大片在线观看| 色网在线免费观看| 欧美成人a∨高清免费观看| 性爱在线免费视频| 久久综合图片| 欧美激情在线观看| 免费啪视频在线观看| 九九视频免费观看视频精品| 欧美日韩福利在线观看| 午夜在线视频观看日韩17c| 色偷偷偷亚洲综合网另类| 日本一区二区欧美| 国内成人免费视频| 一区二区免费在线观看| 亚洲视频电影| 91cn在线观看| 337p亚洲精品色噜噜狠狠| 亚洲色图久久久| 日本美女高清在线观看免费| 五月天久久比比资源色| 99视频在线观看视频| 欧美电影三区| 国产精品视频999| 触手亚洲一区二区三区| 欧美中文字幕亚洲一区二区va在线 | 首页欧美精品中文字幕| 国内外成人免费视频| 国产美女福利在线观看| 精品精品国产高清一毛片一天堂| 欧美成人一区二区三区高清| 亚洲天堂一区在线| 久久99日本精品| 亚洲午夜在线观看| 外国成人毛片| 久久精品青青大伊人av| 国产视频第二页| 亚洲免费观看高清完整版在线 | 2020国产精品视频| www.日韩高清| 亚洲一区二区在线观看视频 | 欧洲精品一区| 国产99久久精品一区二区 夜夜躁日日躁 | 一本色道久久88亚洲综合88| 国产九色91回来了| 中文字幕在线不卡视频| 杨幂一区二区国产精品| 激情婷婷亚洲| 欧美美乳视频网站在线观看| 成人国产网站| 成人444kkkk在线观看| 亚洲精品911| 欧美日韩一区二区三区在线免费观看| 波多野结衣a v在线| 久久国内精品视频| 精品国偷自产一区二区三区| 亚洲视频分类| 成人网页在线免费观看| a国产在线视频| 亚洲精品ady| 中文字幕第2页| 亚洲一区二区高清| 亚洲成人黄色av| 国产一区二区三区黄视频| xxxx18hd亚洲hd捆绑| 精品国产视频| 成人欧美一区二区三区在线观看 | 亚洲一区中文字幕在线观看| av男人的天堂在线观看| 中文字幕日韩av| 欧美综合视频在线| 精品视频在线视频| 国产无套在线观看| 国产精品国产三级国产专播品爱网 | 欧美三级电影网址| 久久久久久久久网站| 粉嫩一区二区三区国产精品| 精品美女一区二区| 在线视频 中文字幕| 亚洲第一综合色| 男人晚上看的视频| 久久精品无码一区二区三区| 天堂va欧美va亚洲va老司机| 日韩精品国产欧美| www.av片| 亚洲成av人片乱码色午夜| 欧美连裤袜在线视频| 国产suv精品一区二区四区视频| 国产精品日日做人人爱| 美女的胸无遮挡在线观看| 欧美成年人视频网站欧美| 国产精品久久久久久久龚玥菲| 日韩精品一区二区在线观看| 一级黄色短视频| 色菇凉天天综合网| 日韩免费观看一区二区| 一区二区三区在线观看国产| 我想看黄色大片| 久久久电影一区二区三区| 国产chinesehd精品露脸| 久久精品久久精品| 久久久久国产精品熟女影院| 一本综合精品| 东北少妇不带套对白| 9191国语精品高清在线| 亚洲女人毛片| 日韩理论电影大全| 日韩欧美亚洲v片| 国产成人精品一区二区免费看京 | 亚洲AV成人无码一二三区在线| 欧美一级片在线看| 国产原创中文av| 欧美日韩国产在线观看| 欧美激情一区二区三区免费观看 | 2018日韩中文字幕| av漫画网站在线观看| 欧美国产日产韩国视频| 一区二区三区伦理| 欧美高清性猛交| 成人影音在线| 97精品国产91久久久久久| av中文字幕在线观看第一页 | 穿情趣内衣被c到高潮视频| 98精品久久久久久久| 自拍另类欧美| 真实国产乱子伦精品一区二区三区| 亚洲在线欧美| 亚洲国产精品91| 成人在线免费高清视频| 国产精品激情电影| 无码专区aaaaaa免费视频| 99精品国产在热久久下载| 久久视频这里有精品| 亚洲欧美大片| 污污的网站18| 国产麻豆视频精品| 国产免费无码一区二区| 99国产精品国产精品久久| 熟女少妇一区二区三区| 中文字幕av一区二区三区免费看 | 最新av在线播放| 高清欧美性猛交xxxx| 深夜福利视频一区二区| 国产精品高清在线| 伊人亚洲精品| 国产精品一区二区三区观看| 美女一区二区在线观看| 日本不卡一区| 久久久久久久久久久久久久久久久久 | 北条麻妃高清一区| 日韩美女国产精品| 亚洲一二区在线| 亚洲一级电影| 免费看a级黄色片| 国产乱码精品一区二区三区忘忧草 | 中文在线免费一区三区| 久久福利电影| 欧美日韩精品在线一区| www国产免费| 西西裸体人体做爰大胆久久久| 亚洲欧美激情网| 成人精品视频网站| 91无套直看片红桃在线观看| 亚洲国产日韩a在线播放性色| 黄色一级视频免费看| 欧美一区二区在线不卡| 青青草在线视频免费观看| 久久精品视频在线播放| 日韩欧美一中文字暮专区| 国产欧美日韩中文| 欧美一区二区三区久久| 在线无限看免费粉色视频| 一本色道88久久加勒比精品| 天堂av手机在线| 久久久www成人免费无遮挡大片| 疯狂试爱三2浴室激情视频| 欧美午夜www高清视频| 国产福利小视频| 亚洲天堂影视av| av在线加勒比| 91视频九色网站| 成人短片线上看| 久色视频在线播放| 国产成人av电影免费在线观看| 97在线观看免费视频| 午夜精品aaa| 成人1区2区3区| 色悠悠久久久久| 欧美xx视频| 好吊色欧美一区二区三区四区| 欧美电影免费播放| 色一情一乱一伦一区二区三区日本| 成人a区在线观看| 男女免费视频网站| 3d成人h动漫网站入口| 欧美日韩伦理片| 国自产精品手机在线观看视频| 精品国产第一国产综合精品| 深夜福利成人| 久久一区欧美| aa片在线观看视频在线播放| 一区二区三区中文免费| 国产精品热久久| 日韩中文字幕在线视频| 欧美不卡高清一区二区三区| 久久av一区二区| 国产精品日韩| 99久久国产精| 欧美日韩国产中字| 五月婷在线视频| 97国产在线观看| 欧美重口另类| 青青视频在线播放| 91在线播放网址| 麻豆久久久久久久久久| 亚洲精品久久视频| 色是在线视频| 日本a级片久久久| 日本亚洲三级在线| 国产极品视频在线观看| 欧美日韩不卡在线| 成人国产免费电影| 99精品欧美一区二区三区| 欧美久色视频| 在线视频 日韩| 日韩欧美在线视频观看| 青青久在线视频| 国产精品久久二区| 久久综合成人| 伊人成人免费视频| 亚洲综合色视频| 污视频软件在线观看| 26uuu久久噜噜噜噜| 免费视频亚洲| 一女二男3p波多野结衣| 亚洲欧美电影一区二区| 国产欧美久久久| 欧美黑人国产人伦爽爽爽| silk一区二区三区精品视频| 人妻久久久一区二区三区| 国产亚洲成av人在线观看导航| 中文字幕+乱码+中文字幕明步| 久久精品亚洲国产| 亚洲精品18| 337p粉嫩大胆噜噜噜鲁| 国产欧美日韩三级| 国产av一区二区三区| 午夜精品久久17c| 亚洲另类av| 中文字幕视频三区| 亚洲国产美国国产综合一区二区| 同心难改在线观看| 国产中文字幕91| 亚洲精选91| www.xx日本| 日韩电影第一页| 国产不卡精品在线| 黄色av网址在线播放| 国产精品色哟哟| 黄色a在线观看| 国产精品美女免费视频| 欧美久久视频| jizz中文字幕| 精品国产一区二区三区忘忧草| 欧美色网一区| 污污污污污污www网站免费| 久久女同性恋中文字幕| 99久久久国产精品无码网爆| 欧美野外猛男的大粗鳮| 国产精品精品| 大又大又粗又硬又爽少妇毛片 | 天天综合一区| 97超碰在线免费观看| 欧美成人综合网站| 久久久久久一区二区三区四区别墅| 国产一级不卡视频|