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

GoFrame的gmap相比Go原生的map,天然支持排序和有序遍歷???

開發 后端
GoFrame提供的gmap字典類型,包含多個數據結構的map容器:HashMap、TreeMap和ListMap。其中TreeMap支持排序,TreeMap和ListMap支持有序遍歷。

前言

有好多初學GO的小伙伴都被Go語言中map的無序性“坑過”。尤其是PHP轉Go的小伙伴~

這篇文章會為大家介紹:

GoFrame的gmap相比于Go原生的map有什么優勢?為什么天然支持排序和有序遍歷?如何做到的?

GoFrame的gmap有哪些使用技巧?

先說結論

GoFrame提供的gmap字典類型,包含多個數據結構的map?容器:HashMap、TreeMap和ListMap?。其中TreeMap?支持排序,TreeMap和ListMap支持有序遍歷。

使用技巧

我們在使用GoFrame的gmap時,要結合自己的場景使用合適的map容器:

  • 當我們對返回順序有要求時不能使用HashMap?,因為HashMap返回的是無序列表;
  • 當需要按輸入順序返回結果時使用ListMap;
  • 當需要讓返回結果按照自然升序排列時使用TreeMap;

注意:gmap的實例化默認是HashMap?類型:hashMap := gmap.New(true)?

一圖勝千言

GoFrame gmap 基本介紹:

支持并發安全開關選項的map容器,最常用的數據結構。

該模塊包含多個數據結構的map?容器:HashMap、TreeMap和ListMap。

實例化示例:

   hashMap := gmap.New(true)
listMap := gmap.NewListMap(true)
treeMap := gmap.NewTreeMap(gutil.ComparatorInt, true)

實踐得真知

package main

import (
"fmt"
"github.com/gogf/gf/v2/container/gmap"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/gutil"
)

func main() {
array := g.Slice{1, 5, 2, 3, 4, 6, 8, 7, 9}
hashMap := gmap.New(true)
listMap := gmap.NewListMap(true)
treeMap := gmap.NewTreeMap(gutil.ComparatorInt, true)
for _, v := range array {
hashMap.Set(v, v)
}
for _, v := range array {
listMap.Set(v, v)
}
for _, v := range array {
treeMap.Set(v, v)
}

fmt.Println("HashMap Keys:", hashMap.Keys()) //HashMap Keys: [7 9 1 5 2 4 6 3 8]
fmt.Println("HashMap Values:", hashMap.Values()) //HashMap Values: [6 7 9 1 5 2 4 3 8]
//從打印結果可知hashmap的鍵列表和值列表返回值的順序沒有規律,隨機返回
fmt.Println("ListMap Keys:", listMap.Keys()) //ListMap Keys: [1 5 2 3 4 6 8 7 9]
fmt.Println("ListMap Values:", listMap.Values()) //ListMap Values: [1 5 2 3 4 6 8 7 9]
//listmap鍵列表和值列表有序返回,且順序和寫入順序一致
fmt.Println("TreeMap Keys:", treeMap.Keys()) //TreeMap Keys: [1 2 3 4 5 6 7 8 9]
fmt.Println("TreeMap Values:", treeMap.Values()) //TreeMap Values: [1 2 3 4 5 6 7 8 9]
//treemap鍵列表和值列表也有序返回,但是不和寫入順序一致,按自然數升序返回
}

打印結果

通過打印結果我們可以發現:

hashmap的鍵列表和值列表返回值的順序沒有規律,隨機返回

listmap鍵列表和值列表有序返回,且順序和寫入順序一致

treemap鍵列表和值列表也有序返回,但是不和寫入順序一致,按自然數升序返回

這也佐證了我開篇提到的使用技巧。

為了讓大家更好的理解gmap,下面介紹一下gmap的基礎使用和一些進階技巧。

基礎概念

GoFrame框架(下文簡稱gf)提供的數據類型,比如:字典gmap、數組garray、集合gset、隊列gqueue、樹形結構gtree、鏈表glist都是支持設置并發安全開關的。

支持設置并發安全開關這也是gf提供的常用數據類型和原生數據類型重要的區別之一。

對比sync.Map

Go語言提供的原生map不是并發安全的map類型

Go語言從1.9版本開始引入了并發安全的sync.Map,但gmap比較于標準庫的sync.Map性能更加優異,并且功能更加豐富。

goos: linux
goarch: amd64
Benchmark_GMapSet-4 10000000 209 ns/op 15 B/op 0 allocs/op
Benchmark_SyncMapSet-4 3000000 451 ns/op 67 B/op 3 allocs/op
Benchmark_GMapGet-4 30000000 66.4 ns/op 0 B/op 0 allocs/op
Benchmark_SyncMapGet-4 30000000 36.0 ns/op 0 B/op 0 allocs/op
Benchmark_GMapRemove-4 10000000 207 ns/op 0 B/op 0 allocs/op
Benchmark_SyncMapRmove-4 30000000 42.4 ns/op 0 B/op 0 allocs/op

對性能測試感興趣的小伙伴可以詳細看下官方文檔的介紹[2],不作為這篇文章的重點。

基礎使用

  • gmap.New(true) 在初始化的時候開啟并發安全開關
  • 通過 Set() 方法賦值,通過 Sets() 方法批量賦值
  • 通過 Size() 方法獲取map大小
  • 通過 Get() 根據key獲取value值
  • ...

更多操作大家可以直接查看下方的代碼示例,也歡迎大家動手實踐

為了方便大家更好的查看效果,在下方代碼段中標明了打印結果:

package main

import (
"fmt"
"github.com/gogf/gf/v2/container/gmap"
)

func main() {
m := gmap.New(true)
// 設置鍵值對
for i := 0; i < 10; i++ {
m.Set(i, i)
}
fmt.Println("查詢map大小:", m.Size())

//批量設置鍵值對
m.Sets(map[interface{}]interface{}{
10: 10,
11: 11,
})

// 目前map的值
fmt.Println("目前map的值:", m)

fmt.Println("查詢是否存在鍵值對:", m.Contains(1))

fmt.Println("根據key獲得value:", m.Get(1))

fmt.Println("刪除數據", m.Remove(1))

//刪除多組數據
fmt.Println("刪除前的map大?。?, m.Size())
m.Removes([]interface{}{2, 3})
fmt.Println("刪除后的map大?。?, m.Size())

//當前鍵名列表
fmt.Println("鍵名列表:", m.Keys()) //我們發現是無序列表
fmt.Println("鍵值列表:", m.Values()) //我們發現也是無序列表

//查詢鍵名,當鍵值不存在時寫入默認值
fmt.Println(m.GetOrSet(20, 20)) //返回值是20
fmt.Println(m.GetOrSet(20, "二十")) //返回值仍然是20,因為key對應的值存在
m.Remove(20)
fmt.Println(m.GetOrSet(20, "二十")) //返回值是二十,因為key對應的值不存在

// 遍歷map
m.Iterator(func(k interface{}, v interface{}) bool {
fmt.Printf("%v:%v \n", k, v)
return true
})

//自定義寫鎖操作
m.LockFunc(func(m map[interface{}]interface{}) {
m[88] = 88
})

// 自定義讀鎖操作
m.RLockFunc(func(m map[interface{}]interface{}) {
fmt.Println("m[88]:", m[88])
})

// 清空map
m.Clear()

//判斷map是否為空
fmt.Println("m.IsEmpty():", m.IsEmpty())
}

運行結果

上面介紹的基礎使用比較簡單,下面介紹進階使用。

合并 merge

注意:Merge()的參數需要是map的引用類型,也就是參數需要傳map的取址符。

package main

import (
"fmt"
"github.com/gogf/gf/v2/container/gmap"
)

func main() {
var m1, m2 gmap.Map
m1.Set("k1", "v1")
m2.Set("k2", "v2")
m1.Merge(&m2)
fmt.Println("m1.Map()", m1.Map()) //m1.Map() map[k1:v1 k2:v2]
fmt.Println("m2.Map()", m2.Map()) //m2.Map() map[k2:v2]
}

打印結果

序列化

正如之前的文章 GoFrame glist 基礎使用和自定義遍歷[3] 介紹的,gf框架提供的數據類型不僅支持設置并發安全開關,也都支持序列化和反序列化。

json序列化和反序列化:序列化就是轉成json格式,反序列化就是json轉成其他格式類型(比如:map、數組、對象等)

package main

import (
"encoding/json"
"fmt"
"github.com/gogf/gf/v2/container/gmap"
)

func main() {
// 序列化
//var m gmap.Map
m := gmap.New() //必須實例化 只是像上面聲明但是不進行實例化,是無法序列化成功的
m.Sets(map[interface{}]interface{}{
"name": "王中陽",
"age": 28,
})
res, _ := json.Marshal(m)
fmt.Println("序列化結果:", string(res)) //打印結果:{"age":28,"name":"王中陽"}

// 反序列化
m2 := gmap.New()
s := []byte(`{"age":28,"name":"王中陽"}`)
_ = json.Unmarshal(s, &m2)
fmt.Println("反序列化結果:", m2.Map()) //反序列化結果:map[age:28 name:王中陽]
}

打印結果

踩坑

正如上面代碼段中注釋掉的://var m gmap.Map

在進行序列化操作時,必須實例化map

m := gmap.New() 

只是聲明map而不進行實例化,是無法序列化成功的

var m gmap.Map

另外一個需要注意的知識點就是過濾空值了:

過濾空值

首先明確:空值和nil是不一樣的。

nil是未定義;而空值包括空字符串,false、0等

package main

import (
"fmt"
"github.com/gogf/gf/v2/container/gmap"
)

func main() {
//首先明確:空值和nil是不一樣的,nil是未定義;而空值包括空字符串,false、0等
m1 := gmap.NewFrom(map[interface{}]interface{}{
"k1": "",
"k2": nil,
"k3": 0,
"k4": false,
"k5": 1,
})

m2 := gmap.NewFrom(map[interface{}]interface{}{
"k1": "",
"k2": nil,
"k3": 0,
"k4": false,
"k5": 1,
})

m1.FilterEmpty()
m2.FilterNil()

fmt.Println("m1.FilterEmpty():", m1) //預測結果:k5:1
fmt.Println("m2.FilterNil():", m2) //預測結果:除了k2,其他都返回
}

打印結果

還有一個非常好用的特性,鍵值對反轉:

鍵值對反轉 Flip

package main

import (
"github.com/gogf/gf/v2/container/gmap"
"github.com/gogf/gf/v2/frame/g"
)

func main() {
// 鍵值對反轉flip
var m gmap.Map
m.Sets(map[interface{}]interface{}{
"k1": "v1",
"k2": "v2",
})
fmt.Println("反轉前:", m.Map())
m.Flip()
fmt.Println("反轉后:", m.Map())
}

打印結果

出棧

package main

import (
"fmt"
"github.com/gogf/gf/v2/container/gmap"
)

func main() {
//pop pops map出棧(彈棧)
var m gmap.Map
m.Sets(map[interface{}]interface{}{
1: 1,
2: 2,
3: 3,
4: 4,
5: 5,
})

fmt.Println("m.Pop()之前:", m.Map())
key, value := m.Pop()
fmt.Println("key:", key)
fmt.Println("value:", value)
fmt.Println("m.Pop()之后:", m.Map()) //多次測試后發現是隨機出棧,不能理所當然的認為按順序出棧

res := m.Pops(2) //參數是出棧個數
fmt.Println("res:", res)
fmt.Println("m.Pops之后:", m.Map()) //多次測試之后發現也是隨機出棧
}

運行結果

踩坑

注意:多次測試后發現是隨機出棧,不能理所當然的認為按順序出棧。

我們深入思考一下原因:其實很簡單,因為代碼示例中gmap.Map對象的底層實現是hashmap,本身就是無序的,當然不可能按順序出棧了。

總結

好了,我們再來回顧一下這篇文章的重點:

  • 我們在使用GoFrame的gmap時,要結合自己的場景使用合適的map容器:

當我們對返回順序有要求時不能使用HashMap?,因為HashMap返回的是無序列表;

當需要按輸入順序返回結果時使用ListMap;

當需要讓返回結果按照自然升序排列時使用TreeMap;

gmap的實例化默認是HashMap?類型:hashMap := gmap.New(true)

  • gmap的基礎使用和進階使用技巧:反轉map、序列化、合并map、出棧等。
  • gf框架提供的數據結構,比如:字典gmap、數組garray、集合gset、隊列gqueue、樹形結構gtree、鏈表glist都是支持設置并發安全開關的;而且都支持序列化和反序列化,實現了標準庫json數據格式的序列化/反序列化接口。

相關文章

[1]# Go容易搞錯的知識點匯總:Go map如何實現排序 部分: https://juejin.cn/post/7131717990558466062#heading-25

[2]官方文檔的介紹: https://goframe.org/pages/viewpage.action?pageId=30736719

[3]GoFrame glist 基礎使用和自定義遍歷: https://juejin.cn/post/7101515355062796296

本文轉載自微信公眾號「 程序員升級打怪之旅」,作者「王中陽Go」,可以通過以下二維碼關注。

轉載本文請聯系「 程序員升級打怪之旅」公眾號。

責任編輯:武曉燕 來源: 程序員升級打怪之旅
相關推薦

2022-11-02 07:46:31

GoFrameGcache緩存

2024-02-26 00:00:00

Gomapslice

2022-12-28 12:11:57

PHPGo框架

2014-07-15 11:16:17

Go語言

2022-04-06 08:19:13

Go語言切片

2012-06-15 09:56:40

2023-11-21 15:46:13

Go內存泄漏

2022-10-10 11:37:14

Gomap內存

2025-04-29 08:03:18

2025-04-18 08:07:12

2025-04-17 08:00:48

2025-04-28 08:00:56

2025-05-06 08:00:35

2025-05-06 05:00:00

2025-04-14 08:06:04

2025-04-25 08:01:12

Go應用程序部署

2025-04-15 08:00:53

2025-05-06 00:00:08

2025-04-24 09:01:46

2025-04-21 08:00:56

點贊
收藏

51CTO技術棧公眾號

精品久久久久久久久久国产 | 亚洲精品视频一二三区| 亚洲色图丝袜美腿| 国产精品入口免费| 久久精品偷拍视频| 综合久久十次| 亚洲欧洲黄色网| www,av在线| 手机av在线| 亚洲免费观看高清完整| 精品欧美日韩在线| 91国内精品视频| 黄色成人在线网站| 日韩最新在线视频| 亚洲熟女乱综合一区二区三区| 成人黄色免费网站| 精品久久久久久亚洲精品| 一区二区视频国产| 男同在线观看| 国产成人免费在线观看不卡| 国产精品久久久久av| 久久高清免费视频| 国产精品久久久久久久久久10秀 | 欧美视频第二页| 无罩大乳的熟妇正在播放| 午夜小视频在线| 久久亚洲综合色一区二区三区| 91中文字幕在线| 精品国产青草久久久久96| 99国产成+人+综合+亚洲欧美| 久久精品91久久久久久再现| 一本加勒比北条麻妃| 中文字幕日韩在线| 日韩无一区二区| 日韩中文字幕a| 国产无精乱码一区二区三区| 日韩精品免费一区二区在线观看 | 欧美网站在线观看| 伊人久久在线观看| 免费av网站在线观看| 国产偷国产偷精品高清尤物| 久久99精品国产99久久| 亚洲欧美黄色片| 国产成人精品在线看| 成人激情黄色网| 国产又粗又大又黄| 九一九一国产精品| 成人精品久久av网站| 日韩不卡高清视频| 日韩高清在线观看| 国产成人精品电影| 好吊色在线视频| 久久激情视频| 国产精品久久久久久av福利软件| 99精品在线播放| 国产精品久久久久毛片大屁完整版| 九九精品视频在线| 美女视频黄免费| 精品福利av| 午夜精品在线观看| 日韩伦人妻无码| 国产亚洲一区在线| 日本成人激情视频| 国语对白做受69按摩| 日本va欧美va欧美va精品| 国产成人在线视频| av首页在线观看| 粉嫩一区二区三区四区公司1| 欧美军同video69gay| 一级片视频免费观看| 欧美韩国日本| 欧美一级艳片视频免费观看| 性xxxxxxxxx| 极品一区美女高清| 亚洲乱码av中文一区二区| 受虐m奴xxx在线观看| 欧美在线观看视频一区| 久久久精品免费| 激情综合五月网| 99亚洲伊人久久精品影院红桃| 欧美亚洲在线视频| 怡红院成永久免费人全部视频| 精品一区二区三区视频在线观看 | 天天碰免费视频| 另类一区二区| 亚洲成人1234| 欧美三级视频网站| 欧美成人一品| 日本欧美一级片| 96日本xxxxxⅹxxx17| 国产成人免费在线观看不卡| 麻豆一区区三区四区产品精品蜜桃| 第三区美女视频在线| 亚洲精品高清在线| 日韩精品一区二区三区色欲av| 精品成人av| 精品少妇一区二区三区免费观看 | 国内外成人免费在线视频| 国产精品99久久免费| 亚洲精品成人免费| 四虎永久免费地址| 国产亚洲亚洲| 亚洲a在线播放| 你懂的在线观看视频网站| 综合久久综合久久| 女人另类性混交zo| ady日本映画久久精品一区二区| 亚洲跨种族黑人xxx| 午夜69成人做爰视频| 久久婷婷一区| 成人午夜电影在线播放| a天堂中文在线| 亚洲va天堂va国产va久| 不卡的在线视频| 亚洲婷婷影院| 高清欧美电影在线| 国产一区二区三区中文字幕| 26uuu精品一区二区三区四区在线| 中文字幕av久久| 欧美二三四区| 精品成人a区在线观看| 久久嫩草捆绑紧缚| 日韩电影免费在线| 久久99久久99精品蜜柚传媒| 亚洲图区一区| 欧美浪妇xxxx高跟鞋交| 公肉吊粗大爽色翁浪妇视频| 中文亚洲欧美| 国产精品一区二区三区不卡| gogo在线高清视频| 精品视频免费看| 中文字幕成人动漫| 国产欧美一区二区色老头| 99精品在线直播| bt在线麻豆视频| 欧美美女bb生活片| 老司机福利在线观看| 天堂在线亚洲视频| 欧美日韩系列| 亚洲精品国产精品国产| 亚洲电影免费观看高清完整版在线观看 | 伊人国产在线视频| 精品久久不卡| 国产精品91一区| 韩国福利在线| 欧美亚洲日本国产| 天堂av网手机版| 日韩高清不卡在线| 五月天综合网| 精品乱码一区二区三区四区| 亚洲深夜福利视频| 成人午夜精品视频| 国产精品久久久久久久久图文区| 国产精品拍拍拍| 日韩精品电影| 91免费观看网站| 日本h片在线| 亚洲第一免费播放区| 久草视频免费在线播放| 国产成人av电影在线| 日本一级黄视频| 国内精品麻豆美女在线播放视频 | www.色精品| 天堂…中文在线最新版在线| 日韩高清一级| 国产成人91久久精品| av网站在线播放| 91.成人天堂一区| 免费一级黄色大片| 91在线观看污| 嫩草影院国产精品| 中文精品久久| 久久资源av| 国产日本久久| 欧美精品videosex极品1| 色偷偷在线观看| 91激情五月电影| 五月婷婷综合激情网| 国产成人av资源| 欧美牲交a欧美牲交aⅴ免费下载| blacked蜜桃精品一区| 91麻豆国产语对白在线观看| av中文在线资源库| 一夜七次郎国产精品亚洲| 国产福利第一视频| 欧美日韩亚洲91| 三级黄色免费观看| av亚洲精华国产精华精| 亚洲久久中文字幕| 91久久亚洲| 亚洲一区3d动漫同人无遮挡 | 欧美日韩亚洲免费| 精品国产亚洲一区二区三区| 午夜精品一区二区三区在线视频 | 美女精品一区最新中文字幕一区二区三区 | 一道本在线观看视频| 欧美三级电影在线| 成人久久一区二区三区| a级片在线免费| 日韩在线免费高清视频| 色婷婷激情五月| 这里只有精品99re| aaa在线视频| 亚洲国产日产av| 久久噜噜色综合一区二区| 2022国产精品视频| 日韩久久久久久久久久久| 久久久久久黄| 加勒比成人在线| 伊人色**天天综合婷婷| 性刺激综合网| 天天久久夜夜| 国产精品国产三级欧美二区 | 88在线观看91蜜桃国自产| 四虎成人永久免费视频| 亚洲精品国产精品乱码不99| 婷婷丁香综合网| 久久精品欧美日韩精品| 国产chinese中国hdxxxx| 国产乱妇无码大片在线观看| 三年中国国语在线播放免费| 国产视频一区三区| 日韩伦理在线免费观看| 欧美日本一区| 日本xxxxx18| 羞羞答答成人影院www| 天堂资源在线亚洲资源| 久9久9色综合| 久久久久久国产精品mv| 老司机成人在线| 国产99在线播放| 日韩中文字幕在线一区 | 美女一区2区| 成人免费看片网址| 日韩在线亚洲| 97久久精品午夜一区二区| 99精品美女视频在线观看热舞| 国产精品视频色| 日韩一级特黄| 国产欧美精品va在线观看| 欧美国产日韩电影| 国产精品久久久91| 99精品在免费线偷拍| 国产精品爽爽爽| 国产一区二区色噜噜| 国产精品一区二区三| 丁香婷婷久久| 91精品国产综合久久香蕉最新版| 国产成人午夜性a一级毛片| 国产a级全部精品| 主播大秀视频在线观看一区二区| 国产精品2018| 亚洲成人毛片| 亚洲自拍欧美另类| 大奶在线精品| 免费一区二区三区| 欧美系列电影免费观看| 亚洲综合av一区| 欧美在线亚洲| 国内精品视频一区二区三区| 国产日韩一区二区三区在线| 成人一级片网站| 蜜臂av日日欢夜夜爽一区| 欧美wwwwwww| 国产成人超碰人人澡人人澡| 天天插天天射天天干| 久久精品在线观看| 久久久99999| 亚洲国产你懂的| 日本免费在线观看视频| 欧美亚洲一区二区在线| av无码精品一区二区三区宅噜噜| 亚洲成人av片| 美女毛片在线看| 色午夜这里只有精品| av毛片在线免费看| 欧美一级在线播放| 婷婷久久免费视频| 国产欧美综合精品一区二区| 国产午夜一区| 黄色一级片av| 久久一综合视频| 黑人性生活视频| 久久蜜桃av一区精品变态类天堂 | 国产男人精品视频| 成午夜精品一区二区三区软件| 欧美一级二级三级九九九| 天天综合亚洲| 337p粉嫩大胆噜噜噜鲁| 久久99蜜桃精品| 亚洲天堂资源在线| 中文字幕在线一区免费| 精品91久久久| 91精品国产综合久久香蕉的特点 | 中文字幕日韩免费视频| 蜜臀av在线| 国产在线精品播放| 日韩母乳在线| 日本高清视频免费在线观看| 视频在线观看一区| 国产香蕉精品视频| 国产精品美女久久久久高潮| 日韩免费一级片| 91麻豆精品国产91久久久使用方法 | 久久精品久久久久| 成人勉费视频| av资源站久久亚洲| 久久国产电影| 国产v亚洲v天堂无码久久久| 成人黄色av电影| 黄色一级片中国| 欧美日韩一区视频| 日韩美女一级视频| 久久久噜噜噜久久| 国内精品视频| 亚洲综合第一| 青青草97国产精品免费观看无弹窗版| 国产精品一区二区无码对白| √…a在线天堂一区| 中文有码在线播放| 亚洲欧洲国产精品| 伊人久久视频| 狠狠色综合网站久久久久久久| 欧美人与禽猛交乱配视频| 国产乱女淫av麻豆国产| 国产精品日日摸夜夜摸av| 无码人妻久久一区二区三区| 亚洲精品国产拍免费91在线| 国产网红女主播精品视频| 91免费在线观看网站| 国产精品久久久久久久久妇女| www.亚洲高清| 国产精品婷婷午夜在线观看| 波多野结衣家庭主妇| 亚洲欧洲美洲在线综合| av电影一区| 欧美日韩精品久久久免费观看| aa国产精品| 久久精品老司机| 精品magnet| 色哟哟在线观看| 日本一区二区在线播放| 一本色道久久综合狠狠躁的番外| 免费看国产曰批40分钟| av亚洲精华国产精华精| 成年人免费高清视频| 国产视频综合在线| 欧美xxxxxx| 天堂va久久久噜噜噜久久va| 麻豆成人在线观看| 午夜成人亚洲理伦片在线观看| 欧美精品成人一区二区三区四区| 午夜在线免费观看视频| 91色视频在线导航| 你懂的国产精品| 国产高潮视频在线观看| 午夜精品一区二区三区电影天堂| 四虎国产精品永远| 国产精品69久久久久| 色777狠狠狠综合伊人| 国产在线观看中文字幕| 一区二区欧美国产| 无码h黄肉3d动漫在线观看| 热久久美女精品天天吊色| 欧美日韩黑人| 日韩精品aaa| 亚洲第一成人在线| 欧美香蕉爽爽人人爽| 国产一区在线播放| 亚洲网站视频| 99久久人妻无码精品系列| 欧美三级视频在线观看| 91极品在线| 欧美久久久久久| 精品在线免费观看| 久久精品亚洲无码| 亚洲人成电影网站色www| 亚洲高清影院| 成年人视频观看| 国产精品久久久久aaaa| 性欧美18一19性猛交| 欧美做爰性生交视频| 91tv精品福利国产在线观看| 亚洲自拍偷拍精品| 欧美亚州韩日在线看免费版国语版| 成人在线视频亚洲| 欧美一区二区三区精美影视 | 91亚洲国产精品| 国产麻豆综合| 黄色香蕉视频在线观看| 亚洲精品97久久| 国产999精品在线观看| 久久精品国产精品亚洲色婷婷| 中文字幕一区日韩精品欧美| 天堂v在线观看| 成人一区二区电影| 久久精品三级| 国产精品第108页| 日韩在线观看免费av| 天堂综合网久久|