亭亭五月天在线观看,亭亭五月天在线观看,国产最新av一区二区,国产 高清 中文字幕,99re热久久亚洲综合精品成人,熟妇 一区二区三区,一级做a爰片性色毛片武则天,美女的骚穴视频播放,国产美女午夜免费视频

首頁>國內 > 正文

Go開發(fā)命令行程序指南

2023-03-31 09:15:23來源:TonyBai

近期在Twitter上看到一個名為“Command Line Interface Guidelines”的站點[1],這個站點匯聚了幫助大家編寫出更好命令行程序的哲學與指南。這份指南基于傳統(tǒng)的Unix編程原則[2],又結合現(xiàn)代的情況進行了“與時俱進”的更新。之前我還真未就如何編寫命令行交互程序做系統(tǒng)的梳理,在這篇文章中,我們就來結合clig這份指南[3],(可能不會全面覆蓋)整理出一份使用Go語言編寫CLI程序的指南,供大家參考。


【資料圖】

一. 命令行程序簡介

命令行接口(Command Line Interface, 簡稱CLI)程序是一種允許用戶使用文本命令和參數(shù)與計算機系統(tǒng)互動的軟件。開發(fā)人員編寫CLI程序通常用在自動化腳本、數(shù)據(jù)處理、系統(tǒng)管理和其他需要低級控制和靈活性的任務上。命令行程序也是Linux/Unix管理員以及后端開發(fā)人員的最愛。

2022年Q2 Go官方用戶調查結果[4]顯示(如下圖):在使用Go開發(fā)的程序類別上,CLI類程序排行第二,得票率60%。

之所以這樣,得益于Go語言為CLI開發(fā)提供的諸多便利,比如:

Go語法簡單而富有表現(xiàn)力;Go擁有一個強大的標準庫,并內置的并發(fā)支持;Go擁有幾乎最好的跨平臺兼容性和快速的編譯速度;Go還有一個豐富的第三方軟件包和工具的生態(tài)系統(tǒng)。

這些都讓開發(fā)者使用Go創(chuàng)建強大和用戶友好的CLI程序變得容易。

容易歸容易,但要用Go編寫出優(yōu)秀的CLI程序,我們還需要遵循一些原則,獲得一些關于Go CLI程序開發(fā)的最佳實踐和慣例。這些原則和慣例涉及交互界面設計、錯誤處理、文檔、測試和發(fā)布等主題。此外,借助于一些流行的Go CLI程序開發(fā)庫和框架,比如:cobra[5]、Kingpin[6]和Goreleaser[7]等,我們可以又好又快地完成CLI程序的開發(fā)。在本文結束時,你將學會如何創(chuàng)建一個易于使用、可靠和可維護的Go CLI程序,你還將獲得一些關于CLI開發(fā)的最佳實踐和慣例的見解。

二. 建立Go開發(fā)環(huán)境

如果你讀過《十分鐘入門Go語言》[8]或訂閱學習過我的極客時間《Go語言第一課》專欄[9],你大可忽略這一節(jié)的內容。

在我們開始編寫Go CLI程序之前,我們需要確保我們的系統(tǒng)中已經(jīng)安裝和配置了必要的Go工具和依賴。在本節(jié)中,我們將向你展示如何安裝Go和設置你的工作空間,如何使用go mod進行依賴管理[10],以及如何使用go build和go install來編譯和安裝你的程序。

1. 安裝Go

要在你的系統(tǒng)上安裝Go,你可以遵循你所用操作系統(tǒng)的官方安裝說明。你也可以使用軟件包管理器,如homebrew[11](用于macOS)、chocolatey(用于Windows)或snap/apt(用于Linux)來更容易地安裝Go。

一旦你安裝了Go,你可以通過在終端運行以下命令來驗證它是否可以正常工作。

$go version

如果安裝成功,go version這個命令應該會打印出你所安裝的Go的版本。比如說:

go version go1.20 darwin/amd64
2. 設置你的工作區(qū)(workspace)

Go以前有一個慣例,即在工作區(qū)目錄中(組織你的代碼和依賴關系。默認工作空間目錄位于HOME/go,但你可以通過設置GOPATH環(huán)境變量來改變它的路徑。工作區(qū)目錄包含三個子目錄:src、pkg和bin。src目錄包含了你的源代碼文件和目錄。pkg目錄包含被你的代碼導入的已編譯好的包。bin目錄包含由你的代碼生成的可執(zhí)行二進制文件。

Go 1.11引入Go module[12]后,這種在下組織代碼和尋找依賴關系的要求被徹底取消。在這篇文章中,我依舊按照我的習慣在HOME/go/src下放置我的代碼示例。

為了給我們的CLI程序創(chuàng)建一個新的項目目錄,我們可以在終端運行以下命令:

$mkdir -p $HOME/go/src/github.com/your-username/your-li-program$cd $HOME/go/src/github.com/your-username/your-cli-program

注意,我們的項目目錄名使用的是github的URL格式。這在Go項目中是一種常見的做法,因為它使得使用go get導入和管理依賴關系更加容易。go module成為構建標準后,這種對項目目錄名的要求已經(jīng)取消,但很多Gopher依舊保留了這種作法。

3. 使用go mod進行依賴管理

1.11版本后Go推薦開發(fā)者使用module來管理包的依賴關系。一個module是共享一個共同版本號和導入路徑前綴的相關包的集合。一個module是由一個叫做go.mod的文件定義的,它指定了模塊的名稱、版本和依賴關系。

為了給我們的CLI程序創(chuàng)建一個新的module,我們可以在我們的項目目錄下運行以下命令。

$go mod init github.com/your-username/your-cli-program

這將創(chuàng)建一個名為go.mod的文件,內容如下。

module github.com/your-username/your-cli-programgo 1.20

第一行指定了我們的module名稱,這與我們的項目目錄名稱相匹配。第二行指定了構建我們的module所需的Go的最低版本。

為了給我們的模塊添加依賴項,我們可以使用go get命令,加上我們想使用的軟件包的導入路徑和可選的版本標簽。例如,如果我們想使用cobra[13]作為我們的CLI框架,我們可以運行如下命令:

$go get github.com/spf13/cobra@v1.3.0

go get將從github下載cobra,并在我們的go.mod文件中把它作為一個依賴項添加進去。它還將創(chuàng)建或更新一個名為go.sum的文件,記錄所有下載的module的校驗和,以供后續(xù)驗證使用。

我們還可以使用其他命令,如go list、go mod tidy、go mod graph等,以更方便地檢查和管理我們的依賴關系。

4. 使用go build和go install來編譯和安裝你的程序

Go有兩個命令允許你編譯和安裝你的程序:go build和go install。這兩個命令都以一個或多個包名或導入路徑作為參數(shù),并從中產生可執(zhí)行的二進制文件。

它們之間的主要區(qū)別在于它們將生成的二進制文件存儲在哪里。

go build將它們存儲在當前工作目錄中。go install將它們存儲在或GOBIN(如果設置了)。

例如,如果我們想把CLI程序的main包(應該位于github.com/your-username/your-cli-program/cmd/your-cli-program)編譯成一個可執(zhí)行的二進制文件,稱為your-cli-program,我們可以運行下面命令:

$go build github.com/your-username/your-cli-program/cmd/your-cli-program

$go install github.com/your-username/your-cli-program/cmd/your-cli-program@latest
三. 設計用戶接口(interface)

要編寫出一個好的CLI程序,最重要的環(huán)節(jié)之一是**設計一個用戶友好的接口[14]。好的命令行用戶接口應該是一致的、直觀的和富有表現(xiàn)力的**。在本節(jié)中,我將說明如何為命令行程序命名和選擇命令結構(command structure),如何使用標志(flag)、參數(shù)(argument)、子命令(subcommand)和選項(option)作為輸入?yún)?shù),如何使用cobra或Kingpin等來解析和驗證用戶輸入,以及如何遵循POSIX慣例和GNU擴展的CLI語法。

1. 命令行程序命名和命令結構選擇

你的CLI程序的名字應該是**簡短、易記、描述性的和易輸入的[15]**。它應該避免與目標平臺中現(xiàn)有的命令或關鍵字發(fā)生沖突。例如,如果你正在編寫一個在不同格式之間轉換圖像的程序,你可以把它命名為imgconv、imago、picto等,但不能叫image、convert或format。

你的CLI程序的命令結構應該反映你想提供給用戶的主要功能特性。你可以選擇使用下面命令結構模式中的一種:

一個帶有多個標志(flag)和參數(shù)(argument)的單一命令(例如:curl、tar、grep等)帶有多個子命令(subcommand)的單一命令(例如:git、docker、kubectl等)具有共同前綴的多個命令(例如:aws s3、gcloud compute、az vm等)

命令結構模式的選擇取決于你的程序的復雜性和使用范圍,一般來說:

如果你的程序只有一個主要功能或操作模式(operation mode),你可以使用帶有多個標志和參數(shù)的單一命令。如果你的程序有多個相關但又不同的功能或操作模式,你可以使用一個帶有多個子命令的單一命令。如果你的程序有多個不相關或獨立的功能或操作模式,你可以使用具有共同前綴的多個命令。

例如,如果你正在編寫一個對文件進行各種操作的程序(如復制、移動、刪除),你可以任選下面命令結構模式中的一種:

帶有多個標志和參數(shù)的單一命令(例如,fileop -c src dst -m src dst -d src)帶有多個子命令的單個命令(例如,fileop copy src dst, fileop move src dst, fileop delete src)2. 使用標志、參數(shù)、子命令和選項

**標志(flag)**是以一個或多個(通常是2個)中劃線(-)開頭的輸入?yún)?shù),它可以修改CLI程序的行為或輸出。例如:

$curl -s -o output.txt https://example.com

在這個例子中:

“-s”是一個讓curl沉默的標志,即不輸出執(zhí)行日志到控制臺;“-o”是另一個標志,用于指定輸出文件的名稱“output.txt”則是一個參數(shù),是為“-o”標志提供的值。

**參數(shù)(argument)**是不以中劃線(-)開頭的輸入?yún)?shù),為你的CLI程序提供額外的信息或數(shù)據(jù)。例如:

$tar xvf archive.tar.gz

我們看在這個例子中:

x是一個指定提取模式的參數(shù)v是一個參數(shù),指定的是輸出內容的詳細(verbose)程度f是另一個參數(shù),用于指定采用的是文件模式,即將壓縮結果輸出到一個文件或從一個壓縮文件讀取數(shù)據(jù)archive.tar.gz是一個參數(shù),提供文件名。

**子命令(subcommand)**是輸入?yún)?shù),作為主命令下的輔助命令。它們通常有自己的一組標志和參數(shù)。比如下面例子:

$git commit -m "Initial commit"

我們看在這個例子中:

git是主命令(primary command)commit是一個子命令,用于從staged的修改中創(chuàng)建一個新的提交(commit)“-m”是commit子命令的一個標志,用于指定提交信息"Initial commit"是commit子命令的一個參數(shù),為"-m"標志提供值。

**選項(option)**是輸入?yún)?shù),它可以使用等號(=)將標志和參數(shù)合并為一個參數(shù)。例如:

$docker run --name=my-container ubuntu:latest

我們看在這個例子中“--name=my-container”是一個選項,它將容器的名稱設為my-container。該選項前面的部分“--name”是一個標志,后面的部分“my-container”是參數(shù)。

3. 使用cobra包等來解析和驗證用戶輸入的信息

如果手工來解析和驗證用戶輸入的信息,既繁瑣又容易出錯。幸運的是,有許多庫和框架可以幫助你在Go中解析和驗證用戶輸入。其中最流行的是cobra[16]。

cobra是一個Go包,它提供了簡單的接口來創(chuàng)建強大的CLI程序。它支持子命令、標志、參數(shù)、選項、環(huán)境變量和配置文件。它還能很好地與其他庫集成,比如:viper[17](用于配置管理)、pflag[18](用于POSIX/GNU風格的標志)和Docopt[19](用于生成文檔)。

另一個不那么流行但卻提供了一種聲明式的方法來創(chuàng)建優(yōu)雅的CLI程序的包是Kingpin[20],它支持標志、參數(shù)、選項、環(huán)境變量和配置文件。它還具有自動幫助生成、命令完成、錯誤處理和類型轉換等功能。

cobra和Kingpin在其官方網(wǎng)站上都有大量的文檔和例子,你可以根據(jù)你的偏好和需要選擇任選其一。

4. 遵循POSIX慣例和GNU擴展的CLI語法

POSIX(Portable Operating System Interface)[21]是一套標準,定義了軟件應該如何與操作系統(tǒng)進行交互。其中一個標準定義了CLI程序的語法和語義。GNU(GNU"s Not Unix)是一個旨在創(chuàng)建一個與UNIX兼容的自由軟件操作系統(tǒng)的項目。GNU下的一個子項目是GNU Coreutils[22],它提供了許多常見的CLI程序,如ls、cp、mv等。

POSIX和GNU都為CLI語法建立了一些約定和擴展,許多CLI程序都采用了這些約定與擴展。下面列舉了這些約定和擴展中的一些主要內容:

單字母標志(single-letter flag)以一個中劃線(-)開始,可以組合在一起(例如:-a -b -c 或 -abc )長標志(long flag)以兩個中劃線(--)開頭,但不能組合在一起(例如:--all、--backup、--color )選項使用等號(=)來分隔標志名和參數(shù)值(例如:--name=my-container )參數(shù)跟在標志或選項之后,沒有任何分隔符(例如:curl -o output.txt https://example.com )。子命令跟在主命令之后,沒有任何分隔符(例如:git commit -m "Initial commit" )一個雙中劃線(--)表示標志或選項的結束和參數(shù)的開始(例如:rm -- -f 表示要刪除“-f”這個文件,由于雙破折線的存在,這里的“-f”不再是標志)

遵循這些約定和擴展可以使你的CLI程序更加一致、直觀,并與其他CLI程序兼容。然而,它們并不是強制性的,如果你有充分的理由,你也大可不必完全遵守它們。例如,一些CLI程序使用斜線(/)而不是中劃線(-)表示標志(例如, robocopy /S /E src dst )。

四. 處理錯誤和信號

編寫好的CLI程序的一個重要環(huán)節(jié)就是**優(yōu)雅地處理錯誤和信號[23]**。

錯誤是指你的程序由于某些內部或外部因素而無法執(zhí)行其預定功能的情況。信號是由操作系統(tǒng)或其他進程向你的程序發(fā)送的事件,以通知它一些變化或請求。在這一節(jié)中,我將說明一下如何使用log、fmt和errors包進行日志輸出和錯誤處理,如何使用os.Exit和defer語句進行優(yōu)雅的終止,如何使用os.Signal和context包進行中斷和取消操作,以及如何遵循CLI程序的退出狀態(tài)代碼慣例。

1. 使用log、fmt和errors包進行日志記錄和錯誤處理

Go標準庫中有三個包log、fmt和errors可以幫助你進行日志和錯誤處理。log包提供了一個簡單的接口,可以將格式化的信息寫到標準輸出或文件中。fmt包則提供了各種格式化字符串和值的函數(shù)。errors包提供了創(chuàng)建和操作錯誤值的函數(shù)。

要使用log包,你需要在你的代碼中導入它:

import "log"

然后你可以使用log.Println、log.Printf、log.Fatal和log.Fatalf等函數(shù)來輸出不同嚴重程度的信息。比如說:

log.Println("Starting the program...") // 打印帶有時間戳的消息log.Printf("Processing file %s...\n", filename) // 打印一個帶時間戳的格式化信息log.Fatal("Cannot open file: ", err) // 打印一個帶有時間戳的錯誤信息并退出程序log.Fatalf("Invalid input: %v\n", input) // 打印一個帶時間戳的格式化錯誤信息,并退出程序。

為了使用fmt包,你需要先在你的代碼中導入它:

import "fmt"

然后你可以使用fmt.Println、fmt.Printf、fmt.Sprintln、fmt.Sprintf等函數(shù)以各種方式格式化字符串和值。比如說:

fmt.Println("Hello world!") // 打印一條信息,后面加一個換行符fmt.Printf("The answer is %d\n", 42) // 打印一條格式化的信息,后面是換行。s := fmt.Sprintln("Hello world!") // 返回一個帶有信息和換行符的字符串。t := fmt.Sprintf("The answer is %d\n", 42) // 返回一個帶有格式化信息和換行的字符串。

要使用錯誤包,你同樣需要在你的代碼中導入它:

import "errors"

然后你可以使用 errors.New、errors.Unwrap、errors.Is等函數(shù)來創(chuàng)建和操作錯誤值。比如說:

err := errors.New("Something went wrong") // 創(chuàng)建一個帶有信息的錯誤值cause := errors.Unwrap(err) // 返回錯誤值的基本原因(如果沒有則為nil)。match := errors.Is(err, io.EOF) // 如果一個錯誤值與另一個錯誤值匹配,則返回真(否則返回假)。
2. 使用os.Exit和defer語句實現(xiàn)CLI程序的優(yōu)雅終止

Go有兩個功能可以幫助你優(yōu)雅地終止CLI程序:os.Exit和defer。os.Exit函數(shù)立即退出程序,并給出退出狀態(tài)代碼。defer語句則會在當前函數(shù)退出前執(zhí)行一個函數(shù)調用,它常用來執(zhí)行清理收尾動作,如關閉文件或釋放資源。

要使用os.Exit函數(shù),你需要在你的代碼中導入os包:

import "os"

然后你可以使用os.Exit函數(shù),它的整數(shù)參數(shù)代表退出狀態(tài)代碼。比如說

os.Exit(0) // 以成功的代碼退出程序os.Exit(1) // 以失敗代碼退出程序

要使用defer語句,你需要把它寫在你想后續(xù)執(zhí)行的函數(shù)調用之前。比如說

file, err := os.Open(filename) // 打開一個文件供讀取。if err != nil { log.Fatal(err) // 發(fā)生錯誤時退出程序}defer file.Close() // 在函數(shù)結束時關閉文件。// 對文件做一些處理...
3. 使用os.signal和context包來實現(xiàn)中斷和取消操作

Go有兩個包可以幫助你實現(xiàn)中斷和取消長期運行的或阻塞的操作,它們是os.signal和context包。os.signal提供了一種從操作系統(tǒng)或其他進程接收信號的方法。context包提供了一種跨越API邊界傳遞取消信號和deadline的方法。

要使用os.signal,你需要先在你的代碼中導入它。

import (  "os"  "os/signal")

然后你可以使用signal.Notify函數(shù)針對感興趣的信號(如下面的os.Interrupt信號)注冊一個接收channel(sig)。比如說:

sig := make(chan os.Signal, 1) // 創(chuàng)建一個帶緩沖的信號channel。signal.Notify(sig, os.Interrupt) // 注冊sig以接收中斷信號(例如Ctrl-C)。// 做一些事情...select {case <-sig: // 等待來自sig channel的信號 fmt.Println("被用戶中斷了") os.Exit(1) // 以失敗代碼退出程序。default: //如果沒有收到信號就執(zhí)行 fmt.Println("成功完成") os.Exit(0) // 以成功代碼退出程序。}

要使用上下文包,你需要在你的代碼中導入它:

import "context"

然后你可以使用它的函數(shù),如context.Background、context.WithCancel、context.WithTimeout等來創(chuàng)建和管理Context。Context是一個攜帶取消信號和deadline的對象,可以跨越API邊界。比如說:

ctx := context.Background() // 創(chuàng)建一個空的背景上下文(從不取消)。ctx, cancel := context.WithCancel(ctx) // 創(chuàng)建一個新的上下文,可以通過調用cancel函數(shù)來取消。defer cancel() // 在函數(shù)結束前執(zhí)行ctx的取消動作// 將ctx傳遞給一些接受它作為參數(shù)的函數(shù)......select {case <-ctx.Done(): // 等待來自ctx的取消信號  fmt.Println("Canceled by parent") return ctx.Err() // 從ctx返回一個錯誤值 default: // 如果沒有收到取消信號就執(zhí)行  fmt.Println("成功完成") return nil // 不返回錯誤值 }
4. CLI程序的退出狀態(tài)代碼慣例

退出狀態(tài)代碼是一個整數(shù),表示CLI程序是否成功執(zhí)行完成。CLI程序通過調用os.Exit或從main返回的方式返回退出狀態(tài)值。其他CLI程序或腳本可以可以檢查這些退出狀態(tài)碼,并根據(jù)狀態(tài)碼值的不同執(zhí)行不同的處理操作。

業(yè)界有一些關于退出狀態(tài)代碼的約定和擴展,這些約定被許多CLI程序廣泛采用。其中一些主要的約定和擴展如下:。

退出狀態(tài)代碼為0表示程序執(zhí)行成功(例如:os.Exit(0) )非零的退出狀態(tài)代碼表示失?。ɡ纾簅s.Exit(1) )。不同的非零退出狀態(tài)代碼可能表示不同的失敗類型或原因(例如:os.Exit(2)表示使用錯誤,os.Exit(3)表示權限錯誤等等)。大于125的退出狀態(tài)代碼可能表示被外部信號終止(例如,os.Exit(130)為被信號中斷)。

遵循這些約定和擴展可以使你的CLI程序表現(xiàn)的更加一致、可靠并與其他CLI程序兼容。然而,它們不是強制性的,你可以使用任何對你的程序有意義的退出狀態(tài)代碼。例如,一些CLI程序使用高于200的退出狀態(tài)代碼來表示自定義或特定應用的錯誤(例如,os.Exit(255)表示未知錯誤)。

五. 編寫文檔

編寫優(yōu)秀CLI程序的另一個重要環(huán)節(jié)是編寫清晰簡潔的文檔,解釋你的程序做什么以及如何使用它。文檔可以采取各種形式,如README文件、usage信息、help flag等。在本節(jié)中,我們將告訴你如何為你的程序寫一個README文件,如何為你的程序寫一個有用的usage和help flag等。

1. 為你的CLI程序寫一個清晰簡潔的README文件

README文件是一個文本文件,它提供了關于你的程序的基本信息,如它的名稱、描述、用法、安裝、依賴性、許可證和聯(lián)系細節(jié)等。它通常是用戶或開發(fā)者在源代碼庫或軟件包管理器上首次使用你的程序時會看到的內容。

如果你要為Go CLI程序編寫一個優(yōu)秀的README文件,你應該遵循一些最佳實踐,比如:

使用一個描述性的、醒目的標題,反映你的程序的目的和功能。提供一個簡短的介紹,解釋你的程序是做什么的,為什么它是有用的或獨特的。包括一個usage部分,說明如何用不同的標志、參數(shù)、子命令和選項來調用你的程序。你可以使用代碼塊或屏幕截圖來說明這些例子。包括一個安裝(install)部分,解釋如何在不同的平臺上下載和安裝你的程序。你可以使用go install、go get、goreleaser[24]或其他工具來簡化這一過程。指定你的程序的發(fā)行許可,并提供一個許可全文的鏈接。你可以使用SPDX標識符[25]來表示許可證類型。為想要報告問題、請求新功能、貢獻代碼或提問的用戶或開發(fā)者提供聯(lián)系信息。你可以使用github issue、pr、discussion、電子郵件或其他渠道來達到這個目的。

以下是一個Go CLI程序的README文件的示例供參考:

2. 為你的CLI程序編寫有用的usage和help標志

usage信息是一段簡短的文字,總結了如何使用你的程序及其可用的標志、參數(shù)、子命令和選項。它通常在你的程序在沒有參數(shù)或輸入無效的情況下運行時顯示。

help標志是一個特殊的標志(通常是-h或--help),它可以觸發(fā)顯示使用信息和一些關于你的程序的額外信息。

為了給你的Go CLI程序寫有用的usage信息和help標志,你應該遵循一些準則,比如說:

使用一致而簡潔的語法來描述標志、參數(shù)、子命令和選項。你可以用方括號“[ ]”表示可選元素,使用角括號“< >”表示必需元素,使用省略號“...”表示重復元素,使用管道“|”表示備選,使用中劃線“-”表示標志(flag),使用等號“=”表示標志的值等等。對標志、參數(shù)、子命令和選項應使用描述性的名稱,以反映其含義和功能。避免使用單字母名稱,除非它們非常常見或非常直觀(如-v按慣例表示verbose模式)。為每個標志、參數(shù)、子命令和選項提供簡短而清晰的描述,解釋它們的作用以及它們如何影響你的程序的行為。你可以用圓括號“( )”來表達額外的細節(jié)或例子。使用標題或縮進將相關的標志、參數(shù)、子命令和選項組合在一起。你也可以用空行或水平線(---)來分隔usage的不同部分。在每組中按名稱的字母順序排列標志。在每組中按重要性或邏輯順序排列參數(shù)。在每組中按使用頻率排列子命令。

git的usage就是一個很好的例子:

$git usage: git [--version] [--help] [-C ] [-c =]           [--exec-path[=]] [--html-path] [--man-path] [--info-path]           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]           [--git-dir=] [--work-tree=] [--namespace=]            []

結合上面的準則,大家可以細心體會一下。

六. 測試和發(fā)布你的CLI程序

編寫優(yōu)秀CLI程序的最后一個環(huán)節(jié)是測試和發(fā)布你的程序。測試確保你的程序可以按預期工作,并符合質量標準。發(fā)布可以使你的程序可供用戶使用和訪問。

在本節(jié)中,我將說明如何使用testing、testify/assert、mock包對你的代碼進行單元測試,如何使用go test、coverage、benchmark工具來運行測試和測量程序性能以及如何使用goreleaser包來構建跨平臺的二進制文件。

1. 使用testing、testify的assert及mock包對你的代碼進行單元測試

單元測試是一種驗證單個代碼單元(如函數(shù)、方法或類型)的正確性和功能的技術。單元測試可以幫助你盡早發(fā)現(xiàn)錯誤,提高代碼質量和可維護性,并促進重構和調試。

要為你的Go CLI程序編寫單元測試,你應該遵循一些最佳實踐:

使用內置的測試包來創(chuàng)建測試函數(shù),以Test開頭,后面是被測試的函數(shù)或方法的名稱。例如:func TestSum(t *testing.T) { ... };使用*testing.T類型的t參數(shù),使用t.Error、t.Errorf、t.Fatal或t.Fatalf這樣的方法報告測試失敗。你也可以使用t.Log、t.Logf、t.Skip或t.Skipf這樣的方法來提供額外的信息或有條件地跳過測試。使用Go子測試(sub test)[26],通過t.Run方法將相關的測試分組。例如:
func TestSum(t *testing.T) {    t.Run("positive numbers", func(t *testing.T) {        // test sum with positive numbers    })    t.Run("negative numbers", func(t *testing.T) {        // test sum with negative numbers    })}
使用表格驅動(table-driven)的測試來運行多個測試用例,比如下面的例子:
func TestSum(t *testing.T) {    tests := []struct{        name string        a int        b int        want int    }{        {"positive numbers", 1, 2, 3},        {"negative numbers", -1, -2, -3},        {"zero", 0, 0 ,0},    }    for _, tt := range tests {        t.Run(tt.name, func(t *testing.T) {            got := Sum(tt.a , tt.b)            if got != tt.want {                t.Errorf("Sum(%d , %d) = %d; want %d", tt.a , tt.b , got , tt.want)            }        })    }}
使用外部包,如testify/assert或mock來簡化你的斷言或對外部的依賴性。比如說:
import (    "github.com/stretchr/testify/assert"    "github.com/stretchr/testify/mock")type Calculator interface {    Sum(a int , b int) int}type MockCalculator struct {    mock.Mock}func (m *MockCalculator) Sum(a int , b int) int {    args := m.Called(a , b)    return args.Int(0)}
2. 使用Go的測試、覆蓋率、性能基準工具來運行測試和測量性能

Go提供了一套工具來運行測試和測量你的代碼的性能。你可以使用這些工具來確保你的代碼按預期工作,檢測錯誤或bug,并優(yōu)化你的代碼以提高速度和效率。

要使用go test、coverage、benchmark工具來運行測試和測量你的Go CLI程序的性能,你應該遵循一些步驟,比如說。

將以_test.go結尾的測試文件寫在與被測試代碼相同的包中。例如:sum_test.go用于測試sum.go。使用go測試命令來運行一個包中的所有測試或某個特定的測試文件。你也可以使用一些標志,如-v,用于顯示verbose的輸出,-run用于按名字過濾測試用例,-cover用于顯示代碼覆蓋率,等等。例如:go test -v -cover ./...使用go工具cover命令來生成代碼覆蓋率的HTML報告,并高亮顯示代碼行。你也可以使用-func這樣的標志來顯示函數(shù)的代碼覆蓋率,用-html還可以在瀏覽器中打開覆蓋率結果報告等等。例如:go tool cover -html=coverage.out編寫性能基準函數(shù),以Benchmark開頭,后面是被測試的函數(shù)或方法的名稱。使用類型為*testing.B的參數(shù)b來控制迭代次數(shù),并使用b.N、b.ReportAllocs等方法控制報告結果的輸出。比如說
func BenchmarkSum(b *testing.B) {    for i := 0; i < b.N; i++ {        Sum(1 , 2)    }}
使用go test -bench命令來運行一個包中的所有性能基準測試或某個特定的基準文件。你也可以使用-benchmem這樣的標志來顯示內存分配的統(tǒng)計數(shù)據(jù),-cpuprofile或-memprofile來生成CPU或內存profile文件等等。例如:go test -bench . -benchmem ./...使用pprof或benchstat等工具來分析和比較CPU或內存profile文件或基準測試結果。比如說。
# Generate CPU profilego test -cpuprofile cpu.out ./...# Analyze CPU profile using pprofgo tool pprof cpu.out# Generate two sets of benchmark resultsgo test -bench . ./... > old.txtgo test -bench . ./... > new.txt# Compare benchmark results using benchstatbenchstat old.txt new.txt
3. 使用goreleaser包構建跨平臺的二進制文件

構建跨平臺二進制文件意味著將你的代碼編譯成可執(zhí)行文件,可以在不同的操作系統(tǒng)和架構上運行,如Windows、Linux、Mac OS、ARM等。這可以幫助你向更多的人分發(fā)你的程序,使用戶更容易安裝和運行你的程序而不需要任何依賴或配置。

為了給你的Go CLI程序建立跨平臺的二進制文件,你可以使用外部軟件包,比如goreleaser等 ,它們可以自動完成程序的構建、打包和發(fā)布過程。下面是使用goreleaser包構建程序的一些步驟。

使用go get或go install命令安裝goreleaser。例如: go install github.com/goreleaser/goreleaser@latest創(chuàng)建一個配置文件(通常是.goreleaser.yml),指定如何構建和打包你的程序。你可以定制各種選項,如二進制名稱、版本、主文件、輸出格式、目標平臺、壓縮、校驗和、簽名等。例如。
# .goreleaser.ymlproject_name: myclibuilds:  - main: ./cmd/mycli/main.go    binary: mycli    goos:      - windows      - darwin      - linux    goarch:      - amd64      - arm64archives:  - format: zip    name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}"    files:      - LICENSE.txt      - README.mdchecksum:  name_template: "{{ .ProjectName }}_checksums.txt"  algorithm: sha256

運行goreleaser命令,根據(jù)配置文件構建和打包你的程序。你也可以使用-snapshot用于測試,-release-notes用于從提交信息中生成發(fā)布說明,-rm-dist用于刪除之前的構建,等等。例如:goreleaser --snapshot --rm-dist。

檢查輸出文件夾(通常是dist)中生成的二進制文件和其他文件。你也可以使用goreleaser的發(fā)布功能將它們上傳到源代碼庫或軟件包管理器中。

七. clig.dev指南要點

通過上述的系統(tǒng)說明,你現(xiàn)在應該可以設計并使用Go實現(xiàn)出一個CLI程序了。不過本文并非覆蓋了clig.dev指南的所有要點,因此,在結束本文之前,我們再來回顧一下clig.dev指南中的要點,大家再體會一下。

前面說過,clig.dev上的cli指南是一個開源指南,可以幫助你寫出更好的命令行程序,它采用了傳統(tǒng)的UNIX原則,并針對現(xiàn)代的情況進行了更新。

遵循cli準則的一些好處是:

你可以創(chuàng)建易于使用、理解和記憶的CLI程序。你可以設計出能與其他程序進行很好配合的CLI程序,并遵循共同的慣例。你可以避免讓用戶和開發(fā)者感到沮喪的常見陷阱和錯誤。你可以從其他CLI設計者和用戶的經(jīng)驗和智慧中學習。

下面是該指南的一些要點:

理念

這一部分解釋了好的CLI設計背后的核心原則,如人本設計、可組合性、可發(fā)現(xiàn)性、對話性等。例如,以人為本的設計意味著CLI程序對人類來說應該易于使用和理解,而不僅僅是機器??山M合性意味著CLI程序應該通過遵循共同的慣例和標準與其他程序很好地協(xié)作。

參數(shù)和標志

這一部分講述了如何在你的CLI程序中使用位置參數(shù)(positional arguments )和標志。它還解釋了如何處理默認值、必傳參數(shù)、布爾標志、多值等。例如,你應該對命令的主要對象或動作使用位置參數(shù),對修改或可選參數(shù)使用標志。你還應該使用長短兩種形式的標志(如-v或-verbose),并遵循常見的命名模式(如--help或--version)。

配置

這部分介紹了如何使用配置文件和環(huán)境變量來為你的CLI程序存儲持久的設置。它還解釋了如何處理配置選項的優(yōu)先級、驗證、文檔等。例如,你應該使用配置文件來處理用戶很少改變的設置,或者是針對某個項目或環(huán)境的設置。對于特定于環(huán)境或會話的設置(如憑證或路徑),你也應該使用環(huán)境變量。

輸出

這部分介紹了如何格式化和展示你的CLI程序的輸出。它還解釋了如何處理輸出verbose級別、進度指示器、顏色、表格等。例如,你應該使用標準輸出(stdout)進行正常的輸出,這樣輸出的信息可以通過管道輸送到其他程序或文件。你還應該使用標準錯誤(stderr)來處理不屬于正常輸出流的錯誤或警告。

錯誤

這部分介紹了如何在你的CLI程序中優(yōu)雅地處理錯誤。它還解釋了如何使用退出狀態(tài)碼、錯誤信息、堆棧跟蹤等。例如,你應該使用表明錯誤類型的退出代碼(如0代表成功,1代表一般錯誤)。你還應該使用簡潔明了的錯誤信息,解釋出錯的原因以及如何解決。

子命令

這部分介紹了當CLI程序有多種操作或操作模式時,如何在CLI程序中使用子命令。它還解釋了如何分層構建子命令,組織幫助文本,以及處理常見的子命令(如help或version)。例如,當你的程序有不同的功能,需要不同的參數(shù)或標志時(如git clone或git commit),你應該使用子命令。你還應該提供一個默認的子命令,或者在沒有給出子命令時提供一個可用的子命令列表。

業(yè)界有許多精心設計的CLI工具的例子,它們都遵循cli準則,大家可以通過使用來深刻體會一下這些準則。下面是一些這樣的CLI工具的例子:

httpie:一個命令行HTTP客戶端,具有直觀的UI,支持JSON,語法高亮,類似wget的下載,插件等功能。例如,Httpie使用清晰簡潔的語法進行HTTP請求,支持多種輸出格式和顏色,優(yōu)雅地處理錯誤并提供有用的文檔。git:一個分布式的版本控制系統(tǒng),讓你管理你的源代碼并與其他開發(fā)者合作。例如,Git使用子命令進行不同的操作(如git clone或git commit),遵循通用的標志(如-v或-verbose),提供有用的反饋和建議(如git status或git help),并支持配置文件和環(huán)境變量。npm:一個JavaScript的包管理器,讓你為你的項目安裝和管理依賴性。例如,NPM使用一個簡單的命令結構(npm[args]),提供一個簡潔的初始幫助信息,有更詳細的選項(npm help npm),支持標簽完成和合理的默認值,并允許你通過配置文件(.npmrc)自定義設置。八. 小結

在這篇文章中,我們系統(tǒng)說明了如何編寫出遵循命令行接口指南的Go CLI程序。

你學習了如何設置Go環(huán)境、設計命令行接口、處理錯誤和信號、編寫文檔、使用各種工具和軟件包測試和發(fā)布程序。你還看到了一些代碼和配置文件的例子。通過遵循這些準則和最佳實踐,你可以創(chuàng)建一個用戶友好、健壯和可靠的CLI程序。

最后我們回顧了clig.dev的指南要點,希望你能更深刻理解這些要點的含義。

我希望你喜歡這篇文章并認為它很有用。如果你有任何問題或反饋,請隨時聯(lián)系我。編碼愉快!

注:本文系與New Bing Chat聯(lián)合完成,旨在驗證如何基于AIGC能力構思和編寫長篇文章。文章內容的正確性經(jīng)過筆者全面審校,可放心閱讀。

本文轉載自微信公眾號「 白明的贊賞賬戶」,可以通過以下二維碼關注。轉載本文請聯(lián)系 白明的贊賞賬戶公眾號。

關鍵詞:

相關新聞

Copyright 2015-2020   三好網(wǎng)  版權所有 聯(lián)系郵箱:435 22 640@qq.com  備案號: 京ICP備2022022245號-21
97香蕉久久国产超碰| 91精品视频在线观看视频| 美女激情久久久久久久| 美女妩媚午夜诱惑网站| av大尺度一区二区三区| 国产av高清二区三区| 国产激情在线观看一区二区三区| 高潮喷水一区二区三区| 四虎国产精品国产精品国产精品| 在线观看中文字幕视频成人| 日韩最近中文在线观看| 中文字幕在线观看亚洲情色| 人妻激情偷乱一区二区三区av| 午夜情色一区二区三区| 在线视频自拍第三页| 美女扒开逼逼给你看| 99福利一区二区视频| 4438全国成人免费视频| 亚洲成人中文无码在线| 日本黄色一级电影网址| 91精品91久久久久| 欧美区一区二区三视频| 欧美区日本区国产区| 在线免费视频999| 日本高清 中文字幕| 大香蕉在线欧美在线视频| 欧美亚洲愉拍一区二区三区| 亚洲美女露隐私av一区二区精品 | 中文字幕中文字幕在线中…一区| 中文字幕熟女人妻丝袜丝在线| 天天在线播放日韩av| 黄色av网址在线播放| 天天操天天干加勒比久久| 亚洲制服丝袜网站中文字幕| 99久9在线视频播放| 欧美日韩精品aaa| 日韩国产欧美一区二区三区粉嫩| 美女精品久久久久久久久| 日本一道中文字幕99| 青娱乐不卡视频在线| 91污污在线观看视频| 婷婷综合缴情亚洲五月伊人| 国内自拍第一区二区三区| 中文乱码字幕人妻熟女人妻| 亚洲韩精品一区二区三区| 2020国产成人精品视频| 视频在线+欧美十亚洲曰本| 亚洲中文字幕在线av| 男女插鸡巴视频软件| 综合久久伊人久久88 | 美女欧美视频在线观看免费| 自拍偷自拍亚洲精品10p| 超碰在线观看97资源| 一区二区三区四区久久久久韩日| 自拍偷拍 亚洲性图 欧美另类 | 午夜福利在线不卡视频| 自拍偷拍 亚洲性图 欧美另类| 国产 亚洲 欧美 自拍| 亚洲午夜精品视频节目| 中文字幕国产一区在线视频| 女人高潮潮呻吟喷水网站| 日本清纯中文字幕版| 亚洲|久久久久久一二三区丝袜| 欧美男女一区二区三区| 欧美色视频网址大全| 92麻豆一区二区三区| a级片特黄免费看| 大成色亚洲一二三区| 最新日韩中文字幕免费在线观看| 91麻豆精品国产在线| 国产视频成人一区二区| 亚洲熟妇在线视频观看| 亚洲成人av在线一区二区| 中文字幕日本一二三区| 日韩成人免费观看电影| 亚洲成人自拍av在线| ass亚洲熟女ass| 亚洲乱码国产乱码精品精视频| 久久99热精品免费观看视| 夜夜爽夜夜操夜夜爱| 亚洲女人自熨在线视频| 免费在线观看视频啪啪| 999国产精品视频免费看| 日本四十路人妻熟女| 96在线观看免费播放| 中文字幕丰满子伦无码专区| 国产精品久久久久久成人久| 亚洲综合熟女乱中文| 大片a免费观看在线视频观看| 亚洲人妻系列在线视频| 国产视频成人自拍蝌蚪视频| 一区二区三区午夜福利在线| 婷婷一区二区三区五月丁| 女人的天堂av在线网| 97精品久久久久久无码人妻| 99热99这里免费的精品| 中文字幕人妻一区二区视频系列 | 免费看日韩黄视频在线观看| 亚洲熟女乱色一区二区三区视频| 亚洲成人中文无码在线| 午夜宅男电影av网站| 午夜夫妻性生活视频| 色狠狠色综合久久久绯色| 亚洲制服丝袜资源网| 无人区一码二码三码区别在哪 | 伊人久久综合国产精品| 精品人妻在线激情视频| 核xp工厂精品久久亚洲| avgo成人短视频| 日韩成人免费观看电影| 欧美色区国产日韩亚洲区| 97精品久久久久久无码人妻 | 老司机伊人99久久精品| 国产av剧变态维修工虐杀美女| 欧美黄色性视频网站| 呻吟求饶的人妻中文字幕| 国产在线观看av一区| 少妇被粗大的猛进69视频| xxxx69在线观看视频| 91精品麻豆91夜夜骚| 精品国产人伦一区二区三区| 日本东京热视频欧美视频| 日本午夜福利免费在线播放| 欧美一级特黄大片做受99| 蜜乳av一区二区三区免费观看| 青青青在线视频免费播放| 夜夜人人干人人爱人人操| 亚洲天堂色综合久久| 午夜8050免费小说| 久久亚洲国产成人精品麻豆 | 福利在线国产小视频| 亚洲免费午夜污福利| 超碰在线免费观看视频97| 99久久国产精品免费热| 欧美视频免费观看777| 欧美日韩久久丝袜在线| 成人免费视频现网站99在线观看| 老熟女xxxⅹhd老熟女性| 五月天男人的天堂中文字幕| 亚洲成a人77777| 中日韩又粗又硬又大精品| 老司机免费视频福利0| 国产av高清二区三区| 中文字幕亚洲乱码精品无限| 老牛影视在线一区二区三区| 久久99热精品免费观看视| 天天干夜夜撸天天操| 在线看日韩av不卡| 伊人精品久久一区二区| 99免费观看在线视频| 一区二区三区午夜福利在线| 大乳人妻一区二区三区| 国产成人深夜福利短视频99| 91精品国产欧美在线| 97精品国产91久久久| 大香蕉尹人在线最新| 亚洲熟女一区二区六区| 四虎国产精品国产精品国产精品 | 亚洲一级熟妇丰满的女人| 久久综合狠狠综合久久综| 天天干天天色综合久久| 顶级欧美色妇4khd| 蜜乳视频一区二区三区| 久久99精品热在线观看| 麻豆白洁少妇在线播放| 老牛影视在线一区二区三区| 中文字幕人妻一区色偷偷久久| 天天弄天天草天天日天天| 女人的天堂 av在线| 午夜92福利1000| 天天操天天日天天碰| 亚洲熟女乱一区二区精品成人| 久久久视频在线播放| 东北老女人熟女啪啪视频| 91亚洲国产成人久久精品| 日本少妇熟女乱码一区二区| 午夜久久久久久av五月| 亚洲欧美成人激情在线| 青青在线免费手机播放视频| 亚洲激情视频在线观看免费| 免费在线观看亚洲福利| 啊~插得好快别揉我胸了视频| 免费啪啪啪网站在线观看| tushy一区二区三区视频| 日韩男女视频网站在线观看| 亚洲国产精品久久久久久无码| 欧美不卡一二三区精品| 美女精品久久久久久久久| 国产激情免费在线视频| 在线观看2022av| 男人和女人的逼视频| 日本熟妇乱妇熟色视频| 中文字幕在线免费观看成人| 快色视频在线观看免费| 国产精品久久人人添| 91系列视频在线播放| 日韩激情文学在线视频| 日韩欧美黄色免费网站| 色视频在线播放免费观看| 亚洲成年人精品国产| 国模伊人久久精品一区二区三区| 亚洲中文字幕在线av| 在线观看视频免费一区二区三区| 91亚洲精品久久蜜桃| 亚州av嫩草av极品在线观看| 在线看日韩av不卡| 国产精品久久久99| 日本人妻熟妇丰满成熟HD系列| 青青青国产精品视频| 欧美性感美女热舞视频| 午夜3p福利视频合集| 国产高清自拍偷拍在线| 午夜福利在线不卡视频| 绿巨人浩克在线视频观看 | 亚洲欧美成人激情在线| 日本国产亚洲欧美色综合| 亚洲成人,国产精品| 又爽又粗又猛又色又黄视频| 裸日本资源在线午夜| 欧美亚洲另类精品第一页| 69国产精品成人aaaaa片| 户外露出视频在线观看| 河北全程露脸对白自拍| 看女人大BB群伦交| 欧美成人性生活视频播放| 偷拍熟女大胆免费视频| 亚洲成人偷拍自拍在线| 亚洲欧美小说中文字幕| 国产精品美女免费视频观看 | 中文字幕熟女人妻一区| 9420高清视频在线观看国语版| 4日日夜夜精品视频免费| 三区美女视频在线观看| 日本a级2020在线观看 | 亚洲全国精品女人久久久| 老司机免费视频福利0| 日韩成人精品久久久免费看| 欧美一级aaaaaaa片| 亚洲一区二区精品三区视频| 五月天男人的天堂中文字幕| 大尺度久久久久久久| 青娱乐免费最新视频| 999精品视频免费在线观看| 天天夜夜久久精品综合| 亚洲少妇色小说综合| 天天在线播放日韩av| 99热在线只有的精品| 日本男女免费福利视频| 最新日韩中文字幕啪啪啪| 天海翼亚洲一区在线观看| 妈妈的朋友2中文字幕在线| 顶级欧美色妇xxxx| 在线免费观看欧美小视频| 玖玖资源站在线观看亚洲| 国产成人情侣av在线| 老熟妇一区二区三区v∧88| 熟女阿高潮合集一区二区| 乌克兰美女操逼高清内射视频| 亚洲gay视频在线观看| 亚洲码av一区二区三区| 一区二区三区四区 在线播放| 无码精品黑人一区二区老人 | 青青青在线观看国产| 日韩欧美中文字幕老司机三分钟| 国际精品熟女一区二区| 欧美肥妇久久久久久| 在线视频国产精品欧美| 夜夜爽夜夜操夜夜爱| 可以直接看av网站| 天天做天天日天天搞| 夜夜操夜夜爱夜夜摸| 黑川堇人妻88av| 三级欧美日韩一区二区三区| 一区二区三区五区六区| 欧美日韩高清片在线观看| 亚洲国产精品一区51动漫| 欧美日韩黄片免费在线观看| 大尺度av毛片在线网址| 汤姆提醒30秒中转进站口| 久久久久久a女人处女| 中文字幕 一区二区在线观看| 最新国产精品拍在线观看| 夜夜人人干人人爱人人操| 日本一区二区三区的资源| 日本一区二区三区的资源| 日本成年视频在线免费观看| 亚洲码av一区二区三区| 国产精品剧情av在线播放| 欧美区日本区国产区| 久久久久久久岛国免费观看| 欧美日本国产一区二区| av人摸人人人澡人人超碰小说| 日韩一级视频一区二区三区| 60路70路日本熟妇| 欧美最新一区二区三区| 最近最新欧美日韩精品| 久久精品四虎夜夜拍拍拍| 老司机免费视频福利0| 亚洲人妻系列在线视频| 国内销魂老女人老泬| 啊不行啊操逼好爽大鸡吧视频| 久久人妻人人草人人爽| av在线播放观看h| 国产精品 亚洲欧美 自拍偷拍| 日本熟妇乱妇熟色视频| 三级欧美日韩一区二区三区 | 亚洲三级综合在线观看| 黄色片免费国产精品| 69视频在线精品国自产拍| 成人av中文字幕在线看| 成人免费电影二区三区| jiee日本美女视频网站| 97成人老师在线视频| 麻豆白洁少妇在线播放| 国产av高清二区三区| 91 精品视频在线看| 欧美三区四区在线视频| 91色乱一区二区三区| 91人妻人人做人人爽高清| 深夜福利免费观看在线看| 亚洲午夜精品视频节目| 亚洲国产精品一区二区第二页| 久久久久久高清一区| 亚洲gay视频在线观看| 老色鬼精品视频在线观看播放| 亚av一二三在线观看| 欧美色视频网址大全| 全彩漫画口工18禁| 在线 激情 亚洲 视频| 欧美人与动欧交视频| 中文字幕在线免费观看成人| 欧美亚洲国产一区二区| 亚洲精品9999蜜桃| 久久精品四虎夜夜拍拍拍| 亚洲乱码av一区二区蜜桃av| 美国十次了亚洲天堂网国产| 青娱乐免费视频一二三| 最新国产精品拍在线观看| 国产午夜羞羞一区二区三区| 久久人人爽人人爽人人av东京热| 欧美情色av在线观看| 亚洲成a人片777777张柏芝| 亚洲另类欧美综合久久| 91偷拍被偷拍在线播放| 97精品国产91久久久| 91精品国产综合99| 99久久国产精品免费消防器材| 国色天香一二三期区别大象| 夏目彩春av在线看| 川上优所有中文字幕在线| 91精品夜夜夜一区二区| 国语精品视频自产自拍| 四虎精品久久免费最新| 日韩免费黄色片在线观看| 91美女在线观看视频| a级黄片免费观看| av在线播放观看h| av中文字幕国产精品| 亚洲国内精品久久久久久久| 午夜五十路久久福利| 国产av精品一区二区三区久久| 亚洲综合天堂av网站在线观看| 日本福利片在线播放| 亚洲欧美小说中文字幕| 放荡人妻极品少妇全集| 青娱乐免费视频一二三| 亚洲欧美国产一本综合首页| 青青青在线视频免费播放| 亚洲色视频在线播放网站| 亚洲综合熟女乱中文| 亚洲综合色一区二区三区| 99久久国产精品免费热| 亚洲一区视频中文字幕在线播放| 偷拍熟女大胆免费视频| 日韩av熟妇在线观看| 精品国模一区二区三区欧美| 欧美一区二区三区爽爽| 亚洲成人 国产精品| 亚洲制服丝袜在线看| 最近最新最好看的中文字幕| 亚洲av中文无码网站| 日本少妇人妻中文在线| 人妻色综合aaaaaa网| 97人妻av人人澡人人爽| 天天夜夜久久精品综合| 欧美视频亚洲视频在线| tobu8日本高清| 97香蕉久久国产超碰| 亚洲精品9999蜜桃| 9999久久久久老熟妇二区| 最新国产午夜激情视频| 日本一区二区三区的资源| 中文字幕在线免费观看人妻| 亚洲乱熟女一区二区三区影片| 伊人综合在线视频免费观看| 亚洲最大的自拍偷拍网| 91精品国产欧美在线| 亚洲色视频在线播放网站| 欧美大鸡吧男操女啊啊啊视频| 日本欧美高清在线观看视频| 免费在线观看视频啪啪| 999国产精品视频免费看| 国产中文亚洲熟女日韩| 99久久免费播放在线观看视频| 黑鸡巴肏少妇逼视频| 熟妇人妻丰满久久久久久久| 免费在线小视频你懂的| 韩国一级片最火爆中文字幕| 538欧美在线观看一区二区三区| 一区二区三区高清视频3| 黄片操操操操操操c| 人妻中文字幕亚洲在线| 人人妻人人狠人人爽| 亚洲国产日韩欧美一区二区三区,| 欧美黑人1区2区3区| jiee日本美女视频网站| 欧美成人红桃视频在线观看| 亚洲a级视频在线播放| 污视频在线观看地址| av在线观看视频免费| 精久久久久久久久久久久| 亚洲另类欧美综合久久| 欧美黑人性猛交小矮人| 最近中文字幕免费视频一| 自拍偷拍色图亚洲天堂| 天堂一区二区三区在线等| 女生裸体视频免费网站| 强乱人妻中文字幕日本| 国产一区二区三区四区精| 欧美情色av在线观看| 婷婷六月天在线视频| 高清欧美色欧美综合网站| 黄很色很在线免费视频网站| 日本一本午夜在线播放| 亚洲熟女少妇中文字幕系列| 夫亡人妻被强干中文字幕| 亚洲欧美成人激情在线| 日本高清激情乱一区二区三区| 亚洲av日韩久久网站| 久久久西西gogo日本美女人体| 久久久精品人妻无码专区不卡| 又粗又长又硬又黄又爽| 得得爱在线视频观看| 绿巨人浩克在线视频观看 | 天天干夜夜爽狠狠操| 亚洲一区二区三区无码在线| 最新国产精品久久精品app| 神马不卡视频在线视频| 鸡巴插进美女的嫩小穴视频| 蜜桃臀少妇白色紧身裤细高跟| 自拍偷自拍亚洲精品10p| 91超碰国产在线观看| 桃色成人开心激情网| 五十岁熟女高潮喷水| 国产极品气质外围av| 玖玖资源站在线观看亚洲| 夏目彩春av在线看| tobu8日本高清| 久久99精品热在线观看| 国产精品久久久久精品三级18| 亚洲熟妇在线视频观看| 干逼又爽又黄又免费的视频| 天堂网免费在线电影| 欧美极品少妇高潮喷水| 伦理在线观看未删减中文字幕| 午夜亚洲国产精品中字| 亚洲国产综合久久精品| 少妇被粗大的猛进69视频| 搞乱在线在线观看视频| 熟女人妻少妇一区二区| 日本福利视频网站导航| 久久久人妻免费视频| 国内自拍第一区二区三区| 美国伦理片午夜理论片| 中文字幕av人妻一区二区三区| 日本一区二区三区调教性奴视频| 999久久久人妻精品一区| 果冻麻豆一区二区三区| 亚洲欧美不卡专业视频| 污视频在线观看地址| 亚洲精品1卡2卡3卡| 91色乱一区二区三区| 熟妇高潮久久久久久久| 人妻视频网站快射视频网站| 亚州av嫩草av极品在线观看| 免费看日韩黄视频在线观看| 亚洲乱熟女一区二区三区影片| 成年人黄色日本视频| 国产av啊啊啊啊啊啊啊| 色欲AV蜜桃一区二区三| 最近最新最好看的中文字幕| 欧美人与动欧交视频| 91精品国产综合99| 亚洲av在线免费播放| 男人的天堂av中文字幕| 亚洲精品1卡2卡3卡| 黑人和日本人av一区二区| 污网址在线观看视频| 在线看的免费网站黄| 亚洲一区二区在线激情| 老司机伊人99久久精品| 在线能看视频你懂的| 久久人妻诱惑我视频| 青青青免费手机视频在线观看| 黑人大吊大战亚洲女人。| 中文字幕日本一二三区| 可在线免费观看av| 亚洲av综合av一去二区三区| 一区二区三区资源视频| 91系列视频在线播放| 亚洲综合第一区二区| 日本福利网站一区二区| 情趣视频在线观看91| 视频在线+欧美十亚洲曰本| 四虎国产精品国产精品国产精品| 亚洲免费在线不卡视频| 国长拍拍视频免费孕妇| 汤姆提醒30秒中转进站口| 国产精品中文字幕丝袜| 玖玖资源站在线观看亚洲| 在线观看网站伊人网| 国产欧美福利在线观看| 中文字幕日韩人妻在线三区| 老牛影视在线一区二区三区 | 东京热日韩av在线| 网站在线观看蜜臀91| 欧美大胆a级视频秒播| 99在线视频精品观看高| 91中文字幕视频网站| 操死你美女在线视频| 欧美啪啪一区二区三区| 顶级欧美色妇4khd| 99久久国产精品免费热| 国产av剧变态维修工虐杀美女| 女女抠逼白虎白丝袜| yy4080黄色片| 女生抠逼自慰啊啊啊啊啊啊啊下载| 国产激情一区二区视频| 熟女人妻少妇一区二区| 黑鸡巴肏少妇逼视频| 一区二区欧美 国产日韩| 亚洲色视频在线播放网站| 欧美大胆a级视频秒播| 亚洲理论在线a中文字幕97| 亚洲国产美女主播在线观看| 2019年中文字幕在线播放视频| 中文字幕在线免费观看人妻| 快进来插我的逼嗯啊视频| 桃色成人开心激情网| 亚洲熟女在线免费观看| xxxx69在线观看视频| 69久久夜色精品国产69乱电影| 天天透天天舔天天操| 99精品久久99久久久久一| 免费在线观看亚洲福利| 激情久久在线免费观看视频| 亚洲另类欧美综合久久| 日本不卡 中文字幕| 夏目彩春av在线看| julia人妻av一区二区三区| 日本高清在线观看不卡视频| 99热99这里免费的精品| 自拍偷拍 亚洲性图 欧美另类| 亚洲人成大片在线观看| 琪琪日本福利伦理视频| 97视频538在线观看| 青青操天堂在线观看视频| 制服丝袜 中文字幕 日韩| 97视频538在线观看| 51vv精品视频在线观看| 99999久久久精品| 成年人黄色日本视频| 女女抠逼白虎白丝袜| 91人妻人人爽色啊啊啊| 第一福利视频在线观看| 污视频在线观看地址| 天天操天天干天天舔天天| 久久久久久久久久久久久国产| 精品国产人伦一区二区三区| 黄色av 在线观看| 日本少妇人妻凌辱在线| 天海翼亚洲一区在线观看| 搞乱在线在线观看视频| 99在线视频精品观看高| 欧美日韩黄片免费在线观看| 九一精品人妻一区二区三区| 欧美成人短视频在线播放| 在线观看中文字幕精品av| 亚洲天堂av最新在线| av一区二区三区蜜桃| 91久久久久久最新网站| 91偷拍被偷拍在线播放| 少妇被粗大的猛进69视频| 在线人成视频免费观看尤物| 亚洲自拍偷拍一区二区中文字幕| 欧美啪啪一区二区三区| 中文字幕福利视频第四页| 奇米网首页神马久久| 欧美性感美女热舞视频| 亚洲av在线免费播放| av无限看熟女人妻另类av| 亚洲一区二区精品三区视频| 午夜野花视频在线观看| 熟妇人妻av无码中文字幕| av福利免费体验观看| 午夜精品老牛av一区二区三区| 欧美成人少妇人妻精品| 在线观看中文字幕少妇av| 欧美日韩黄片免费在线观看| 久久久久国产精品二区| 黑鸡巴肏少妇逼视频| 青青国产95免看视频| 99女福利女女视频在线播放| 亚洲 偷拍 自拍 欧美| 国产,亚洲,欧美综合| 亚洲图片另类综合小说| 人妻中文字幕亚洲在线| 日韩一区二区在线播放观看| 呻吟求饶的人妻中文字幕| 天天想要天天操天天干| 国产精品内射婷婷一级| avjpm亚洲伊人久久| 亭亭五月天在线观看| 青青青在线视频免费播放| 中文字幕 人妻 熟女| 国产av嗯嗯啊啊av| 国产成人av在线你懂得| 裸日本资源在线午夜| 国产剧情av在线免费观看| 欧美一区日韩二区三区四区| 在线 激情 亚洲 视频| 欧美久久蜜臀蜜桃资源吧| 在线视频国产精品欧美| 一区二区三区 国产日韩欧美| 偷拍欧美日韩另类图片| 1区3区4区产品乱入视频| 69国产在线视频网站| 亚洲午夜精品视频节目| 在线视频国产精品欧美| 色就色综合偷拍区欧美在线| 久久99国产中文丝袜| 美女网站视频久久精品| 日韩女同与成人用品电影免费看| 青青青在线视频观看97| 久久午夜免费鲁丝片| 亚洲av日韩久久网站| xxxx69在线观看视频| 综合激情网,激情五月| xxnxx国产美女| 国产视频1区2区3区| 亚洲黄色成人一级片| 九一精品人妻一区二区三区| 丰满少妇高潮喷水视频| 亚洲自拍偷拍av在线| 天天色天天射天天日天天干| 丝袜美女诱惑佐佐三上| www一区二区91| 成人人妻h在线观看| 国产黄色主播网址大全在线播放| 欧美精品熟妇免费在线| 天天摸天天舔天天操天天日| 亚洲国产精品久久久久久无码| 在线 激情 亚洲 视频| 精品欧美乱码久久久| 看女人大BB群伦交| 美女扒开逼逼给你看| 青青草原在线播放日韩| 国产精品蝌蚪自拍视频| 亚洲色大WWW永久网站| 日本有码精品一区二区三区| 亚洲成人欧洲成人在线| 国模伊人久久精品一区二区三区| 港台美女明星av天堂| 天天弄天天草天天日天天| 色噜噜噜噜色噜噜色合久一| 青青在线视频看看| 91精品国产欧美在线| 亚洲综合另类欧美久久| 高潮喷水一区二区三区| 天天爽天天操天天插| 日韩久久九九精品视频| 精品久久久久久久久久久久久 | 欧洲亚洲一区二区三区四区| 亚洲第一中文字幕成人| 丰满人妻熟女aⅴ一区| 香港日本台湾经典三级| 首页欧美日韩中文字幕| 中文字幕在线观看亚洲情色| 亚洲综合色一区二区三区| 少妇熟女天堂网av| 99久久久久久久久久久久久| 啪啪啪网站免费在线看| jiee日本美女视频网站| 天天日 天天舔 天天射| 中文字幕欧美一区二区视频| 欧美大鸡吧男操女啊啊啊视频| 在线观看免费啪啪啪| 青娱乐免费视频一二三| 女生裸体视频免费网站| 伊人免费观看视频一| 亚洲成人三级黄色片| 久久热在线免费观看| 四虎精品久久免费最新| 国产福利一区二区三区在线观看| 最近日韩免费在线观看| 黑人巨大精品一区二区在线| 92在线播放观看视频| 欧美成人区一区二区三| 亚洲国产精品 久久久| 久久中文字幕av一区二区 | 国产女主播在线观看一区| 丰满少妇_区二区三区| av天堂a亚洲va天堂va里番| 不卡一区二区视频在线| 伊人网国产在线播放| 欧美激情视频第一页| 91香蕉国产亚洲一二三区| 亚洲第一中文字幕成人| 美女网站视频久久精品| 亚洲精品国产99999| 人妻色综合aaaaaa网| 中文字幕日韩首页欧美在线激情 | 川上优所有中文字幕在线| 久久久久久a女人处女| 最新福利二区三区视频| av在线播放观看h| 天天操,天天射,天天爽| 国产成人在线观看hd| 我爱搞在线观看视频| 亚洲av日韩久久网站| av激情四射五月婷婷| 偷拍熟女大胆免费视频| 91麻豆精品国产在线| 蜜臀一区二区日韩美女少妇视频| jizzjizz国产精品传媒| 午夜精品老牛av一区二区三区| 久久精品国产亚洲av清纯| 国产极品气质外围av| 手机看片福利一区二区三区四区 | 中日韩又粗又硬又大精品| av在线男人的天堂亚洲| 欧美区日本区国产区| 中出小骚货在线观看| 操人妻人妻天天爽天天偷| 日韩A级毛片免费视频| 美女黄色啊啊啊啊视频| 熟女一区二区三区综合| 日韩在线 中文字幕| 青娱乐不卡视频在线| 国产视频成人自拍蝌蚪视频| 亚洲午夜熟女在线观看| 上床啪啪啪免费视频| 丰满放荡熟妇在线播放| 最近最新最好看的中文字幕 | 一区二区三区资源视频| 亚洲一区亚洲二区成人福利| 日本欧美视频在线免费| 蜜乳视频一区二区三区| 亚洲中文字幕在线视频观看二区| 天天想要天天操天天干| 日韩欧美一区二区三区免费看 | 91激情四射婷婷综合| 最新中文字幕久久久久| 亚洲第一成年偷拍视频| 亚洲AV无码一二三四区在线播放| 91久久久久久最新网站| 黄色大片一级老太太操逼| 不卡在线一区二区三区| 日韩国产欧美一区二区三区粉嫩 | 在线观看中文字幕少妇av| 欧美日韩久久丝袜在线| 东北老女人熟女啪啪视频| 日本电影一级人妻在线播放四区| 加勒比东京热绿帽人妻多人操 | 91亚洲最新蜜桃在线| 欧美成人屋影院在线视频观看| 日韩成人精品久久久免费看| 最新国产精品久久精品app| 亚洲全国精品女人久久久| 亚av一二三在线观看| 狠狠操狠狠操狠狠插| 午夜情色一区二区三区| 青青青在线视频免费播放| 午夜精品视频免费观看| 一区二区三区四区久久久久韩日| 天天操天天干加勒比久久| 日韩精品视频一区二区三区在线| 日本福利片在线播放| 亭亭五月天在线观看| 欧美成人红桃视频在线观看| 搞乱在线在线观看视频| 中文字幕福利视频在线一区| 男女真人做带声音视频图片| 成人大片男人的天堂| 亚洲欧美日韩电影一区| 亚洲欧美国产一本综合首页| 亚洲中文字幕最新地址| 国产女主播在线观看一区| 亚洲熟妇在线视频观看| 69av精品国产探花| 一区二区三区国产在线成人av| 欧美啪啪一区二区三区| 69av精品国产探花| 一区二区在线观看视频网站| 天天色天天射天天日天天干| 人妻超清中文字幕在线乱码| 玖玖资源站在线观看亚洲| 欧美一区二区播放视频| 亚洲成人 国产精品| jizzjizz国产精品传媒| 夫妻黄色一级性生活片| 成人18禁高潮片免费日本| 色网站在线观看免费| 久久视频 在线播放| 一区二区在线观看视频网站| 成人18禁高潮片免费日本| 琪琪日本福利伦理视频| 日韩在线 中文字幕| 凹凸视频一区二区在线观看| 性色蜜桃臀x88av天美传媒| 中文字幕人妻一区色偷偷久久 | 美国男的操女孩的小嫩逼| 18禁网站在线点击观看| 青娱乐这里只有精品| 国产av在线免费视频| 亚洲三级综合在线观看| 午夜在线观看一级毛| av里面的动作是真进去吗| 蜜臀一区二区日韩美女少妇视频| 亚洲宅男噜噜噜66在线观看| 大香蕉在线欧美在线视频 | 久久人妻诱惑我视频| 日韩av水蜜桃一区二区三区| 无人区一码二码三码区别在哪 | 日本清纯中文字幕版| 伊人免费观看视频一| 欧洲精品在线免费观看| 亚洲成人激情在线综合| 久久久亚洲熟女一区二区| 人妻女侠被擒受辱记| 国产福利三级在线观看| 99久久碰碰人妻国产| 91佛爷视频在线观看| 欧美操大黑鸡巴视频在线观看| 夜夜操夜夜爱夜夜摸| 68福利精品在线视频| 久久久精品人妻无码专区不卡| 91青青青国产免费高清 | 日本欧美亚洲国产啊啊啊| 亚洲gay视频在线观看| 亚洲精品中文字幕手机在线免费看| 丰满少妇高潮喷水视频| 亚洲乱熟女一区二区三区影片| 日本一区二区三区区别| 国产人妻熟女ⅹxx丝袜| 亚洲国产精品自产拍在线观看| 2019年中文字幕在线播放视频| 丰满少妇高潮喷水视频| 亚洲欧洲无码一区2区无码| 偷拍熟女大胆免费视频| 51vv精品视频在线观看| 青青青免费手机视频在线观看| 黄很色很在线免费视频网站| 在线免费观看视频18| 美国男的操女孩的小嫩逼| 亚洲人妻系列在线视频| 交换的一天中文字幕在线视频| 亚洲天堂av最新在线| 日本亚洲午夜福利一区二区三区| 欧美日韩综合精品无人区| 凹凸视频一区二区在线观看| 精品av天堂毛片久久久| 亚洲一区视频中文字幕在线播放 | 成人午夜av电影网| 亚洲黄色成人一级片| aaaa级少妇高潮在线观看| 国产激情视频在线观看的| 最新福利二区三区视频| 快进来插我的逼嗯啊视频| 亚洲成a人77777| 人人妻人人狠人人爽| 午夜在线观看一级毛| 九九九九九久久久国产| 2020精品视频在线| 开心五月综合激情婷婷| 亚洲欧美综合另类最新| 一区二区三区四区久久久久韩日| 色视频在线播放免费观看| 2020国产激情视频在线观看| 2020国产激情视频在线观看| 亚洲综合天堂av网站在线观看| 欧美久久一区二区伊人| 一二区二区不卡视频| 手机视频在线观看一区| 亚洲高清一区二区三区久久| 美女妩媚午夜诱惑网站| 夜夜爽夜夜操夜夜爱| 手机看片福利一区二区三区四区| 9久re热视频在线精品| 男人资源站中文字幕| 青青操天堂在线观看视频| 青青免费观看视频| 青青操久久综合激情| 9久re热视频在线精品| 中出小骚货在线观看| 插鸡视频免费网站在线播放| 亚洲唯美激情综合四射| 日韩久久不卡免费视频| 色狠狠色综合久久久绯色| 熟女一区二区三区综合| 精品一区二区三区喷水内射高潮| 熟女人妻少妇一区二区| 熟女国内精品一区二区三区| 自拍偷拍亚洲综合第一页| 女人的天堂av在线网| 欧美男男在线观看视频网站| 国产自拍偷拍视频在线免费观看| 蜜桃臀av在线一区二区| 精产国品一二三产品区别97 | 中文字幕人妻一区色偷偷久久 | 青娱乐不卡视频在线| 熟女人妻少妇一区二区| 女生裸体视频免费网站| 久久久亚洲熟女一区二区| 天天插天天透天天爽| 亚洲色大WWW永久网站| 亚洲成人,国产精品| 午夜国产成人精品视频观看| 视频在线+欧美十亚洲曰本| 天天曰天天摸天天爽| 97精品视频,全部免费| 久久久久高潮白浆久久| 免费中文三级在线观看| 日日夜夜免费视频精品| 自拍偷拍 亚洲性图 欧美另类| jandara在线观看| 日本少妇三级交换做爰做| 日本在线免费观看国产精品| 九色91操最新在线观看网址| 青青青青午夜手机国产视频| 最新日韩中文字幕免费在线观看| 夫妻黄色一级性生活片| 特级aaaaa黄色片| 午夜8050免费小说| 夜夜人人干人人爱人人操| 亚洲黄色成人一级片| 超碰在线pro中文字幕| 天天干夜夜撸天天操| 亚洲永远av在线播放| 污视频在线观看地址| 亚洲精品国产99999| 人妻超清中文字幕在线乱码| 日韩人妻精品久久久久| 在宿舍强奷两个清纯校花| 日本高清有码在线视频| 美女把腿张开给男的捅| 男插女视频大全免费| 乱子伦国产一区二区三区| 久久亚洲国产成人精品麻豆| 国际日韩日韩日韩日韩日韩| 天天日 天天舔 天天射| 久久内射天天玩天天懂色| 一区二区三区资源视频| 奇米网首页神马久久| 中文字幕日韩人妻在线三区| 在线播放 日韩 av| 欧美区日本区国产区| 国产精品国产三级在线高清观看| 日韩成人精品久久久免费看| 国产最新av在线免费观看| 亚洲综合天堂av网站在线观看| 91超碰九色porny| 亚洲制服丝袜美腿在线| 日本人妻熟妇丰满成熟HD系列 | 日本欧美国产在线一区| 强乱人妻中文字幕日本| 一级毛片特级毛片免费的| 五月的婷婷综合视频| 欧美亚洲另类精品第一页| 日本成人福利电影网| 欧美国产精品久久久免费| 欧美日韩黄片免费在线观看| 最新激情中文字幕视频| 欧美日韩福利视频网| 一区二区三区四区视频精品免费| 快使劲弄我视频在线播放| 福利视频导航在线观看| 亚洲熟妇丰满多毛xxxx网站| 午夜野花视频在线观看| 亚洲综合另类欧美久久| 午夜92福利1000| 免费在线观看黄色小网站| 天天搞天天操天天干| 亚洲欧洲无码一区2区无码| 日本高清在线观看不卡视频| 天天干天天操天天要| 国产视频成人自拍蝌蚪视频| 日本少妇人妻中文在线| 九九热在线精品播放| 92麻豆一区二区三区| 少妇被粗大的猛进69视频| 日本成年视频在线免费观看| 精品国产污污污污免费观看| 交换的一天中文字幕在线视频| 亚洲制服丝袜美腿在线| 国内精品一区二区2021在线| 在线 激情 亚洲 视频| 日韩久久九九精品视频| 大屁股熟女一区二区视频| 精品人妻在线激情视频| 日韩免费黄色片在线观看| 99色在线观看免费观看| 亚洲熟女一区二区六区| 91超精品碰国产在线观看| 欧美熟女xx00视频| 自拍丝袜国产欧美日韩| 欧美黑人性猛交小矮人| avjpm亚洲伊人久久| 91久久久久久最新网站| 中文字幕日本一二三区| 中文字幕一区二区三区久久久| 日韩av水蜜桃一区二区三区| 一区二区三区资源视频| 黑人大吊大战亚洲女人。| 久99久视频免费观看中文字幕| 久久精品四虎夜夜拍拍拍| 人妻中文字幕亚洲在线| 午夜精品久久久久久久久久蜜桃| 50熟妇一区二区三区| 久久午夜免费鲁丝片| 欧美插插插插插插| 亚洲中文字幕在线视频观看二区| 不卡一二三区别视频| 黄色片黄色片黄色片黄色片黄色| 久久精品国产亚洲av热软件| 抽插小穴啊啊啊视频| 色视频免费观看网址| 大鸡扒操大逼大片免费关看| 日韩久久不卡免费视频| 欧美精品999不卡| 欧美久久蜜臀蜜桃资源吧| 国产在线小视频一区二区 | 欧美成人红桃视频在线观看| 国产在线观看一区二区三区四区 | 午夜呻吟亚洲精品中文字幕在上面| 中文字幕国产一区在线视频| 一区二区在线观看视频网站| av丝袜免费在线观看| 国产不卡免费在线观看| 全球高清中文字幕av| 99精品久久精品一区二区| 啪啪啪网站免费在线看| 国产成人情侣激情视频| 亚洲制服丝袜美腿在线| 最新久久这里只有精品| av在线播放观看h| ass亚洲熟女ass| 天天插天天干天天狠| 中文字幕观看中文字幕免费| 大乳丰满人妻中文字幕韩国hd| 手机看片福利一区二区三区四区| 美女张开腿给男人桶爽的软件| 中文在线字幕免费观看日韩视频 | 最新久久这里只有精品| 亚洲国产精品自产拍在线观看| 亚洲欧美另类丝袜另类自拍| av里面的动作是真进去吗| 中文字幕 一区二区在线观看| 国产成人91色精品免费看片| 最新免费在线观看污视频| 天天干天天弄天天日| 久久av色噜噜ai换脸| 夜夜操天天干夜夜操| 久久亚洲国产成人精品麻豆 | 亚洲精品9999蜜桃| 亚洲午夜精品一级毛片app| 97精品人妻免费视频| 中文字幕人妻一区二区视频系列| 久久99精品热在线观看| 91福利高清在线播放| avtt中文字幕手机版| 日本一区二区三区的资源| 亚洲美女露隐私av一区二区精品 | 在线观看中文字幕少妇av| 激情九月天在线视频| 欧美成人区一区二区三| 美国男的操女孩的小嫩逼| 九九热精品视频在线播放| 中文字幕av特黄毛片| 中文字幕亚洲无线乱码| 午夜国产免费视频亚洲| 亚洲一区二区精品三区视频| 日韩男女视频网站在线观看| 亚欧洲乱码视频一二三区| 国产人妻777人伦精品hd超碰| 欧美亚洲另类精品第一页| 亚洲经典av中文字幕| 夏目彩春av在线看| 国产91黑丝小视频在线观看| 欧洲亚洲一区二区三区四区| 国产肥胖熟女又色又爽免费视频| 绿巨人浩克在线视频观看| 2018中文字字幕人妻| 99亚偷拍自图区亚洲| 国产视频1区2区3区| 国产熟妇色xxⅹ交白浆视频 | 91亚洲最新蜜桃在线| av资源中文字幕在线观看 | 加勒比不卡在线视频| 涩涩黄片在线免费观看| tushy一区二区三区视频| 啊~插得好快别揉我胸了视频| 熟女国内精品一区二区三区| 欧美一级日韩一级亚洲一级va| 亚洲午夜高清在线观看| 天天操天天舔天天做| 桃色成人开心激情网| 久久99久久99久久97的人| 日韩欧美一区二区三区免费看 | 亚洲国产美女主播在线观看| 伊人精品成人综合网| 日韩激情亚洲国产欧美另类激情| 麻豆国产精品777777在| yellow在线亚洲精品一区| 猫咪亚洲中文在线中文字幕| 午夜久久久久久av五月| 天堂一区二区三区在线等| 成人午夜麻豆大胆视频| 日本小视频一区二区| 在线 制服 中文字幕 日韩| 美国伦理片午夜理论片| 夜色福利视频免费观看| 国产大桥未久一区二区| 最新国产精品综合网高清| 2020年亚洲男人天堂网| 美女黄色啊啊啊啊视频| 国产激情一区二区视频| 国产一区二区手机在线观看| 极品少妇高潮喷水日出白浆| 在线成人教育平台排名| 中文字幕 一区二区在线观看| 狠狠操av一区二区三区| 精品国产污污污污免费观看| 成人18禁高潮片免费日本| 日本五六十路熟女视频| 国产精品igao为爱寻找激情| 五月激情婷婷四射基地| 亚洲人妻系列在线视频| 白白色在线免费视频发布视频| 91进入蜜桃臀在线播放| 国产剧情av在线免费观看| 高潮喷水一区二区三区| 欧美日韩亚洲tv不卡久久| 国产在线观看av一区| 东京热日韩av影片| 午夜久久久久久av五月| 亚洲男人的天堂最新网址| 欧美久久一区二区伊人| 亚洲av中文无码网站| 青娱乐免费最新视频| 欧美日本国产一区二区| 日韩男女视频网站在线观看| 60路70路日本熟妇| 操烂你的骚逼天天欧美| 黑人巨大精品一区二区在线 | 亚洲情色777中文字幕| 乌克兰美女操逼高清内射视频| 日本少妇人妻凌辱在线| 麻豆出品视频在线观看| 中文字幕精品人妻久久久久| 岛国av成人午夜高清| 91系列视频在线播放| 69xx精品久久久久| 性感人妻 中文字幕| 麻豆出品视频在线观看| 欧美黄色一区二区三区视频| 天天操天天搞天天操| 羞羞漫画无限免费观看秋蝉| 五月婷婷激情视频网| 亚洲一区二区在线视频观看免费| 4日日夜夜精品视频免费| 午夜福利在线不卡视频| 韩国在线播放一区二区三区| 98热视频精品在线观看| 高潮喷水一区二区三区| 久久久久久高清一区| 伊人精品久久一区二区| 亚洲激情视频在线观看免费| 内地精品毛片在线观看| 免费看一级高潮喷水片| 91色老久久精品偷偷蜜臀| 国产av剧变态维修工虐杀美女| 交换的一天中文字幕在线视频| 开心五月综合激情婷婷| 日韩成人免费观看电影| 亚洲成a人片777777张柏芝| 亚欧洲乱码视频一二三区| —区二区三区女厕偷拍| 懂色av之国产精品| 91人妻人人爽色啊啊啊| 国产人妻777人伦精品hd超碰| 亚洲成人 国产精品| 99女福利女女视频在线播放| 欧美肥妇久久久久久| 特级aaaaa黄色片| 青青青在线视频观看97| 啪啪啪网站免费在线看| 日韩在线 中文字幕| 亚洲av激情综合网| 亚洲精品1卡2卡3卡| 人人妻人人爽人人爽欧美一区| 天天天天天天天天日日日| 亚洲韩精品一区二区三区| 麻豆国产精品777777在| 国产激情在线观看一区二区三区| 97精品久久久久久无码人妻| 最近在线中文字幕免费| 青青在线免费手机播放视频| 中文字幕熟女人妻丝袜丝在线| 92在线播放观看视频| 午夜国产免费视频亚洲| 青青草一个释放的网站| 大尺度久久久久久久| 天天干天天色综合久久| 制服丝袜中文字幕熟女人妻| 天天天天天天天天日日日| 全球高清中文字幕av| 99久9在线视频播放| 久久人妻人人草人人爽| 丰满少妇高潮喷水视频| 三区美女视频在线观看| 精品人妻在线激情视频| 国产男女无套?免费网站下载| 大乳丰满人妻中文字幕韩国hd| av成人三级高清日韩| 欧洲精品在线免费观看| 国产伦理二区三区在干嘛呢| 国产成人情侣av在线| 国产夫妻视频在线观看免费| 久久午夜免费鲁丝片| 亚洲成a人片777777张柏芝| 成人av中文字幕在线看| 亚洲图片另类综合小说| 果冻麻豆一区二区三区| 欧美亚洲另类精品第一页| 性感美女极品18禁网站在线| 成人18禁高潮片免费日本| 一区二区三区高清视频3| 日本欧美亚洲国产啊啊啊| 国内自拍第一区二区三区| 亚洲熟女在线免费观看| 天天操天天射天天操天天日| 日本少妇三级交换做爰做| 西野翔人妻中文字幕中字在| 亚洲|久久久久久一二三区丝袜| 超碰在线观看97资源| 精品国产污污污免费入口| 久久免费视频ww一区| 亚洲色图日韩在线视频观看| 激情久久在线免费观看视频| 亚洲人成小说网站色| 男人和女人的逼视频| 亚洲熟女在线免费观看| 西野翔人妻中文字幕中字在| 中日韩又粗又硬又大精品| 神马不卡视频在线视频| 免费的啪啪视频软件| 亚洲成人三级黄色片| 日韩精品视频一区二区三区在线| 91美女在线观看视频| 欧美日韩成人高清中文网| 不卡一区二区视频在线| 猫咪亚洲中文在线中文字幕| 美女一区二区四区六区八区| 亚洲成人三级黄色片| 美女激情久久久久久久| 一区二区三区国产精华液区别大吗| 国产女人18毛片水真多精选| 天天操,天天射,天天爽| 最新国产精品久久精品app| 在线免费观看视频18| 日本欧美国产在线一区| 亚洲黄色成人一级片| 午夜野花视频在线观看| 欧美日韩高清片在线观看| 亚洲av激情综合网| 懂色av之国产精品| —区二区三区女厕偷拍| 国产美女视频带a∨黄色片| 亚洲人妻系列在线视频| 国产欧美福利在线观看| 在线观看免费啪啪啪| 久久国产精品久精国产爱| av在线播放观看h| 午夜一区二区三区视频在线观看| 岳母的诱惑电影在线观看| 国产又粗又长又大视频| 无码人妻丰满熟妇区五路| 人妻在线中文视频视频| 日日躁夜夜躁狠狠操| 真人一进一出抽搐大尺度视频| 欧美人与动欧交视频| 97精品久久久久久无码人妻| 91佛爷视频在线观看| 日本老女人日比视频| 欧美性受黑人猛交裸体视频| 亚洲综合首页综合在线观看| 成人资源中文在线观看| 欧美视频免费观看777| 国产 亚洲 欧美 自拍| 自拍偷自拍亚洲精品10p| 顶级欧美色妇4khd| 人妻在线中文视频视频| 五月天天堂视频在线| 国内销魂老女人老泬| 4438全国成人免费视频| 日韩av电影中文在线免费观看 | 九一精品人妻一区二区三区| 日韩欧美中文字幕老司机三分钟| 国产福利一区二区三区在线观看| 亚洲成人 国产精品| 松本菜奈实最新av在线| 亚洲gay视频在线观看| 国产三级自拍视频在线观看网站| 999久久久人妻精品一区| 黑人大巨屌操美女逼| 大成色亚洲一二三区| 人妻系列在线免费视频| 亚洲一区二区三区四区入口| 午夜在线观看一级毛| 大尺度久久久久久久| 超碰在线pro中文字幕| 女人扒开逼让男人操| 韩国资源视频一区二区三区| 东京热日韩av影片| 操人妻人妻天天爽天天偷| 大片a免费观看在线视频观看| 岳母的诱惑电影在线观看| 可在线免费观看av| 亚洲字幕一区二区夜色av| 人妻激情偷乱一区二区三区av| 在线人成视频免费观看尤物| 天堂av国产av伦理av| 欧洲成熟女人色惰片| 亚洲男人天堂最新网址大全 | 岳的大肥屁熟妇五十路| 午夜精品秘一区二区三区| 蜜桃臀少妇白色紧身裤细高跟| 国产精品乱码高清在线观看h| 亚洲国产精品一区二区第二页| av中文字幕国产精品| 亚洲|久久久久久一二三区丝袜| 日韩无码国产一区二区| 东北老女人熟女啪啪视频| av在线免费在线观看| 人妻系列中文字幕大乳丰满人妻| 漂亮人妻口爆久久精品| 日本高清 中文字幕| 日韩黄色在线观看网站上| aaaa级少妇高潮在线观看| 日本老女人日比视频| 久久热在线免费观看| 日本欧美高清在线观看视频| tushy一区二区三区视频| 国产美女主播av在线| 国产91九色视频在线观看| 国产视频成人自拍蝌蚪视频| 久久精品国产亚洲av清纯| 午夜在线成人免费电影| 69国产在线视频网站| 日产国产欧美精品另类| 欧美日韩成人高清中文网| 久久久久久久久久久久久国产 | 精品美女洗澡一区二区| 夜夜躁av麻豆男| 欧美一区二区三区爽爽| 北野中文字幕一区二区| 男生用大肌巴操美女骚穴| 一级毛片特级毛片免费的| 偷拍欧美日韩另类图片| 亚洲中文字幕最新地址| 午夜精品视频免费观看| 国产漂亮白嫩美女在线图片 | 伊人久久综合国产精品| 911美女片黄在线观看| 欧美日本国产一区二区| 国内自拍第一区二区三区| 久久99嫩草99久久精品| 国产美女视频带a∨黄色片| 日本少妇精品免费视频| 国产视频成人自拍蝌蚪视频| 青娱乐免费最新视频| 欧美一区二区播放视频| 婷婷综合缴情亚洲五月伊人| 狠狠干狠狠操免费视频| 久久99嫩草99久久精品| 白白色在线免费视频发布视频| 一区二区三区国产在线成人av| 亚洲免费午夜污福利| 黄片操操操操操操c| 成年人免费福利在线| 99国产精品久久99久久久| 丰满人妻熟女aⅴ一区| 亚洲a区在线免费观看| av在线男人的天堂亚洲| 亚洲欧美精品日韩偷拍| 中文字幕丰满子伦无码专区| 99热99这里免费的精品| 69国产在线视频网站| 亚洲一区视频中文字幕在线播放 | 98热视频精品在线观看| 久久99热精品免费观看视| 欧美不卡一二三区精品| 伊人网在线观看 视频一区| av一区二区三区四区五区在线| 猫咪亚洲中文在线中文字幕| 强乱人妻中文字幕日本| 欧美亚洲国产一区二区| 久久久久久久久久久久久国产| 特级aaaaa黄色片| 亚洲成人,国产精品| 天堂av国产av伦理av| 182tv精品免费在线观看| 99久9在线视频播放| 日日躁夜夜躁狠狠操| 中文字幕麻绳捆绑的人妻| 亚洲va999天堂va| jizzjizz国产精品传媒| 不卡一区二区视频在线| 在线免费视频999| 色就色综合偷拍区欧美在线| 九热精品视频在线观看| 四虎精品久久免费最新| 波多野结衣在线一区别| 日本欧美高清在线观看视频| 国产福利一区二区三区在线观看 | 国产精品乱码高清在线观看h| 日本欧美视频在线免费| 久久久久久久岛国免费观看| 久久久国产精品免费视频网| 福利一二三在线视频观看| 亚洲va999天堂va| 大陆中文字幕视频在线| 夜夜操天天干夜夜操| alisontyler和黑人| 天天做天天日天天搞| 91超精品碰国产在线观看| 91性高湖久久久久久久久久| 国产青青青青草免费在线视频| 一区二区在线观看视频观看| 在线观看黄页网站视频网站| 熟妇人妻av无码中文字幕| 最新久久这里只有精品| 瑟瑟干视频在线观看| 国产成人av在线你懂得| 欧美成人短视频在线播放| 人人妻人人爽人人爽欧美一区| 亚洲经典av中文字幕| 中文字幕一区二区三区久久久| 久久99热精品免费观看视| 男人和女人的逼视频| 亚洲唯美激情综合四射| 日韩三级精品电影久久久久| 亚洲国产美女主播在线观看| 豆豆专区操逼性视频在线| 松本菜奈实最新av在线| 日本国产亚洲欧美色综合| 性高潮视频在线观看日韩| 999久久久人妻精品一区| 国产成人91色精品免费看片| 亚洲激情噜噜噜久久久| 在线中文字幕人妻av| 免费24小时人妻视频| 亚洲国产精品一区51动漫| 亚洲综合第一区二区| 亚洲美女露隐私av一区二区精品| 人妻被强av系列一区二区| 国产黄色主播网址大全在线播放 | 久久av色噜噜ai换脸| 女人的天堂 av在线| av一区二区三区四区五区在线|