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

Golang和Rust語言常見功能/庫

開發(fā) 后端
本文我們介紹了Golang和Rust中常用的功能包括命令行參數(shù)解析、錯誤處理、日志、Json處理和Web庫

時下最流行、最具發(fā)展前途的的兩門語言是Golang和Rust。Golang語言簡潔、高效、并發(fā)、并且有個強大的囊括了常見功能標準庫。與之相對比,Rust語言則主要是安全、高性能。雖然Rust沒有g(shù)olang那種"內(nèi)置電池(Batteries included)"的標準庫,但是Rust的第三方庫(crate,板條箱)極大補充了Rust精煉基本庫的功能。本文我們就介紹一下Golang和Rust常用的庫功能。

Golang和Rust語言常見功能/庫

參數(shù)處理

Golang標準庫中提供了功能。flag庫是非常基礎的功能,在實踐上也非常有用,在做命令行交互程序時候必不可少。

  1. package main 
  2. import "flag" 
  3. var ( 
  4. program = flag.String("p", "", "h program to compile/run") 
  5. outFname = flag.String("o", "", "if specified, write the webassembly binary created by -p here") 
  6. watFname = flag.String("o-wat", "", "if specified, write the uncompiled webassembly created by -p here") 
  7. port = flag.String("port", "", "HTTP port to listen on") 
  8. writeTao = flag.Bool("koan", false, "if true, print the h koan and then exit") 
  9. writeVersion = flag.Bool("v", false, "if true, print the version of h and then exit") 

上述代碼會生成一些程序包全局變量,其中將包含命令行參數(shù)的值。

在Rust中,常用的命令行解析包是structopt。但是,其工作方式與Golang flag程序包有所不同。structopt會選項加載到結(jié)構(gòu)中,而非全局可變變量。主要因為Rust語言編程實踐中,基本上都會避免全局可變的變量。在大多數(shù)情況下,帶有包的全局變量flag是可以的,但前提是必須在程序真正開始執(zhí)行其需要做的工作之前將它們寫入到程序中。

一個簡單示例源自于pahi庫源碼:

  1. #[derive(Debug, StructOpt)] 
  2. #[structopt( 
  3. name = "pa'i"
  4. about = "A WebAssembly runtime in Rust meeting the Olin ABI." 
  5. )] 
  6. struct Opt { 
  7. #[structopt(short, long, default_value = "cranelift")] 
  8. backend: String, 
  9. #[structopt(short, long)] 
  10. function_log: bool, 
  11. #[structopt(short, long)] 
  12. no_cache: bool, 
  13. #[structopt()] 
  14. fname: String, 
  15. #[structopt(short, long, default_value = "_start")] 
  16. entrypoint: String, 
  17. #[structopt()] 
  18. args: Vec<String>

Rust編譯器會生成所需的參數(shù)解析代碼,然后可以使用:

  1. fn main() { 
  2. let opt = Opt::from_args(); 
  3. debug!("args: {:?}", opt.args); 
  4. if opt.backend != "cranelift" { 
  5.         return Err(format!( 
  6.             "wanted backend to be cranelift, got: {}", 
  7.             opt.backend 
  8.         )); 

錯誤處理

Golang的標準庫具有error接口,可以創(chuàng)建一個描述類型的函數(shù),函數(shù)描述為什么功能無法按預期執(zhí)行,Golang程序必須先做好錯誤處理。比如:

  1. func Write(w io.Writer, buf []byte) error { 
  2. _, err :w.Write(buf) 
  3. if err != nil { 
  4. log.Println("unable to write:", err) 
  5. return err 
  6. return nil 

Rust也具有Error 特性,它使還可以創(chuàng)建一個描述函數(shù)為何無法實現(xiàn)其預期功能的類型。這兒我們介紹更加易用的thiserror板條箱構(gòu)建自定義錯誤類型:

  1. [dependencies] 
  2. thiserror = "1" 

然后,在程序中使用:

  1. use std::fmt; 
  2. use thiserror::Error; 
  3. #[derive(Debug, Error)] 
  4. struct Divide0​; 
  5. impl fmt::Display for Divide0​ { 
  6. fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 
  7. write!(f, "不能被零整除!") 

日志記錄

Go標準庫中也自帶了log庫。該庫是一個非常有爭議的記錄器,它的日志記錄缺乏日志記錄級別和上下文感知值之類的功能。

  1. package main 
  2. import ( 
  3. "log" 
  4. func init() { 
  5. log.SetPrefix("TRACE: ") 
  6. log.SetFlags(log.Ldate | log.Lmicroseconds | log.Llongfile) 
  1. func main() { 
  2. log.Println("message") 
  3. log.Fatalln("fatal message") 
  4. log.Panicln("panic message") 
  1. ------------------------------- 
  2. TRACE: 2020/09/09 14:24:32.868375 TestLog.go:15: message 
  3. TRACE: 2020/09/09 14:24:32.962329 TestLog.go:18: fatal message 
  4. Process finished with exit code 1 

在Rust中,有一個板條箱,這是一個非常簡單的包,它使用error!,warn!,info!,debug!和trace!宏分別關(guān)聯(lián)到最高和最低日志打印水平。同樣要使用log板條箱,先要增加的項目中,即添加到Cargo.toml的依賴部分。

  1. [dependencies] 
  2. log = "0.4" 

然后,就可以使用了:

  1. use log::{error, warn, info, debug, trace}; 
  2. fn main() { 
  3. trace!("starting main"); 
  4. debug!("debug message"); 
  5. info!("this is some information"); 
  6. warn!("oh no something bad is about to happen"); 
  7. error!("oh no it's an error"); 

注意,默認該庫日志記錄是不會記錄到本地文件中的。要記錄日志還需要其他庫。

pretty_env_logger是和log買一送一,最常搭配使用的板條箱。同樣,先添加項目依賴:

  1. [dependencies] 
  2. log = "0.4" 
  3. pretty_env_logger = "0.4" 

然后,在代碼中使用:

  1. use log::{error, warn, info, debug, trace}; 
  2. fn main() { 
  3. pretty_env_logger::init(); 
  4. trace!("這是一個示例程序。"); 
  5. debug!("調(diào)試信息xxx。"); 
  6. info!("程序正在運行中。"); 
  7. warn!("[WARN]程序有些參數(shù)配置有問題。"); 
  8. error!("[ERROR]程序發(fā)生嚴重錯誤!"); 

然后在啟動時候增加,日志級別參數(shù)RUST_LOG=trace 運行:

  1. env RUST_LOG=trace cargo run 
  2.   
  3. Compiling errex v0.1.0 (/home/lz/test/rust/commoncrate/errex) 
  4.     Finished dev [unoptimized + debuginfo] target(s) in 1.32s 
  5.      Running `target/debug/errex` 
  6.  TRACE errex > 這是一個示例程序。 
  7.  DEBUG errex > 調(diào)試信息xxx。 
  8.  INFO  errex > 程序正在運行中。 
  9.  WARN  errex > [WARN]程序有些參數(shù)配置有問題。 
  10.  ERROR errex > [ERROR]程序發(fā)生嚴重錯誤! 
Golang和Rust語言常見功能/庫

序列化/反序列化

Golang在標準庫內(nèi)置了 包用來實現(xiàn)JSON編碼/解碼功能。我們可以定義可以輕松讀取和寫入JSON的類型。下面一個例子:

  1. "id": 3137, 
  2. "author": { 
  3. "id": 420, 
  4. "name": "Chongchong" 
  5. }, 
  6. "body": "Hello,This is Chongchong web!", 
  7. "in_reply_to": 3135 

在Golang中,可以生成如下的結(jié)構(gòu)體:

  1. type Author struct { 
  2. ID int `json:"id"` 
  3. Name string `json:"name"` 
  1. type Comment struct { 
  2. ID int `json:"id"` 
  3. Author Author `json:"author"` 
  4. Body string `json:"body"` 
  5. InReplyTo int `json:"in_reply_to"` 

Rust沒有開箱即用的功能,需要使用第三方板條箱,最常用的一個庫是serde,可以跨JSON和能想到的所有其他序列化方法使用。

  1. [dependencies] 
  2. serde = { version = "1"features = ["derive"] } 
  3. serde_json = "1" 

注意,上面serde的依賴配置,和其他包有差異。

Golang的JSON包通過使用struct標簽作為元數(shù)據(jù)來工作,但是Rust沒有,需要改用Rust的衍生功能。

因此,要將serde用于的注釋類型:

  1. use serde::{Deserialize, Serialize}; 
  2. #[derive(Clone, Debug, Deserialize, Serialize)] 
  3. pub struct Author { 
  4. pub id: i32, 
  5. pub name: String, 
  6. #[derive(Clone, Debug, Deserialize, Serialize)] 
  7. pub struct Comment { 
  8. pub id: i32, 
  9. pub author: Author, 
  10. pub body: String, 
  11. pub in_reply_to: i32, 

然后,使用以下代碼解析Json:

  1. fn main() { 
  2. let data = r#" 
  3. "id": 3137, 
  4. "author": { 
  5. "id": 420, 
  6. "name": "Chongchong" 
  7. }, 
  8. "body": "Hello,This is Chongchong web!", 
  9. "in_reply_to": 3135 
  10. "#; 
  11. let c: Comment = serde_json::from_str(data).expect("json to parse"); 
  12. println!("comment: {:#?}", c); 

cargo run

  1. ... 
  2. Finished dev [unoptimized + debuginfo] target(s) in 0.04s 
  3.      Running `target/debug/serdeex` 
  4. comment: Comment { 
  5.     id: 3137, 
  6.     author: Author { 
  7.         id: 420, 
  8.         name: "Chongchong", 
  9.     }, 
  10.     body: "Hello,This is Chongchong web!", 
  11.     in_reply_to: 3135, 
Golang和Rust語言常見功能/庫

Web開發(fā)

在Web開發(fā)中HTTP包必不可少的。Golang中可使用net/http充當生產(chǎn)級HTTP客戶端和服務器。

  1. import ( 
  2. "net/http" 
  3. "fmt" 
  4. "log" 
  5.  
  6. func sayhelloGolang(w http.ResponseWriter, r *http.Request) { 
  7. r.ParseForm() 
  8. fmt.Println("path", r.URL.Path) 
  9. w.Write([]byte("Hello Chongchong!")) 
  10.  
  11. func main() { 
  12. http.HandleFunc("/",hello) 
  13. err :http.ListenAndServe(":8080", nil) 
  14. if err != nil { 
  15. log.Fatal("ListenAndServe: ", err) 

它可以讓我們非常輕松地進行Web開發(fā)。Rust標準庫沒有開箱即用的HTTP功能,但是Web的框架也非常豐富。

客戶端

對于HTTP客戶端,可以使用。它還可以與serde無縫集成,以允許從HTTP解析JSON:

  1. [dependencies] 
  2. reqwest = { version = "0.10"features = ["json"] } 
  3. tokio = { version = "0.2"features = ["full"] } 

tokio默認情況下Rust不附帶異步運行時,tokio大約等同于Golang運行時幫助處理的大多數(shù)重要事項。簡單實例如下:

Golang和Rust語言常見功能/庫

運行此命令:

  1. cargo run  
  2. ... 
  3. Finished dev [unoptimized + debuginfo] target(s) in 3.31s 
  4.      Running `target/debug/webcer` 
  5. Status: 200 OK 
  6. Body: 
  7. <!doctype html> 
  8. <html> 
  9.   <head> 
  10.     <meta charset="utf-8"> 
  11. <meta http-equiv="X-UA-Compatible" content="chrome=1"> 
  12. <title>hyper.rs | hyper</title> 
  13. <meta name="description" content=""> 
Golang和Rust語言常見功能/庫

結(jié)合其他功能,reqwest可以做作為一個功能強大的HTTP客戶端。

服務器端

至于HTTP服務器,可以使用warp板條箱。warp是一個建立在Rust的類型系統(tǒng)之上的HTTP服務器框架。

  1. [dependencies] 
  2. tokio = { version = "0.2"features = ["macros"] } 
  3. warp = "0.2" 

讓我們寫個簡單的"Hello,Chongchong"示例:

  1. use warp::Filter; 
  2. #[tokio::main] 
  3. async fn main() { 
  4. // GET /hello/Chongchong=> 200 OK with body "Hello, Chongchong!" 
  5. let hello = warp::path!("hello" / String) 
  6. .map(|name| format!("Hello, {}!", name)); 
  7. warp::serve(hello) 
  8. .run(([127, 0, 0, 1], 3030)) 
  9. .await; 

然后通過127.0.0.1:3030/hello/Chongchong,就可以提示Hello, Chongchong!。

對 warp應用可以使用其or模式構(gòu)建多條Web路由:

  1. let hello = warp::path!("hello" / String) 
  2. .map(|name| format!("Hello, {}!", name)); 
  3. let health = warp::path!(".within" / "health") 
  4. .map(|| "OK"); 
  5. let routes = hello.or(health); 

還可通過過濾器將其他數(shù)據(jù)類型注入到處理程序中:

  1. let fact = { 
  2. let facts = pfacts::make(); 
  3. warp::any().map(move || facts.clone()) 
  4. }; 
  5. let fact_handler = warp::get() 
  6. .and(warp::path("fact")) 
  7. .and(fact.clone()) 
  8. .and_then(give_fact); 

warp是功能強大的HTTP服務器,可以跨生產(chǎn)級Web應用程序所需的所有內(nèi)容工作。

模版

Web開發(fā)中要常用模版來特定化頁面的輸出。Golang的標準庫還包括HTML和純文本模板包html/template和text/template。在Rust中有很多用于HTML模板化的解決方案,比如ructe板條箱。ructe使用Cargo的build.rs功能在編譯時為其模板生成Rust代碼。這樣就可以將HTML模板編譯成結(jié)果應用程序二進制文件,從而以驚人的速度呈現(xiàn)它們。

添加Cargo.toml:

  1. [build-dependencies] 
  2. ructe = { version = "0.12"features = ["warp02"] } 
  3. 還依賴mime板條箱: 
  1. [dependencies] 
  2. mime = "0.3.0" 

完成此操作后,templates在當前工作目錄中創(chuàng)建一個新文件夾。創(chuàng)建一個名為的文件hello.rs.html,并將以下內(nèi)容放入其中:

  1. @(title: String, message: String) 
  2. <html> 
  3. <head> 
  4. <title>@title</title> 
  5. </head> 
  6. <body> 
  7. <h1>@title</h1> 
  8. <p>@message</p> 
  9. </body> 
  10. </html> 

然后使用模板templates.rs:

  1. use warp::{http::Response, Filter, Rejection, Reply}; 
  2. async fn hello_html(message: String) -> Result<impl Reply, Rejection> { 
  3. Response::builder() 
  4. .html(|o| templates::index_html(o, "Hello".to_string(), message).unwrap().clone())) 

在src/main.rs底部,通過以下語句引入模版定義:

  1. include!(concat!(env!("OUT_DIR"), "/templates.rs")); 

在main()函數(shù)中調(diào)用:

  1. let hello_html_rt = warp::path!("hello" / "html" / String) 
  2. .and_then(hello_html); 
  3. let routes = hello_html_rt.or(health).or(hello); 

總結(jié)

本文我們介紹了Golang和Rust中常用的功能包括命令行參數(shù)解析、錯誤處理、日志、Json處理和Web庫,我們可以發(fā)現(xiàn)基本上這些功能都在Golang標準庫中都提供了,而Rust則要引入額外的板條箱,但是借助強大的Cargo包管理工具,其使用也非常便捷。

 

責任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2020-10-21 14:54:02

RustGolang開發(fā)

2020-07-15 08:00:52

Rust語言技巧

2022-06-22 10:04:29

JavaScriptRust語言

2024-06-19 10:31:48

2021-12-27 03:36:09

語言For Golang

2021-11-14 23:05:28

GoCast語言

2017-12-04 14:13:24

物聯(lián)網(wǎng)ITOT

2021-05-07 15:28:03

Kafka客戶端Sarama

2023-11-30 11:39:52

Rust生態(tài)框架

2021-01-29 08:56:13

Golang標準庫函數(shù)

2022-05-17 12:23:25

排序算法面試

2015-11-25 10:43:03

DGORust

2023-10-26 12:01:30

Golang字符串

2023-02-22 16:47:09

編程語言RustGolang

2022-03-25 11:01:28

Golang裝飾模式Go 語言

2020-07-07 07:00:00

RustGo語言編程語言

2021-03-23 14:50:16

編程語言Rust漏洞

2021-09-13 05:02:49

GogRPC語言

2022-02-07 23:07:19

Golang語言Modules

2021-06-09 23:36:46

Golang語言版本
點贊
收藏

51CTO技術(shù)棧公眾號

色综合一区二区日本韩国亚洲 | aaa在线观看| 日韩黄色小视频| 成年无码av片在线| 亚洲成人福利视频| 美女扒开腿让男人桶爽久久软| 久久久久久久久蜜桃| 国产自产女人91一区在线观看| 国产盗摄一区二区三区在线| 亚洲日本va| 日韩欧美在线字幕| 色一情一乱一乱一区91| 青青国产在线| 国产精品影视网| 日韩美女视频免费在线观看| 欧美成人aaa片一区国产精品| 首页亚洲中字| 日韩一本二本av| 国产视频一区二区三区在线播放| 成人午夜在线影视| 久久综合九色综合97婷婷女人| 国产日韩专区在线| 在线能看的av| 黄色成人在线网址| 亚洲一级黄色片| 国产又粗又长又爽| 视频欧美一区| 欧美电影一区二区三区| 男人靠女人免费视频网站| 成人video亚洲精品| 久久精品网站免费观看| 国产一区二区三区无遮挡 | 激情av在线| 中文字幕一区二区在线播放| 欧美日韩精品久久久免费观看| 亚洲免费成人网| 九九视频精品免费| 国产精品久久久久久久av电影| 国产成人精品一区二三区| 欧美日韩四区| 欧美大胆a视频| 波多野结衣喷潮| 欧美日韩国产高清电影| 亚洲免费福利视频| 亚洲精品中文字幕在线播放| 中文字幕视频精品一区二区三区| 4438x成人网最大色成网站| 88av.com| 99久久er| 欧美日韩一区成人| 天堂网在线免费观看| 国产精品扒开腿做爽爽爽视频软件| 黄色精品一区二区| 你懂的av在线| 国产色播av在线| 欧美日韩国产页| 日韩中文字幕在线视频观看 | 亚洲午夜久久久| 欧美一级特黄aaaaaa在线看片| 毛片网站在线免费观看| 国产欧美综合在线观看第十页| 日韩精品国内| 在线免费观看黄色| 国产精品久久久久久久浪潮网站| 亚洲国产精品久久久久婷婷老年| 成年人在线观看网站| 久久久久久久久蜜桃| 亚洲不卡一卡2卡三卡4卡5卡精品| 日本福利片高清在线观看| 91麻豆国产香蕉久久精品| 麻豆av一区二区三区| 国产在线91| 中文字幕欧美区| 中文字幕一区二区三区在线乱码| 麻豆网站在线| 亚洲在线观看免费| 国产视频九色蝌蚪| 91精品韩国| 717成人午夜免费福利电影| 91丝袜超薄交口足| www.亚洲一二| 亚洲欧洲在线播放| 欧美a级片免费看| 午夜日韩在线| 欧亚精品中文字幕| 亚洲影院一区二区三区| 国产成人精品www牛牛影视| 精品高清视频| 永久免费av片在线观看全网站| 亚洲欧洲综合另类| 欧美 日韩 亚洲 一区| 超薄肉色丝袜脚交一区二区| 日韩一区国产二区欧美三区| 最近日本中文字幕| 久久国产中文字幕| 久久久久亚洲精品| 亚洲成人av网址| 床上的激情91.| 日韩精品欧美一区二区三区| 成人无遮挡免费网站视频在线观看| 午夜精品一区二区三区免费视频| 妓院一钑片免看黄大片| 欧美h版在线观看| 亚洲欧美国产精品专区久久| 欧美激情图片小说| 久久久久一区| 国产福利久久精品| 中国日本在线视频中文字幕| 午夜伦欧美伦电影理论片| 911福利视频| 欧美aaaaaaaa牛牛影院| 久久夜精品香蕉| 国产精品免费精品一区| 福利一区福利二区| 亚洲午夜精品久久久久久浪潮| 操人在线观看| 日韩一区二区在线看| 国产又粗又猛又爽又黄av| 欧美福利影院| 国产噜噜噜噜噜久久久久久久久| 亚洲欧美日韩动漫| 亚洲男人的天堂av| 浓精h攵女乱爱av| 天堂俺去俺来也www久久婷婷| 欧美刺激性大交免费视频| 中文字幕日韩经典| 久久亚区不卡日本| 浮妇高潮喷白浆视频| 成人影院中文字幕| 欧美片一区二区三区| 在线免费a视频| 国产视频一区在线观看| 久久网站免费视频| 奇米影视777在线欧美电影观看| 日韩在线观看免费av| www.久久精品视频| 91网站黄www| 青青青国产在线观看| 99国产精品免费网站| 色综合久综合久久综合久鬼88| 中文字幕乱码人妻无码久久| 久久久久久久久伊人| 黄色a级片免费| 日韩av中文字幕一区| 久久久久女教师免费一区| 国产特黄一级片| 亚洲美女淫视频| 尤物网站在线看| 欧美在线国产| 99久久无色码| wwww亚洲| 亚洲精品国产欧美| 成人精品在线看| 久久久久久久国产精品影院| 国产男女激情视频| 精品国产一区二区三区噜噜噜 | 亚洲精品一区av| 精品国产自在精品国产浪潮 | 亚洲精品美女久久久久| 日本一二三区不卡| 91在线视频免费91| 99久久国产宗和精品1上映| 精品国产91乱码一区二区三区四区| 日本久久亚洲电影| 成人免费黄色网页| 欧美日本在线观看| 欧美成人免费看| www.欧美色图| 国产麻花豆剧传媒精品mv在线| av在线不卡免费观看| 91九色在线视频| 暖暖在线中文免费日本| 亚洲激情视频网| 无码任你躁久久久久久久| 中文字幕第一区| 在线成人免费av| 国产一区二区三区成人欧美日韩在线观看 | 蜜桃免费在线| 色视频成人在线观看免| 日本视频在线免费| 国产成人在线观看免费网站| 韩日视频在线观看| 国产在线日韩精品| 国产精品久久久av| 视频在线观看入口黄最新永久免费国产 | 久久狠狠高潮亚洲精品| av一二三不卡影片| 国产超碰在线播放| 欧美国产高清| 欧美一级片免费观看| 国产精品一级在线观看| 久久久免费观看视频| 北岛玲一区二区三区| 欧美成人a视频| 波多野结衣电影在线播放| 亚洲精品国产第一综合99久久| 中文字幕精品视频在线| 麻豆精品国产传媒mv男同| 国产成人一区二区三区别| 蜜臀av免费一区二区三区| 亚洲伊人久久综合| 黑人巨大亚洲一区二区久| 久久综合伊人77777蜜臀| 欧美视频免费一区二区三区| 欧美一区二区三区色| 波多野结衣电影在线播放| 亚洲五码中文字幕| 小嫩苞一区二区三区| 久久综合色之久久综合| 精产国品一区二区三区| 日本中文一区二区三区| 免费毛片网站在线观看| 99tv成人| 日韩精品另类天天更新| 日韩超碰人人爽人人做人人添| 91久热免费在线视频| 日本欧美日韩| 2019精品视频| 欧美一卡二卡| 久久在精品线影院精品国产| 国产最新视频在线观看| 日韩成人在线播放| 亚洲精品一区二区三区区别| 成人av福利| 欧美精品视频www在线观看| 久久久久久91亚洲精品中文字幕| 亚洲黄一区二区三区| 一本在线免费视频| 国产亚洲va综合人人澡精品| 人妻体内射精一区二区三区| 国产乱子伦一区二区三区国色天香| 国产又大又黄又粗的视频| 夜夜嗨一区二区| 欧美国产日韩激情| 91久久午夜| 免费网站在线观看视频| 综合天天久久| 伊人网在线免费| 一区二区中文字| 女同性恋一区二区| 亚洲综合色网| 午夜啪啪福利视频| 一区二区三区四区电影| 91制片厂免费观看| 91高清一区| 佐佐木明希av| 国产xxxxxx| 国产精品久久久久永久免费观看 | 韩国精品福利一区二区三区| 2022国产精品| 日韩在线成人| 超碰97国产在线| 国产精品网址| 麻豆一区区三区四区产品精品蜜桃| 精品综合久久88少妇激情| 国产日韩欧美一区二区三区四区| 激情小说一区| 久久久久久国产精品免费免费| 蜜桃精品wwwmitaows| 日韩精品国内| 久久久久久久久久久久久久久久久久 | 91精品亚洲一区在线观看| www.久久色.com| av在线免费观看网址| 九九综合九九综合| 91在线三级| 欧美专区第一页| 91九色综合| 91色视频在线导航| jazzjazz国产精品久久| 久久伦理网站| 人人狠狠综合久久亚洲婷| 99re99热| 亚洲大片在线| 蜜臀视频一区二区三区| 久久国产三级精品| 欧美丰满熟妇bbb久久久| 97久久精品人人做人人爽50路| 国产偷人妻精品一区| 亚洲国产精品t66y| 妺妺窝人体色www聚色窝仙踪| 天天亚洲美女在线视频| 免费视频网站在线观看入口| 6080午夜不卡| 秋霞网一区二区| 一本大道久久加勒比香蕉| 成人在线影视| 欧美一级大胆视频| 国产精品99久久免费| 黑人巨大精品欧美一区二区小视频 | 欧美日韩国产色综合一二三四| 日韩一二区视频| 噜噜噜躁狠狠躁狠狠精品视频| 婷婷中文字幕在线观看| 9i在线看片成人免费| 亚洲欧美精品久久| 婷婷综合五月天| 一级片一区二区三区| 日韩av一区在线| 视频三区在线| 久久久视频在线| 97久久香蕉国产线看观看| 国产精品久久波多野结衣| 色喇叭免费久久综合网| 91好吊色国产欧美日韩在线| 国产一区二区三区黄视频| 日韩精品无码一区二区三区久久久| 亚洲精品视频在线看| 无码人妻精品一区二区三区9厂| 精品国产露脸精彩对白 | 久久激情av| 国产免费xxx| 水蜜桃久久夜色精品一区的特点| 黑人无套内谢中国美女| 国产精品久久久久一区二区三区共| 国产大片aaa| 日韩一区二区三区四区| 啊v在线视频| 日本国产一区二区三区| 国产精品极品国产中出| 国产av第一区| 美女免费视频一区| 欧美人与性囗牲恔配| 粉嫩老牛aⅴ一区二区三区| 丰满人妻一区二区三区无码av| 色偷偷888欧美精品久久久| 日本电影欧美片| 精品卡一卡二| 亚洲国产一区二区三区a毛片| 红桃视频一区二区三区免费| 日本一区二区三区四区| 中文人妻av久久人妻18| 日韩禁在线播放| 美女搞黄视频在线观看| 国产精品免费一区二区三区| 欧美特黄视频| 美女又黄又免费的视频| 亚洲精品午夜久久久| av中文字幕免费在线观看| 日韩性生活视频| 国产精品无码久久久久| 相泽南亚洲一区二区在线播放| 日韩精品欧美成人高清一区二区| 性久久久久久久久久| 色综合久久中文字幕综合网| 五月天婷婷视频| 欧美影院在线播放| 伊人春色精品| 日本成人黄色网| 国产欧美日韩精品一区| 国产免费www| 久久精品久久久久电影| 综合久久伊人| 免费看日b视频| 不卡的av网站| 91精品国产综合久久久蜜臀九色 | 色无极影院亚洲| 日韩欧美国产成人| 黄色小视频在线观看| 国产精品久久久久aaaa九色| 日韩在线高清| 韩国一区二区在线播放| 亚洲国产综合在线| 午夜av免费在线观看| 日韩免费在线免费观看| 不卡日本视频| 久久人人爽人人片| 亚洲电影第三页| 伦理片一区二区三区| 国产精品自拍小视频| 欧美成人高清| 黄色a一级视频| 欧美视频自拍偷拍| 国产激情在线视频| 国产偷国产偷亚洲高清97cao| 久久伊人亚洲| 免费成人深夜夜行网站| 欧美videos大乳护士334| 亚洲最大网站| 自拍视频一区二区三区| 成人久久18免费网站麻豆 | 91精品国产一区二区三区蜜臀| 欧美亚洲天堂| 日韩三级电影| 国产成人精品亚洲午夜麻豆| 天天操中文字幕| 日韩在线高清视频| 欧美成人午夜77777| 色噜噜狠狠一区二区| 亚洲国产精品久久人人爱蜜臀| 国产51人人成人人人人爽色哟哟| 91在线观看网站| 老司机亚洲精品| 青青草手机在线视频| 亚洲人成电影网| 欧美电影在线观看一区| 国产男女激情视频| 亚洲综合色丁香婷婷六月图片| 国产精品毛片一区二区三区四区| 91情侣在线视频|