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

手机在线观看国产精品| 日本91av在线播放| 屁屁影院国产第一页| 亚洲女同志freevdieo| 国产视频不卡一区| 鬼打鬼之黄金道士1992林正英| 日韩精品一区二区不卡| 精品国产一级毛片| 欧美群妇大交群中文字幕| 轻点好疼好大好爽视频| 成人精品一区二区三区校园激情| 国产精品亚洲视频| 国产999精品视频| 欧美成人aaa片一区国产精品| 亚洲性视频大全| 日韩午夜在线观看| 国产免费999| 黑人另类精品××××性爽| 国产调教视频一区| 国产欧美一区二区在线播放| 一卡二卡三卡在线| 麻豆精品网站| 国内精品伊人久久| 99自拍视频在线| 免费成人av| 亚洲国产天堂久久综合| www激情五月| 成人国产精品入口免费视频| 偷窥少妇高潮呻吟av久久免费| 中文字幕一区二区三区四区五区人| 男人天堂av网| 国产一区二区三区观看| 国产欧洲精品视频| 久久国产香蕉视频| 久久国产精品久久w女人spa| 97国产精品视频| 九九九免费视频| 66视频精品| 色偷偷88888欧美精品久久久| 成年人在线观看av| 美女视频亚洲色图| 精品av久久707| 无码人妻一区二区三区在线| 免费观看在线一区二区三区| 69久久夜色精品国产69蝌蚪网| 日本中文字幕高清| 成人小电影网站| 精品国产精品自拍| 黄色一级视频在线播放| 亚洲国产精品精华素| 亚洲欧洲精品天堂一级| 一区二区三区四区五区视频| 99视频在线观看地址| 国产亚洲欧美在线| 亚洲不卡1区| 免费在线黄色影片| 国产午夜精品理论片a级大结局| 九色91视频| 免费毛片在线| 国产精品欧美一区二区三区| 四虎永久在线精品免费一区二区| 91亚洲欧美| 综合久久久久久| 婷婷视频在线播放| 激情图片在线观看高清国产| 亚洲午夜久久久久| 91精品91久久久中77777老牛| 国产精品论坛| 色综合久久久久久久| 国产又粗又长又大的视频| 成人国产精品一区二区免费麻豆 | 刘亦菲一区二区三区免费看| 日韩欧美999| www欧美激情| 精品精品视频| 亚洲高清福利视频| 亚洲日本精品视频| 一区二区在线影院| 7777精品视频| 中文字幕人妻丝袜乱一区三区| 精品一区二区在线看| 成人xxxxx色| 黄色片在线看| 亚洲免费色视频| 精品欧美一区免费观看α√| 日本一区二区电影| 欧美电影免费观看完整版| 日韩av无码一区二区三区不卡| 国产成人1区| 欧美成人激情在线| 色一情一乱一伦| 国产一区二区不卡老阿姨| 国产精品视频在线免费观看| yourporn在线观看视频| 一区二区三区四区视频精品免费 | 久久夜精品香蕉| 香蕉免费毛片视频| 久久99国产精品尤物| 国产在线一区二| 免费av不卡| 欧美午夜久久久| 日韩久久久久久久久久久| 中文字幕中文字幕精品| 久久久精品国产| 日本黄色一级视频| 大胆亚洲人体视频| 一级特黄录像免费播放全99| 麻豆mv在线观看| 91精品国产一区二区三区蜜臀 | 美女福利一区| 欧美成人免费在线观看| www.久久久久久久| 成人精品高清在线| 亚洲一区二区三区加勒比| 免费成人在线电影| 欧美成va人片在线观看| 99久久99久久精品免费看小说.| 伊人久久久大香线蕉综合直播| 国产欧美精品久久久| 五月婷在线视频| 亚洲一区二区三区精品在线| 色播五月综合网| 精品中文一区| 91a在线视频| 蜜桃视频污在线观看| 亚洲视频 欧洲视频| 一区二区xxx| 亚洲第一论坛sis| 久久人人爽人人爽人人片av高请| 91肉色超薄丝袜脚交一区二区| 久久久电影一区二区三区| 免费看欧美黑人毛片| 高清一区二区中文字幕| 日韩一级黄色av| 综合久久中文字幕| 国产欧美日本一区二区三区| 漂亮人妻被中出中文字幕| 卡一精品卡二卡三网站乱码| 久久999免费视频| 国产成人麻豆精品午夜在线| 国产精品免费aⅴ片在线观看| 久久精品视频91| 国产精品传媒| 97久久精品视频| 三级网站在线看| 精品久久久久久久久久久| 亚洲av成人精品一区二区三区| 欧美日韩国产亚洲一区| 97久久天天综合色天天综合色hd| 51xtv成人影院| 日韩欧美123| 国产污视频在线看| 99精品热视频| 日本黄网站免费| 日韩大片在线| 91久久精品国产91久久| 国产黄大片在线观看画质优化| 7777精品伊人久久久大香线蕉| 免费中文字幕日韩| 成人精品免费看| av天堂永久资源网| 欧美中文一区二区| 国产日韩av在线| 中文字幕中文字幕在线十八区 | 91社区在线| 欧美一区二区三区四区视频 | 午夜视频在线观看免费视频| 51久久夜色精品国产麻豆| 特级片在线观看| av资源站一区| 尤蜜粉嫩av国产一区二区三区| 四季av一区二区三区免费观看| 91亚洲精品在线观看| 成人影音在线| 在线观看久久av| 国产又黄又粗又长| 洋洋成人永久网站入口| 三上悠亚ssⅰn939无码播放| 久久精品国产99| 成人在线国产视频| 欧美精品一区二区三区精品| 亚洲一区二区久久久久久久| 鲁鲁在线中文| 久久精品在线视频| 五月天婷婷社区| 欧美日韩午夜在线| 国产精品第一页在线观看| 国产精品欧美极品| 美女露出粉嫩尿囗让男人桶| 久久永久免费| 国产一级黄色录像片| 老牛国内精品亚洲成av人片| 国产欧美日韩中文字幕在线| 男女免费观看在线爽爽爽视频| 亚洲精品日韩久久久| 国产欧美一级片| 一本高清dvd不卡在线观看| 黄视频网站免费看| 国产日韩精品一区二区三区在线| 可以看的av网址| 日本不卡一二三区黄网| 青青草国产免费| 91欧美在线| 久久久久久久久久久久久9999| 亚洲午夜剧场| 国产成人黄色av| av电影在线免费| 久久天天躁狠狠躁夜夜躁2014| 色鬼7777久久| 精品国产91久久久久久久妲己| 一道本在线视频| 日韩欧美中文免费| 国产精品999久久久| 亚洲欧洲成人自拍| 天天躁夜夜躁狠狠是什么心态| 国产91丝袜在线播放0| 亚洲精品性视频| 久久精品导航| 国产精品宾馆在线精品酒店| 国模大胆一区二区三区| 一区二区三区四区五区精品| 国产精品免费99久久久| 国内不卡一区二区三区| 日本精品视频| 亚洲综合色激情五月| 日本成人在线网站| 国产精品极品美女粉嫩高清在线| a级片在线免费观看| 免费99精品国产自在在线| 在线观看免费版| 最近2019年中文视频免费在线观看| 天堂在线视频观看| 精品欧美乱码久久久久久| 国产色在线视频| 欧美一级黄色大片| 国产免费视频一区二区三区| 欧美电影在线免费观看| 亚洲视频在线观看一区二区| 欧美亚洲尤物久久| 天天干天天插天天射| 91久久精品国产91性色tv| 久久黄色精品视频| 欧美性猛交xxxx黑人猛交| 日本在线免费观看| 亚洲18女电影在线观看| xxxxxx国产| 黄网站色欧美视频| 欧美一区二区三区四| 欧美视频在线免费| 天堂а√在线中文在线新版 | a级片在线视频| 欧美一区二区精品在线| 精品黑人一区二区三区国语馆| 日韩色在线观看| xxxx18国产| 亚洲精品福利在线| 国产中文字幕在线| 综合欧美国产视频二区| 黄色免费在线观看| 欧美极品少妇xxxxⅹ免费视频| 阿v视频在线观看| 欧洲精品久久久| 91天天综合| 91情侣偷在线精品国产| 亚洲精品在线国产| 麻豆av福利av久久av| 成人情趣视频| 日日噜噜夜夜狠狠久久丁香五月| 欧美人成在线| avav在线看| 激情综合色播激情啊| 国产成人精品一区二区三区在线观看| 成人高清免费观看| 精品人妻无码一区二区三区换脸| 国产精品欧美极品| 久久机热这里只有精品| 一本到高清视频免费精品| 一级片在线免费观看视频| 日韩精品一区二区三区视频播放| 午夜视频在线免费播放| 日韩天堂在线视频| 国产美女一区视频| 国产精品成人aaaaa网站| 精品国产一区二区三区2021| 蜜桃传媒视频麻豆一区| 天堂美国久久| 久久美女福利视频| 国产精品亚洲视频| 精品国产aaa| 亚洲一区二区免费视频| 国产偷国产偷亚洲清高网站| 欧美激情一区二区三区免费观看| 91精品国产丝袜白色高跟鞋| 四虎在线免费看| 久久精品视频亚洲| 裤袜国产欧美精品一区| 91亚洲精华国产精华| 天堂资源在线亚洲| 精品国产三级a∨在线| 日韩专区一卡二卡| 91超薄肉色丝袜交足高跟凉鞋| 国产精品色噜噜| 在线观看精品国产| 日韩欧美成人午夜| 秋霞午夜理伦电影在线观看| 欧美亚洲国产视频| 伊人www22综合色| 一区二区三区av| 久久五月激情| 中文字幕一区二区人妻电影丶| 国产精品久久二区二区| 狠狠人妻久久久久久综合| 日韩欧美国产一区在线观看| 五月婷婷在线视频| 日本一区二区三区在线播放 | 精品久久久久久亚洲| 综合日韩在线| 999在线观看| 亚洲国产精品v| 黄色一级视频免费看| 亚洲成人中文字幕| 午夜成年人在线免费视频| 欧美一级淫片免费视频魅影视频| 蜜臀av一区二区在线观看 | 婷婷综合六月| 国产成人亚洲欧美| 中文在线播放一区二区| 91香蕉视频导航| 国产视频亚洲色图| av图片在线观看| 日韩电影视频免费| 国产白浆在线免费观看| 国产成人av一区二区三区| 这里只有精品在线| 在线观看免费视频污| 中文字幕色av一区二区三区| 在线视频 91| 中文字幕成人在线| 成人全视频在线观看在线播放高清 | 菠萝蜜影院一区二区免费| 在线成人视屏| 视频一区不卡| 免费观看久久久4p| 国产传媒视频在线| 欧美福利一区二区| bt在线麻豆视频| 99国产超薄丝袜足j在线观看| 欧美国产高潮xxxx1819| 能看毛片的网站| 亚洲成人精品影院| 五月婷婷丁香六月| 国产激情视频一区| 日韩在线观看一区 | 精品一区二区三区中文字幕 | 91九色porn在线资源| 精品视频高清无人区区二区三区| 亚洲作爱视频| 精品无码在线观看| 欧美日韩不卡一区二区| а√中文在线8| 国产精品亚洲综合| 男女精品网站| 九一在线免费观看| 日韩亚洲国产中文字幕欧美| 美足av综合网| 欧美日韩在线播放一区二区| 美美哒免费高清在线观看视频一区二区| 欧美巨胸大乳hitomi| 日韩一二三区视频| 水蜜桃在线视频| 亚洲成人网上| 国产成人精品一区二| 五月天综合激情| 最近2019中文免费高清视频观看www99| 日韩在线电影| av免费观看大全| 日本一区二区久久| 亚洲第一大网站| 国产mv免费观看入口亚洲| 91精品国产调教在线观看| 国产国语老龄妇女a片| 色婷婷精品久久二区二区蜜臀av| 国产在线观看91| 精品中文字幕人| 麻豆精品久久久| 日韩精品一区二区三| 日韩在线观看免费网站 | 韩国欧美国产一区| 国产成人无码精品亚洲| 色天天综合狠狠色| 婷婷五月色综合香五月| 国产成年人视频网站| 亚洲成人777| 精品美女在线观看视频在线观看 | 国产黑丝一区二区| 精品视频色一区| 草草视频在线观看| 正在播放亚洲| 国产亚洲综合性久久久影院| 黄色一级a毛片|