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

GoFrame的數組比PHP的數組還好用!?

開發 后端
gf框架有個特點,提供的組件基本都支持設置并發安全開關。顯然PHP是不支持并發安全開關的,PHP的數組是并發安全的。PHP-FPM是阻塞的單線程模型,PHP-FPM每個進程里只有一個線程,一個進程同時只能服務一個客戶端。

前言

寫過PHP的同學都知道 PHP的數組Array非常好用,特別靈活。

我在寫PHP之前使用Java做安卓開發,在接觸PHP的數組Array之后,直呼太香了!

而在學習Go基礎知識的時候了解到Go的數組和PHP的數組并不一樣;從一定程度上講,Go的slice切片類型和PHP的數組array比較像(不固定長度、引用類型、動態擴容等),但是在開發使用中遠遠不像PHP的array靈活。

初識GoFrame

最近在使用基于Go語言的GoFrame框架擼項目,發現GoFrame封裝的garray竟然比PHP的array還要好用。

近期已經更新了一系列GoFrame的文章,下文將GoFrame簡稱為gf。感興趣的同學可以關注我的專欄:Go語言學習專欄 ,目前已經更新了120多篇原創文章,獲得了700多位同學的關注。

gf框架有個特點,提供的組件基本都支持設置并發安全開關。顯然PHP是不支持并發安全開關的,PHP的數組是并發安全的。PHP-FPM是阻塞的單線程模型,PHP-FPM每個進程里只有一個線程,一個進程同時只能服務一個客戶端。

garray特點簡介

  • garray支持int/string/interface{}三種常用的數據類型。
  • garray支持普通數組和排序數組,普通數組的結構體名稱定義為Array格式,排序數組的結構體名稱定義為SortedArray格式,如下:Array, intArray, StrArray,SortedArray, SortedIntArray, SortedStrArray
  • 其中排序數組SortedArray,需要給定排序比較方法,在工具包gutil中也定義了很多ComparatorXXX的比較方法,用起來很方便。當然也支持自定義排序方式。

基本使用

package main

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

func main() {
//創建并發安全的int型數組
a := garray.NewIntArray(true)
//添加數組項
for i := 0; i < 10; i++ {
a.Append(i)
}
// 打印結果:
fmt.Println(a) //"[0,1,2,3,4,5,6,7,8,9]"

fmt.Println("數組長度:", a.Len())
fmt.Println("數組的值:", a.Slice())
fmt.Println((a.Get(5))) //根據索引取值 返回值和是否取到了值 5 true

// 在指定索引前后插入值
_ = a.InsertAfter(9, 10)
_ = a.InsertBefore(0, -1)
fmt.Println(a.Slice())

// 搜索數據項,返回對應的索引
fmt.Println("搜索值,返回對應索引:", a.Search(5))

// 刪除
a.Remove(0)
fmt.Println(a.Slice())

// 并發安全 寫鎖操作
a.LockFunc(func(array []int) {
//將最后一項的值改為100
array[len(array)-1] = 100
})
fmt.Println(a) //"[0,1,2,3,4,5,6,7,8,9,100]"

// 并發安全 讀鎖操作
a.RLockFunc(func(array []int) {
fmt.Println(array[len(array)-1]) //100
})

// 清空數組
a.Clear()
fmt.Println("清空數組之后:", a.Slice())
}

打印結果

圖片

數組出棧

  • 數組出棧使用Pop*關鍵字
  • 數組可以按順序出棧,而gf提供的另外一個數據類型gmap的pop*方法是隨機出棧 (關注我,會在后續的文章中更新說明)
  • garray中隨機出棧,我們可以使用rand()或者popRand()
package main

import (
"fmt"
"github.com/gogf/gf/container/garray"
"github.com/gogf/gf/frame/g"
)

//數組出棧 pop 數組可以按順序出棧 map的pop是隨機出棧
func main() {
a := garray.NewFrom([]interface{}{1, 2, 3, 4, 5, 6})
fmt.Println(a.PopLeft())
fmt.Println(a.PopLefts(2))
fmt.Println(a.PopRight())
fmt.Println(a.PopRights(2))
fmt.Println(a) //全部出棧后 數組為空
/**
打印結果:
1 true
[2 3]
6 true
[4 5]
[]
*/

// 有什么辦法能像map一樣隨機出棧呢? 在garray中我們使用rand()或者popRand()
a1 := garray.NewFrom(g.Slice{1, 2, 3, 4, 5, 6, 7})
fmt.Println("----------")
fmt.Println(a1.Rand()) //隨機取值
fmt.Println(a1.PopRands(2)) //隨機出棧
fmt.Println(a1)

}

包含判斷

  • 注意:Contains()是區分大小寫
  • 空值過濾使用:FilterEmpty
  • nil過濾使用:FilterNil
package main

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

//包含 contains 區分大小寫
func main() {
var a garray.Array
a.Append("a")
g.Dump(a.Contains("a")) //true
g.Dump(a.Contains("A")) //false

// 空值過濾
a1 := garray.NewFrom([]interface{}{0, 1, "2", nil, false, g.Slice{}, "王中陽"})
a2 := garray.NewFrom([]interface{}{0, 1, "2", nil, false, g.Slice{}, "王中陽"})
g.Dump("empty過濾:", a1.FilterEmpty()) //empty過濾:"[1,2,"王中陽"]"
g.Dump("nil過濾:", a2.FilterNil()) //nil過濾:"[0,1,2,"false","[]","王中陽"]"

a3 := garray.NewFrom([]interface{}{1, 2, 3, 4, 5, 6, 7})

g.Dump("數組翻轉:", a3.Reverse())

g.Dump("數組隨機排序:", a3.Shuffle())
}

打印結果

圖片

排序數組

我們可以自定義NewSortedArray的排序規則,以實現是升序數組還是降序數組;

排序數組還有唯一性校驗的功能:garray.SetUnique(true)

gf框架的gutil工具包定義好了常用的排序規則

package main

import (
"github.com/gogf/gf/container/garray"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/util/gutil"
)

//我們可以自定義NewSortedArray的排序規則,以實現是升序數組還是降序數組;排序數組還有唯一性校驗的功能
func main() {
//自定義排序數組:降序排列
a := garray.NewSortedArray(func(a, b interface{}) int {
if a.(int) < b.(int) {
return 1
}
if a.(int) > b.(int) {
return -1
}
return 0
})
// 排序規格可以使用gutil中定義好的
a.Add(2) //數組的賦值用add map的賦值用set
a.Add(1)
a.Add(3)
g.Dump("a:", a) //打印結果:"[3,2,1]"

//升序數組
a2 := garray.NewSortedArray(gutil.ComparatorInt)
a2.Add(2)
a2.Add(1)
a2.Add(3)
g.Dump("a2:", a2)
// 添加重復元素
a2.Add(2)
g.Dump("a2添加重復元素后:", a2)
a2.SetUnique(true) //設置不允許重復元素
g.Dump("a2設置不允許重復元素之后:", a2)
}

打印結果

圖片

join、chunk、merge

  • 數據項串聯是相當常用的場景,比如多個id以逗號分隔入庫存儲,我們使用join關鍵字即可
  • garray支持將一個數組拆分成指定數量的二維數組,使用chunk關鍵字
  • garray支持使用merge關鍵字合并數組
package main

import (
"fmt"
"github.com/gogf/gf/container/garray"
"github.com/gogf/gf/frame/g"
)

func main() {
//join 串聯 常用于逗號分割
a := garray.NewFrom(g.Slice{1, 2, 3, 4, 5})
fmt.Println("串聯結果:", a.Join("_")) //1_2_3_4_5

//數組拆分 chunk
fmt.Println("數組拆分:", a.Chunk(2)) //[[1 2] [3 4] [5]]

// 數組合并 可以合并數組 也可以合并slice(原生切片和g.Slice都支持)
a1 := garray.NewFrom(g.Slice{1, 2})
a2 := garray.NewFrom(g.Slice{3, 4})
s1 := g.Slice{5, 6}
s2 := []string{"7", "8"}
s3 := []int{9, 0}
a1.Merge(a2)
a1.Merge(s1)
a1.Merge(s2)
a1.Merge(s3)
fmt.Println("合并結果:", a1) // [1,2,3,4,5,6,7,8,9,0]
}

打印結果:

圖片

遍歷

  • garray天然支持升序遍歷和降序遍歷
  • 函數Iterator()是IteratorAsc()的別名
package main

import (
"fmt"
"github.com/gogf/gf/container/garray"
"github.com/gogf/gf/frame/g"
)

//數組遍歷 iterate
func main() {
a := garray.NewFrom(g.Slice{"a", "b", "c"})
fmt.Println("升序遍歷結果")
a.Iterator(func(k int, v interface{}) bool {
fmt.Printf("%v,%v \n", k, v)
return true
})

// 數組倒序遍歷
fmt.Println("倒序遍歷結果:")
a.IteratorDesc(func(k int, v interface{}) bool {
fmt.Printf("%v,%v \n", k, v)
return true
})
}

打印結果

圖片

遍歷修改 walk函數

非常好用!!!

看到這個方法,更堅信了我一個觀點:GF的作者一定寫了幾年PHP。

package main

import (
"github.com/gogf/gf/container/garray"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/util/gconv"
)

//walk遍歷修改 修改數組的值
func main() {
var a garray.Array
tables := g.Slice{"user", "user_detail"}
a.Append(tables...)
prefix := "gf_"
a.Walk(func(value interface{}) interface{} {
return prefix + gconv.String(value)
})
g.Dump(a)
}

打印結果

圖片

序列化和反序列化

這里重點提一下:gf container容器包下的對象都實現對原生json包的支持,都支持序列化和反序列化。

gf非常重視對序列化的支持,Go學習專欄 文章中介紹了gmap、glist、gqueue、gset、gtree...等gf組件,都是支持序列化和反序列化的。

package main

import (
"encoding/json"
"fmt"
"github.com/gogf/gf/container/garray"
"github.com/gogf/gf/frame/g"
)

//gf container容器包下的對象都實現對原生json包的支持,即都支持序列化和反序列化
func main() {
//序列化
type student struct {
Name string
Age int
Scores *garray.IntArray
}
s := student{
Name: "王中陽",
Age: 28,
Scores: garray.NewIntArrayFrom([]int{100, 98}),
}

bytes, _ := json.Marshal(s)
g.Dump(bytes) //{"Name":"王中陽","Age":28,"Scores":[100,98]}

//反序列化
data := []byte(`{"Name":"王中陽","Age":28,"Scores":[100,98]}`)
s2 := student{}
_ = json.Unmarshal(data, &s2)
fmt.Println(s2) //{王中陽 28 [100,98]}
}

打印結果

圖片

總結

綜上我們了解到:

  • garray支持設置并發安全開關
  • 支持排序數組
  • 支持數組出棧、包含判斷、join、chunk、merge等常用的工具方法
  • 天然支持升序遍歷、遍歷修改
  • 天然支持序列化和反序列化
  • 大家是不是明顯感覺到GoFrame的garray比PHP的array還要好用。

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

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


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

2023-01-30 09:09:51

GoFramePHP數組

2022-07-07 08:59:37

requestsPython爬蟲框架

2021-07-31 07:11:01

WPSExcel軟件

2009-12-04 14:41:11

PHP數組變成JSON

2022-12-28 12:11:57

PHPGo框架

2021-01-07 05:12:27

Persepolis應用下載神器

2021-06-15 05:15:30

DeepL翻譯神器應用

2020-06-18 15:53:06

Python代碼摳圖

2021-09-22 23:17:09

Java開發數組

2011-07-12 17:06:43

PHP

2009-11-17 15:13:28

PHP數組

2009-11-26 09:06:35

PHP遞歸數組

2009-12-01 17:25:16

PHP $_FILES

2009-12-07 15:02:48

PHP搜索數組

2020-10-07 22:26:02

微信工具電腦

2010-01-05 17:59:46

PHP JSON數組對

2022-04-25 10:04:56

df命令Linux

2022-04-20 12:17:50

命令Batcat

2009-11-24 10:17:18

PHP函數range(

2009-11-24 18:37:55

PHP數組轉換
點贊
收藏

51CTO技術棧公眾號

久久久噜噜噜久噜久久综合| 欧美特黄a级高清免费大片a级| 欧美日韩国产中字| 欧美午夜视频在线| 888奇米影视| 狠久久av成人天堂| 亚洲精品自拍偷拍| 日本美女视频一区| 国产va在线视频| 中文字幕av在线一区二区三区| 亚洲一区二区免费在线| 午夜毛片在线观看| 91九色精品国产一区二区| 亚洲精品一区二区三区福利| 日韩欧美xxxx| 麻豆福利在线观看| 国产亚洲一区二区在线观看| 亚洲精品免费网站| 樱花视频在线免费观看| 欧美日韩影院| 自拍偷拍亚洲精品| 亚洲天堂成人av| 麻豆精品一区| 欧美日韩专区在线| 欧美牲交a欧美牲交| 国产在线高清视频| 欧美国产综合一区二区| 精品产品国产在线不卡| 精品国产av 无码一区二区三区| 免费视频久久| 91精品国产777在线观看| 三级在线观看免费大全| 欧美日韩激情在线一区二区三区| 亚洲精品不卡在线| 91热视频在线观看| 日韩综合久久| 欧美午夜电影一区| 久草精品在线播放| av在线最新| 亚洲日本在线视频观看| 亚洲高清在线播放| 国产精品ⅴa有声小说| 久久亚洲一区二区三区四区| 国产精品一区视频| 懂色av蜜臀av粉嫩av分享吧| 韩国v欧美v日本v亚洲v| 国产精品一区二区性色av| 东京热一区二区三区四区| 野花国产精品入口| 久久久久久国产精品三级玉女聊斋| 欧美日韩色视频| 久久综合成人| 精品国偷自产在线视频99| 日韩影视一区二区三区| 成人在线免费小视频| 日韩国产精品视频| 9.1成人看片免费版| 日韩欧美在线精品| 亚洲精品自拍第一页| 日本高清www| 免费看成人哺乳视频网站| 亚洲男人的天堂在线播放| 中文字幕xxx| 久久不见久久见免费视频7| 亚洲人成网7777777国产| 无码h肉动漫在线观看| 精品国产乱码久久久久久蜜坠欲下 | 欧美做受777cos| 日本高清在线观看视频| 亚洲电影在线免费观看| 青青艹视频在线| 五月天国产在线| 欧美中文一区二区三区| jizz欧美性11| 麻豆视频久久| 日韩精品中文字幕在线| 免费成人深夜天涯网站| 天天揉久久久久亚洲精品| 九九久久精品一区| 制服.丝袜.亚洲.中文.综合懂色| 视频一区中文字幕| 成人国产精品色哟哟| 亚洲黄色小说网址| 国产午夜精品久久久久久免费视 | 亚洲第一二三四五区| 久久久久9999| 日韩影院二区| 久久99热精品| 91porny九色| 国产美女视频91| 欧美精品一区在线发布| 欧美jizzhd69巨大| 精品成人乱色一区二区| 一区二区成人网| xxxx日韩| 中文字幕不卡av| 国产亚洲精品码| 日韩电影免费在线看| 成人91免费视频| 91高清在线| 偷窥国产亚洲免费视频| 孩娇小videos精品| 国产在线播放精品| www.日韩系列| 亚洲精品男人的天堂| 国产乱子伦视频一区二区三区| 欧美不卡1区2区3区| 在线午夜影院| 在线观看网站黄不卡| 国产一精品一aⅴ一免费| 成人高清av| 97在线视频免费播放| 91午夜交换视频| 久久久久久久久久久久久女国产乱 | 黄网页免费在线观看| 欧美日韩国产精品一区二区三区四区 | 91se在线| 亚洲va韩国va欧美va精品| 黄色手机在线视频| 要久久爱电视剧全集完整观看| 欧美美女18p| 亚洲天天综合网| 久久久久久亚洲综合| www成人免费| 国产精品白丝久久av网站| 国产一区二区三区视频| 国产成人免费看| 成人中文字幕合集| 久久www视频| 精品一区二区三区中文字幕在线| 一区二区三区视频观看| 99精品在线播放| av综合在线播放| 国产情侣第一页| 视频二区欧美| 久久躁狠狠躁夜夜爽| 国产精品天天操| 国产精品嫩草影院av蜜臀| 成熟老妇女视频| 婷婷成人在线| 777午夜精品福利在线观看| 神马久久久久久久久久| 亚洲最新在线观看| 18深夜在线观看免费视频| 欧美gay男男猛男无套| 国产女精品视频网站免费| 国产中文在线观看| 色婷婷综合久久久| 免费一级黄色录像| 麻豆精品国产91久久久久久| 先锋影音网一区| 欧美在线se| 久久久精品视频成人| 国产精品久久久久久免费播放| 国产精品国产a| xxww在线观看| 中国成人一区| 国产不卡一区二区三区在线观看| 欧美另类tv| 亚洲国产欧美久久| 91丝袜一区二区三区| 国产欧美视频一区二区| 亚洲精品手机在线观看| 中文字幕一区二区三三| 91亚色免费| 亚洲私拍视频| 中文字幕日韩欧美在线 | 欧美电影免费观看网站| 亚洲天堂av在线免费| 亚洲网站免费观看| 亚洲综合久久久久| 少妇精品一区二区三区| 青娱乐精品视频| 日本成人在线不卡| 久久a爱视频| 国产精品久久77777| 国产视频一区二区| 亚洲黄页视频免费观看| 少妇一级淫片日本| 亚洲你懂的在线视频| 国产精品九九视频| 日本一区中文字幕| 国产91沈先生在线播放| 九九久久电影| 亚洲a在线观看| 中文字幕成在线观看| 精品国产拍在线观看| 人妻无码中文字幕| 欧美三片在线视频观看| 麻豆国产尤物av尤物在线观看| 久久综合九色综合久久久精品综合| 国产一级做a爰片久久| 国产在线欧美| 亚洲图片小说在线| 精品视频高潮| 91亚洲精品在线观看| 伊人久久av| 欧美成人精品一区二区三区| 每日更新av在线播放| 精品噜噜噜噜久久久久久久久试看| 国产欧美一区二区三区在线看蜜臂| 国产精品毛片a∨一区二区三区| 国产一级免费片| 久草精品在线观看| www日韩在线观看| 亚洲视频福利| eeuss中文| 欧美伦理影院| 免费日韩av电影| 香蕉免费一区二区三区在线观看 | 国产精品水嫩水嫩| 精品熟女一区二区三区| 国产在线一区观看| 亚洲高清在线免费观看| 亚洲人成毛片在线播放女女| 中文字幕av久久| 成人女性视频| 欧美成人在线免费观看| 成人爽a毛片免费啪啪红桃视频| 成人日韩av在线| 91精品美女| 国产91精品在线播放| 两个人看的在线视频www| 欧美成人精品激情在线观看| 毛片激情在线观看| 在线观看精品国产视频| 日韩av免费观影| 日韩av在线影院| 少妇高潮一区二区三区99小说| 日韩午夜精品视频| 国产伦精品一区二区三区视频痴汉 | 欧美激情乱人伦一区| 国产最新在线| 超在线视频97| caoporn免费在线| 不卡中文字幕av| 含羞草www国产在线视频| 日韩在线精品一区| 日本中文字幕在线播放| yellow中文字幕久久| 无遮挡的视频在线观看| 中文字幕不卡在线视频极品| 成人亚洲性情网站www在线观看| 国产视频精品久久久| 飘雪影视在线观看免费观看| 亚洲精品美女在线观看播放| 少妇无码一区二区三区| 日韩av在线网站| 秋霞av在线| 亚洲天堂网在线观看| 成人av一区| 日韩中文字幕视频在线观看| 五月婷婷在线视频| 欧美成aaa人片在线观看蜜臀| av在线free| 欧美国产精品va在线观看| 成人影院在线播放| 91高清在线免费观看| 欧美成人精品一区二区男人小说| 国产精品7m视频| www久久久| 成人激情视频在线| 99久热这里只有精品视频免费观看| 国产精品国产一区二区| 人体久久天天| 亚欧精品在线| 亚洲精品中文字幕乱码| 毛片在线视频观看| 校园激情久久| www.精品在线| 国产成人综合亚洲网站| 亚洲中文字幕一区| 国产欧美日韩久久| 99精品久久久久| 五月天欧美精品| 成人黄色三级视频| 欧美一区二区精品| 天堂中文在线视频| 北条麻妃久久精品| 暧暧视频在线免费观看| 国产精品99久久久久久www| 欧美高清免费| 国产综合18久久久久久| 久久亚洲在线| av免费看网址| 美腿丝袜亚洲色图| 天天躁日日躁狠狠躁免费麻豆| 国产偷v国产偷v亚洲高清| 免费在线一区二区三区| 色噜噜狠狠成人中文综合| 国产成人a人亚洲精品无码| 日韩成人av在线| 黄色网在线看| 热久久免费国产视频| 99精品女人在线观看免费视频| 精品一区二区三区视频日产| 欧美独立站高清久久| 欧美成人高潮一二区在线看| 久久狠狠亚洲综合| 国产精品无码午夜福利| 一区二区三区波多野结衣在线观看| 欧美日韩一级黄色片| 欧美电影免费提供在线观看| 搞黄视频免费在线观看| 亚州国产精品久久久| 国产成年精品| 日韩久久不卡| 在线视频日韩| 精品无码人妻少妇久久久久久| 国产精品久久福利| 色一情一乱一伦| 亚洲白虎美女被爆操| 激情视频在线观看| 国产精品视频xxx| 米奇777超碰欧美日韩亚洲| 日韩一区二区高清视频| 韩国三级中文字幕hd久久精品| 国产小视频自拍| 疯狂蹂躏欧美一区二区精品| 亚洲成人中文字幕在线| 久久精品99久久久香蕉| 天堂久久午夜av| 久久综合九色综合网站| 最新亚洲视频| 亚洲一区二区三区黄色| 依依成人精品视频| 精品国产乱码久久久久久蜜臀网站| 正在播放欧美视频| 国精产品一区二区三区有限公司 | 欧美日韩另类字幕中文| 亚洲免费不卡视频| 欧美成人亚洲成人日韩成人| 亚洲网站三级| 国产精品美女在线播放| 麻豆精品视频在线观看免费| 国产激情av在线| 日本高清不卡一区| 国产综合在线观看| 国产成人拍精品视频午夜网站| 日韩理论电影中文字幕| 青青草原成人网| 2023国产精品| 波多野结衣一区二区三区四区| 亚洲精品一区二区三区婷婷月| 三级中文字幕在线观看| 欧美国产一区二区在线| 天堂一区二区在线免费观看| 亚洲一级中文字幕| 欧美亚洲综合一区| 中文字幕在线观看日本| 成人免费网站在线观看| 一区二区三区四区日韩| 深爱五月综合网| 亚洲一区二区三区四区在线| 国产 日韩 欧美 精品| 91精品国产91久久久久久不卡| 日韩丝袜视频| 亚洲视频在线a| 国产精品久久毛片av大全日韩| 91精品国自产| 久久成人精品视频| 久久午夜影院| 日日摸天天爽天天爽视频| 中文字幕日韩一区| 亚洲精品第五页| 欧美一级高清免费| 久久理论电影| 亚洲美女精品视频| 欧美视频一区二区三区…| 992tv免费直播在线观看| 91在线|亚洲| 99av国产精品欲麻豆| 亚洲最大成人综合网| 日韩写真欧美这视频| 日韩在线伦理| 操bbb操bbb| 久久一留热品黄| 国产超碰人人模人人爽人人添| 国产91精品青草社区| 四虎国产精品免费观看| 亚洲啪av永久无码精品放毛片 | 久久婷婷中文字幕| 亚州成人在线电影| 成年人视频免费在线观看| 91超碰在线免费观看| 午夜一区不卡| 五月天丁香激情| 亚洲香蕉伊综合在人在线视看| 国产精品久久久久久久久久辛辛| www.浪潮av.com| 一区在线播放视频| 四虎精品在永久在线观看| 成人午夜黄色影院| 久久不射中文字幕| 久久久精品人妻一区二区三区四| 亚洲天堂网在线观看| 精品五月天堂| 污污视频在线免费| 欧美视频在线一区二区三区 | 美女黄视频在线观看|