国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

protobuf Go語言教程

共 16278字,需瀏覽 33分鐘

 ·

2022-07-26 05:48

protocol buffers

protobuf介紹

Protobuf全稱Protocol Buffer,是 Google 公司于2008年開源的一種語言無關(guān)、平臺無關(guān)、可擴(kuò)展的用于序列化結(jié)構(gòu)化數(shù)據(jù)——類似于XML,但比XML更小、更快、更簡單,它可用于(數(shù)據(jù))通信協(xié)議、數(shù)據(jù)存儲等。你只需要定義一次你想要的數(shù)據(jù)結(jié)構(gòu),然后你就可以使用特殊生成的源代碼來輕松地從各種數(shù)據(jù)流和各種語言中寫入和讀取你的結(jié)構(gòu)化數(shù)據(jù)。目前 Protobuf 被廣泛用作微服務(wù)中的通信協(xié)議。

protobuf語法

點(diǎn)擊查看 protobuf v3語法中文指南

protobuf 編譯器指南

安裝 protobuf

從下面的鏈接:https://github.com/google/protobuf/releases下載適合你平臺的預(yù)編譯好的二進(jìn)制文件(protoc-<version>-<platform>.zip)。

  • 適用Windows 64位protoc-3.20.1-win64.zip
  • 適用于Mac Intel 64位protoc-3.20.1-osx-x86_64.zip
  • 適用于Mac ARM 64位protoc-3.20.1-osx-aarch_64.zip
  • 適用于Linux 64位protoc-3.20.1-linux-x86_64.zip

例如,我使用 Intel 芯片的 Mac 系統(tǒng)則下載 protoc-3.20.1-osx-x86_64.zip 文件,解壓之后得到如下內(nèi)容。

protoc

其中:

  • bin 目錄下的 protoc 是可執(zhí)行文件。
  • include 目錄下的是 google 定義的.proto文件,我們import "google/protobuf/timestamp.proto"就是從此處導(dǎo)入。

我們需要將下載得到的可執(zhí)行文件protoc所在的 bin 目錄加到我們電腦的環(huán)境變量中。

安裝生成Go代碼的插件

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

生成Go代碼

編譯器調(diào)用

protocol buffer編譯器需要一個插件來根據(jù)提供的proto文件生成 Go 代碼,Go1.16+請使用下面的命令安裝插件。

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

這個命令將在 $GOBIN 中安裝一個 protocol-gen-go 的二進(jìn)制文件。我們需要確保 $GOBIN 在你的環(huán)境變量中,protocol buffer編譯器才能找到它(可以通過go env命令查看$GOPATH)。

當(dāng)使用go_out 標(biāo)志調(diào)用 protoc 時,protocol buffer編譯器將生成 Go 代碼。protocol buffer編譯器會將生成的Go代碼輸出到命令行參數(shù)go_out指定的位置。go_out標(biāo)志的參數(shù)是您希望編譯器編寫 Go 輸出的目錄。編譯器為每個.proto 文件輸入創(chuàng)建一個源文件。輸出文件的名稱是通過將.proto 擴(kuò)展名替換為.pb.go 而創(chuàng)建的。

生成的.pb.go文件放置的目錄取決于編譯器標(biāo)志。有幾種輸出模式:

  • paths=import:輸出文件放在以 Go 包的導(dǎo)入路徑命名的目錄中。例如,protos/buzz.proto文件中帶有example.com/project/protos/fizz的導(dǎo)入路徑,則輸出的生成文件會保存在example.com/project/protos/fizz/buzz.pb.go。如果未指定路徑標(biāo)志,這就是默認(rèn)輸出模式。
  • module=$PREFIX:輸出文件放在以 Go 包的導(dǎo)入路徑命名的目錄中,但是從輸出文件名中刪除了指定的目錄前綴。例如,輸入文件 pros/buzz.proto,其導(dǎo)入路徑為 example.com/project/protos/fizz 并指定example.com/projectmodule前綴,結(jié)果會產(chǎn)生一個名為 pros/fizz/buzz.pb.go 的輸出文件。在module路徑之外生成任何 Go 包都會導(dǎo)致錯誤。此模式對于將生成的文件直接輸出到 Go 模塊非常有用。
  • paths=source_relative:輸出文件與輸入文件放在相同的相對目錄中。例如,一個protos/buzz.proto輸入文件會產(chǎn)生一個位于protos/buzz.pb.go的輸出文件。

在調(diào)用protoc時,通過傳遞 go_opt 標(biāo)志來提供特定于 protocol-gen-go 的標(biāo)志位參數(shù)。可以傳遞多個go_opt標(biāo)志位參數(shù)。例如,當(dāng)執(zhí)行下面的命令時:

protoc --proto_path=src --go_out=out --go_opt=paths=source_relative foo.proto bar/baz.proto

編譯器將從 src 目錄中讀取輸入文件 foo.protobar/baz.proto,并將輸出文件 foo.pb.gobar/baz.pb.go 寫入 out 目錄。如果需要,編譯器會自動創(chuàng)建嵌套的輸出子目錄,但不會創(chuàng)建輸出目錄本身。

package

為了生成 Go 代碼,必須為每個 .proto 文件(包括那些被生成的 .proto 文件傳遞依賴的文件)提供 Go 包的導(dǎo)入路徑。有兩種方法可以指定 Go 導(dǎo)入路徑:

  • 通過在 .proto 文件中聲明它,或者
  • 通過在調(diào)用 protoc 時在命令行上聲明它。

我們建議在 .proto 文件中聲明它,以便 .proto 文件的 Go 包可以與 .proto 文件本身集中標(biāo)識,并簡化調(diào)用 protoc 時傳遞的標(biāo)志集。如果給定 .proto 文件的 Go 導(dǎo)入路徑由 .proto 文件本身和命令行提供,則后者優(yōu)先于前者。

Go 導(dǎo)入路徑是在 .proto 文件中指定的,通過聲明帶有 Go 包的完整導(dǎo)入路徑的 go_package 選項來創(chuàng)建 proto 文件。用法示例:

option go_package = "example.com/project/protos/fizz";

調(diào)用編譯器時,可以在命令行上指定 Go 導(dǎo)入路徑,方法是傳遞一個或多個 M${PROTO_FILE}=${GO_IMPORT_PATH} 標(biāo)志位。用法示例:

protoc --proto_path=src \
  --go_opt=Mprotos/buzz.proto=example.com/project/protos/fizz \
  --go_opt=Mprotos/bar.proto=example.com/project/protos/foo \
  protos/buzz.proto protos/bar.proto

由于所有 .proto 文件到其 Go 導(dǎo)入路徑的映射可能非常大,這種指定 Go 導(dǎo)入路徑的模式通常由控制整個依賴樹的某些構(gòu)建工具(例如 Bazel)執(zhí)行。如果給定的 .proto 文件有重復(fù)條目,則指定的最后一個條目優(yōu)先。

對于 go_package 選項和 M 標(biāo)志位,它們的值可以包含一個顯式的包名稱,該名稱與導(dǎo)入路徑之間用分號分隔。例如:“example.com/protos/foo;package_name”。不鼓勵這種用法,因為默認(rèn)情況下包名稱將以合理的方式從導(dǎo)入路徑派生。

導(dǎo)入路徑用于確定一個 .proto 文件導(dǎo)入另一個 .proto 文件時必須生成哪些導(dǎo)入語句。例如,如果 a.proto 導(dǎo)入 b.proto,則生成的 a.pb.go 文件需要導(dǎo)入包含生成的 b.pb.go 文件的 Go 包(除非兩個文件在同一個包中)。導(dǎo)入路徑也用于構(gòu)造輸出文件名。有關(guān)詳細(xì)信息,請參閱上面的“編譯器調(diào)用”部分。

Go 導(dǎo)入路徑和 .proto 文件中的package說明符之間沒有關(guān)聯(lián)。后者僅與 protobuf 命名空間相關(guān),而前者僅與 Go 命名空間相關(guān)。此外,Go 導(dǎo)入路徑和 .proto 導(dǎo)入路徑之間沒有關(guān)聯(lián)。

Go語言使用protoc示例

我們新建一個名為demo的項目,并且將項目中定義的.proto文件都保存在proto目錄下。

本文后續(xù)的操作命令默認(rèn)都在demo目錄下執(zhí)行。

普通編譯

定義proto

// proto/book/book.proto

syntax = "proto3";

package book;

// 聲明生成Go代碼的導(dǎo)入路徑(import path)
option go_package = "github.com/Q1mi/demo/proto/book";

message price {
int64 marketPrice = 1;
int64 salePrice = 2;
}

我們在這個文件中使用option go_package = "github.com/Q1mi/demo/proto/book"語句聲明了生成的Go代碼的導(dǎo)入路徑。

項目當(dāng)前的目錄結(jié)構(gòu)如下:

demo
└── proto
    └── book
        └── price.proto

生成代碼

假設(shè)我們想把最終生成的Go代碼還保存在proto文件夾中,那么就可以執(zhí)行下面的命令。

protoc \
--proto_path=proto \
--go_out=proto \
--go_opt=paths=source_relative \
book/price.proto

其中:

  • --proto_path=proto 表示從proto目錄下讀取proto文件。
  • --go_out=proto 表示生成的Go代碼保存的路徑。
  • --go_opt=paths=source_relative 表示輸出文件與輸入文件放在相同的相對目錄中。
  • account/account.proto 表示在proto目錄下的account/account.proto文件。

此外,--proto_path有一個別名-I,上述編譯命令也可以這樣寫。

protoc \
-I=proto \
--go_out=proto \
--go_opt=paths=source_relative \
book/price.proto

執(zhí)行上述命令將會在proto目錄下生成account/account.pb.go文件。

demo
└── proto
    └── book
        ├── price.pb.go
        └── price.proto

此處命令可以簡寫為:

protoc \
--go_out=. \
--go_opt=paths=source_relative \
proto/book/price.proto

上面的命令都是將代碼生成到demo/proto目錄,如果想要將生成的Go代碼保存在其他文件夾中(例如pb文件夾),那么我們需要先在demo目錄下創(chuàng)建一個pb文件夾。然后在命令行通過--go_out=pb指定生成的Go代碼保存的路徑。完整命令如下:

protoc \
--proto_path=proto \
--go_out=pb \
--go_opt=paths=source_relative \
book/price.proto

執(zhí)行上面的命令便會在demo/pb文件夾下生成Go代碼。

demo
├── pb
│   └── book
│       └── price.pb.go
└── proto
    └── book
        ├── price.pb.go
        └── price.proto

import同目錄下protobuf文件

隨著業(yè)務(wù)的復(fù)雜度上升,我們可能會定義多個.proto源文件,然后根據(jù)需要引入其他的protobuf文件。

在這個示例中,我們在demo/proto/book目錄下新建一個book.proto文件,它通過import "book/price.proto";語句引用了同目錄下的price.proto文件。

// demo/proto/book/book.proto

syntax = "proto3";

// 聲明protobuf中的包名
package book;

// 聲明生成的Go代碼的導(dǎo)入路徑
option go_package = "github.com/Q1mi/demo/proto/book";

// 引入同目錄下的protobuf文件(注意起始位置為proto_path的下層)
import "book/price.proto";

message book {
string title = 1;
price price = 2;
}

編譯命令如下:

protoc \
--proto_path=proto \
--go_out=proto \
--go_opt=paths=source_relative \
book/book.proto book/price.proto

這里有幾點(diǎn)需要注意:

  1. 因為我們通過編譯命令指定--proto_path=proto,所以import導(dǎo)入語句需要從demo/proto文件夾的下層目錄book這一層開始寫。

  2. 因為導(dǎo)入的price.protobook.proto同屬于一個package book;,所以可以直接使用price作為類型,無需添加 package 前綴(即無需寫成book.price)。

上述編譯命令最終會生成demo/proto/book/book.pb.go文件。

demo
└── proto
    └── book
        ├── book.pb.go
        ├── book.proto
        ├── price.pb.go
        └── price.proto

import其他目錄下文件

我們在demo/proto目錄下新建了一個author文件夾,用來存放與 author 相關(guān)的 protobuf 文件。例如我們定義一個表示作者信息的author.proto文件,其內(nèi)容如下:

// demo/proto/author/author.proto

syntax = "proto3";

// 聲明protobuf中的包名
package author;

// 聲明生成的Go代碼的導(dǎo)入路徑
option go_package = "github.com/Q1mi/demo/proto/author";

message Info {
string name = 1;
}

此時的目錄結(jié)構(gòu):

demo
└── proto
    ├── author
    │   └── author.proto
    └── book
        ├── book.pb.go
        ├── book.proto
        ├── price.pb.go
        └── price.proto

假設(shè)我們的 book 需要增加一個作者信息的字段——authorInfo,這時我們需要在demo/proto/book/book.proto中導(dǎo)入其他目錄下的 author.proto 文件。具體改動如下。

// proto/proto/book/book.proto

syntax = "proto3";

// 聲明protobuf中的包名
package book;

// 聲明生成的Go代碼的導(dǎo)入路徑
option go_package = "github.com/Q1mi/demo/proto/book";

// 引入同目錄下的protobuf文件(注意起始位置為proto_path的下層)
import "book/price.proto";
// 引入其他目錄下的protobuf文件
import "author/author.proto";

message book {
string title = 1;
price price = 2;
author.Info authorInfo = 3; // 需要帶package前綴
// google.protobuf.Timestamp date = 4;
}

我們通過import "author/author.proto";導(dǎo)入了author包的author.proto文件,所以在book包下使用Info類型時需要添加其包名前綴即author.Info

編譯命令如下:

protoc \
--proto_path=proto \
--go_out=proto \
--go_opt=paths=source_relative \
book/book.proto book/price.proto author/author.proto

此時的目錄結(jié)構(gòu):

demo
└── proto
    ├── author
    │   ├── author.pb.go
    │   └── author.proto
    └── book
        ├── book.pb.go
        ├── book.proto
        ├── price.pb.go
        └── price.proto

import google proto文件

有時候我們也需要在我們定義的 protobuf 文件中使用 Google 定義的類型,例如TimestampAny等。

例如我們要為我們的 book 添加出版日期——date字段,就可以通過 import "google/protobuf/timestamp.proto";導(dǎo)入并使用Timestamp類型了。

修改后的book.proto文件內(nèi)容如下:

// demo/proto/book/book.proto

syntax = "proto3";

// 聲明protobuf中的包名
package book;

// 聲明生成的Go代碼的導(dǎo)入路徑
option go_package = "github.com/Q1mi/demo/proto/book";

// 引入同目錄下的protobuf文件(注意起始位置為proto_path的下層)
import "book/price.proto";
// 引入其他目錄下的protobuf文件
import "author/author.proto";
// 引入google/protobuf/timestamp.proto文件
import "google/protobuf/timestamp.proto";

message book {
string title = 1;
price price = 2;
author.Info authorInfo = 3; // 需要帶package前綴
// Timestamp是大寫T!大寫T!大寫T!
google.protobuf.Timestamp date = 4; // 注意包名前綴
}

那么這個 google/protobuf/timestamp.proto 是從哪里導(dǎo)入的呢?

通常我們下載 protobuf編譯器的時候會解壓得到如下文件:

protoc

其中:

  • bin 目錄下的 protoc 是可執(zhí)行文件。
  • include 目錄下的是 google 定義的.proto文件,我們import "google/protobuf/timestamp.proto"就是從此處導(dǎo)入。

我們需要將下載得到的可執(zhí)行文件protoc所在的 bin 目錄加到我們電腦的環(huán)境變量中。

如果你不是通過這種方式安裝的 protobuf 那么你也可以手動將 Google 定義的protobuf文件下載到本地(git clone或者go get,protobuf文件在src下),然后通過 --proto_path指定其路徑。

protoc \
--proto_path=/Users/liwenzhou/workspace/go/pkg/mod/github.com/protocolbuffers/[email protected]+incompatible/src/ \
--proto_path=proto \
--go_out=proto \
--go_opt=paths=source_relative \
book/book.proto book/price.proto author/author.proto

或者你還可以簡單粗暴的把下載好的 protobuf 文件拷貝到你項目的 proto 目錄下。

demo
└── proto
    ├── author
    │   ├── author.pb.go
    │   └── author.proto
    ├── book
    │   ├── book.pb.go
    │   ├── book.proto
    │   ├── price.pb.go
    │   └── price.proto
    └── google
        └── protobuf
            └── timestamp.proto

然后執(zhí)行下面的編譯命令:

protoc \
--proto_path=proto \
--go_out=proto \
--go_opt=paths=source_relative \
book/book.proto book/price.proto author/author.proto

生成gRPC代碼

由于通常我們都是配合 gRPC 來使用 protobuf ,所以我們也需要基于.proto文件生成Go代碼的同時生成 gRPC 代碼。

要想生成 gRPC 代碼就需要先安裝 protoc-gen-go-grpc 插件。

go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

上述命令會默認(rèn)將插件安裝到$GOPATH/bin,為了protoc編譯器能找到這些插件,請確保你的$GOPATH/bin在環(huán)境變量中。

假設(shè)我們現(xiàn)在要提供一個創(chuàng)建書籍的 RPC 方法,那么我在book.proto中添加如下定義。

// demo/proto/book/book.proto

// ...省略...

service BookService{
rpc Create(book)returns(book);
}

然后在 protoc 的編譯命令添加 gRPC相關(guān)輸出的參數(shù),完整命令如下。

protoc \
--proto_path=proto \
--go_out=proto \
--go_opt=paths=source_relative 
--go-grpc_out=proto \
--go-grpc_opt=paths=source_relative 
book/book.proto book/price.proto author/author.proto

上述命令就會生成book_grpc.pb.go文件。

demo
└── proto
    ├── author
    │   ├── author.pb.go
    │   └── author.proto
    └── book
        ├── book.pb.go
        ├── book.proto
        ├── book_grpc.pb.go
        ├── price.pb.go
        └── price.proto

gRPC-Gateway

gRPC-Gateway 也是日常開發(fā)中比較常用的一個工具,它同樣也是根據(jù) protobuf 生成相應(yīng)的代碼。

安裝工具

go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway

為protobuf文件添加注釋

我們在book.proto文件中添加如下注釋。

// demo/proto/book/book.proto

syntax = "proto3";

// 聲明protobuf中的包名
package book;

// 聲明生成的Go代碼的導(dǎo)入路徑
option go_package = "github.com/Q1mi/demo/proto/book";

// 引入同目錄下的protobuf文件(注意起始位置為proto_path的下層)
import "book/price.proto";
// 引入其他目錄下的protobuf文件
import "author/author.proto";
// 引入google/protobuf/timestamp.proto文件
import "google/protobuf/timestamp.proto";
// 引入google/api/annotations.proto文件
import "google/api/annotations.proto";

message book {
string title = 1;
price price = 2;
author.Info authorInfo = 3; // 需要帶package前綴
// Timestamp是大寫T!大寫T!大寫T!
google.protobuf.Timestamp date = 4; // 注意包名前綴
}

service BookService{
rpc Create(book)returns(book){
option (google.api.http) = {
post: "/v1/book"
body: "*"
};
};
}

此時,我們又引入了google/api/annotations.proto 這個文件,這個文件在https://github.com/googleapis/googleapis。我們可以像上面引入timestamp.proto文件一樣將這個庫下載到本地然后通過--proto_path指定,或者把用到的 protobuf 文件拷貝到我們的項目中。

這里就把此處用到的google/api/annotations.proto文件和http.proto文件拷貝到項目的google/api目錄下(annotations.proto文件中引入了http.proto文件)。

此時的項目目錄如下:

demo
└── proto
    ├── author
    │   ├── author.pb.go
    │   └── author.proto
    ├── book
    │   ├── book.pb.go
    │   ├── book.proto
    │   ├── book_grpc.pb.go
    │   ├── price.pb.go
    │   └── price.proto
    └── google
        └── api
            ├── annotations.proto
            └── http.proto

編譯

這一次編譯命令在之前的基礎(chǔ)上要繼續(xù)加上 gRPC-Gateway相關(guān)的 --grpc-gateway_out=proto --grpc-gateway_opt=paths=source_relative 參數(shù)。

完整的編譯命令如下:

protoc \
--proto_path=proto \
--go_out=proto \
--go_opt=paths=source_relative \
--go-grpc_out=proto \
--go-grpc_opt=paths=source_relative \
--grpc-gateway_out=proto \
--grpc-gateway_opt=paths=source_relative \
book/book.proto book/price.proto author/author.proto

最終會編譯得到一個book.pb.gw.go文件。

demo
└── proto
    ├── author
    │   ├── author.pb.go
    │   └── author.proto
    ├── book
    │   ├── book.pb.go
    │   ├── book.pb.gw.go
    │   ├── book.proto
    │   ├── book_grpc.pb.go
    │   ├── price.pb.go
    │   └── price.proto
    └── google
        └── api
            ├── annotations.proto
            └── http.proto

為了方便編譯可以在項目下定義Makefile。

.PHONY: gen help

PROTO_DIR=proto

gen:
 protoc \
 --proto_path=$(PROTO_DIR) \
 --go_out=$(PROTO_DIR) \
 --go_opt=paths=source_relative \
 --go-grpc_out=$(PROTO_DIR) \
 --go-grpc_opt=paths=source_relative \
 --grpc-gateway_out=$(PROTO_DIR) \
 --grpc-gateway_opt=paths=source_relative \
 $(shell find $(PROTO_DIR) -iname "*.proto")

help:
 @echo "make gen - 生成pb及grpc代碼"

后續(xù)想要編譯只需在項目目錄下執(zhí)行make gen即可。

管理 protobuf

在企業(yè)的項目開發(fā)中,我們通常會把 protobuf 文件存儲到一個單獨(dú)的代碼庫中,并在具體項目中通過git submodule引入。這樣做的好處是能夠?qū)?protobuf 文件統(tǒng)一管理和維護(hù),避免因 protobuf 文件改動導(dǎo)致的問題。


本文示例代碼已上傳至github倉庫:https://github.com/Q1mi/demo,請點(diǎn)擊查看完整代碼。



推薦閱讀


福利

我為大家整理了一份從入門到進(jìn)階的Go學(xué)習(xí)資料禮包,包含學(xué)習(xí)建議:入門看什么,進(jìn)階看什么。關(guān)注公眾號 「polarisxu」,回復(fù) ebook 獲取;還可以回復(fù)「進(jìn)群」,和數(shù)萬 Gopher 交流學(xué)習(xí)。

瀏覽 30
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 久久黄色网址| 亚洲福利一区二区| 狠狠肏| 麻豆视频一区二区| 波多野结衣视频一区| 77777精品成人免费A片| 精品久久久无码| 无码免费中文字幕| 超碰AA| 操逼网站免费| H片在线免费观看| 高清无码在线不卡| 91超碰久久在线| 制服丝袜在线视频| 国产又粗又大又爽| 亚洲影音先锋资源| 99re6热在线精品视频功能| 一区二区三区无码视频| 久久人妻熟女中文字幕av蜜芽| 91视频内射| 欧美一级黄色大片| 成人AV片导航| 亚洲视频www| 美女av网站| av在线观看网站| AⅤ视频在线观看| 久久91| 91青青| 日韩精品人妻中文字幕| 亚洲AV无码电影| 国产小电影在线| 国产香蕉精品视频| 国产一区二区电影| 高清无码在线视频观看| 伊人成人在线视频观看| 精品国产AV无码一区二区三区| 久久久久久久久久久亚洲| 97这里只有精品| 国产精品久久AV电影| 99大香蕉| 精品二区| 成人视频在线播放| jizz在线免费观看| 日逼www| 五月天婷婷综合| av手机版| 日韩在线视频91| 日韩成年视频| 久久婷五月天| 日韩久久网站| 日本大香蕉伊人| 亚洲二区视频| 丝瓜污视频| 国产一区二区免费在线观看| 欧美日韩91| 欧美一级黃色A片免费看小优视频 无码人妻精品一区二区三千菊电影 | 欧美黄色电影在线观看| 欧美日皮视频| 亚洲午夜福利在线观看| 黄色免费大片| 日本爱爱免费视频| 久久国产精品网站| 嫩草国产| 亚洲天堂无码视频| 四川少扫搡BBw搡BBBB| 国产精品午夜福利| 色婷婷AV一区二区三区软件| 四川女人毛多水多A片| 亚洲熟妇无码| 超碰九九| 性满足BBWBBWBBW| 色悠久久久| 成人性爱免费视频| 最近中文字幕mv第三季歌词| 日韩a级片| 91成人在线免费视频| 国产精品欧美一区二区三区苍井空| 欧美激情在线观看| 五月天AV在线| 伊人久久国产| 黄片日逼| 国产精品无码白浆高潮| 丁香婷婷色| 亚洲国产精品久久人人爱| 一级a一级a爱片免费视频| 欧美久久网| 国产网站在线| 亚洲成人在线网站| 成人免费版欧美州| 欧美色图第一页| 激情婷婷五月| 男人天堂网站| 黄片网址| 韩国三级中文字幕HD久久精品 | 在线观看一区| 中文字幕乱伦性爱| 亚洲日韩免费在线观看| 国产一级电影网站| 亚洲日韩AV电影| 亚洲播播在线视频| 国产无码做爱视频| a片在线观看免费| 一区二区三区不卡在线| 中文字幕精品一区| 久久久久久无码| 俺去俺来也WWW色老板| 午夜成人视频在线观看| 久久99久久99久久99人受| 中文字幕人妻一区| 久久精品成人电影| 大香伊人| 欧美丝袜脚交xxxxBH| 三级AV在线免费观看| 日韩无码黄色片| 黄色免费福利视频| 一道本无码视频| 色婷婷色婷婷| 亚洲一本之道| 成年人免费电影| 欧美色色网站| 亚洲综合免费观看高清| 精久久久| 成人片成人片| 18禁裸体美女| 黄色一级片在线看| 天天操夜夜操狠狠| 影音先锋成人AV资源| 亚洲AV无码精品国产| 久久精品成人导航| 青青草原成人| 国产丨熟女丨国产熟女视频| 欧美天堂在线| 牛牛成人在线视频| 精品精品视频| 婷婷中文字幕亚洲| 91探花在线播放| 国产学生妹| 成人激情视频网| 爱逼AV| 超碰在线中文字幕| 开心激情站| 老司机精品在线观看| 最新日韩中文字幕| 一级黄片免费| 成人无码免费视频| 中文字幕乱码中文字幕电视剧| 北条麻妃高清无码| 精品国产乱子伦一区二区三区最新章 | 天堂无线av无码av| 5252a我爱haose01我愿| 少婦揉BBBB揉BBBB揉| 国产v欧美| 亚洲黄色一区| 高清无码在线免费| 日韩中文在线观看| 无码精品黄色片| 成人免费视频一区| 大伊香蕉视频| 亚洲黄色免费电影| 国产黄色视频在线免费观看| 久久免费黄色视频| 在线中文字幕在线观看| 日日综合网| wwwwww黄| 懂色av懂色av粉嫩av无码| 久久这里都是精品| 亚洲国产91| 国产午夜91人妻| 国产成人电影一区二区| 国产欧美日韩在线播放| 九一香蕉视频| 翔田千里一区二区| 亚洲视频免费| 少妇熟女视频一区二区三区| 99爱爱视频| 免费日韩毛片| 99热这里只有精品1| 免费的av| AV无码国产| 国产美女自拍| 啪一啪操一操| 亚洲成人视频免费观看| 亚洲AV女人18毛片水真多| 最近最火中文字幕mv歌词| 九九九AV| 午夜成人网站| 91九色口爆吞精| 最新AV在线播放| 1024大香蕉| 91无码人妻一区二区成人aⅴ| 真实野外打野视频| 免费看一级无码成人片| 日韩精品一区二区三区四区| A片黄色毛片| 成人免费网站黄| 无码狠狠躁久久久久久久91| 欧美日韩国产在线| 超碰二区| 欧美日韩一道本| 911精品国产一区二区在线| 在线观看高清无码视频| 久久精品视频观看| 色婷久久| 92久久| 五月婷婷在线视频| 日韩肏屄视频在线观看| 成人网站大香蕉| 91精品人妻少妇无码影院| 丁香五月激情网| 成人网肏逼视频| 操逼手机视频| 午夜做爱视频| 大香蕉三级片| 日韩无码专区电影| 欧美在线亚洲| 三级免费| 无码三级片在线观看| 亚洲AV无码成人精品区东京热| 日日爽夜夜| 大香蕉伊人AV| av高清无码| 国产一视频| 黄总AV| 香蕉网址| 亚洲色图15p| 99r6热只有精品免费观看| av在线资源播放| 国产成人三级片| 一区二区免费视频| 精品秘一区性综合三区| 国产精品三级视频| 精品中文字幕在线观看| 69堂在线观看| 免费黄色视频网站大全| 国产毛片一区二区三区| 骚妇一区| 成人免费黄色网| 91丨九色丨蝌蚪丨成人| 亚洲色吧| 天天爽夜夜爽夜夜爽| 亚洲成人无码一区| 麻豆久久久| 日本老熟妇| 午夜福利大香蕉| 99精品色| 五月天婷婷丁香综合视频| 黄色视频免费播放| 蜜臀久久99精品久久久巴士| 肏逼黄色一级| 亚洲AV无码乱码国产精品| 欧美成人毛片一级A片| 一级免费黄片| 日韩美女做爱| 亚洲男女网站| 黄色福利在线观看| 日韩精品免费| 亚欧洲精品视频| 欧美熟妇搡BBBB搡BBBBB| 免费一级a| 亚洲成人自拍| 青青操天天干| 搡女人视频国产一级午夜片| 性爱av天堂| 永久免费一区二区三区| 亚洲AV秘无码一区在线| 亚洲成人免费观看| 亚洲美女视频| 久一在线| 婷婷色色婷婷| 爆操表妹| jlzzzjlzzz国产免费观看| 亚洲色情在线| 欧美第一网站| av东方在线| 免费看操逼视频| 欧美日韩在线观看一区二区三区| 69pao| 俺去俺来也在线www色官网| 精品一区二区三区四区五区六区七区八区九区 | 国产精品久久毛片A片| 精品一区国产探花| 成人免费乱码大片a毛片蜜芽| 一区二区三区在线免费观看| 偷窥丶亚洲丶熟女| 久久成人国产| 国产三级网站| 97久久超碰| 中文字幕无码高清| 三上悠亚一区二区| 乌克兰性爱视频| 国产成人A片| 欧美久久性爱视频| 无码免费一区| 国产欧美激情| 欧美久久久久久| 国产v片| 99re在线精品| 中文无码日本一级A片久久影视 | 一级黄色AV片| 国产成人亚洲综合AV婷婷| 水果派av| 91在线无码精品秘入口电车| 日韩少妇视频| 你懂的在线视频观看| 岛国无码av| 免费黄色在线观看| 嗯嗯啊啊网站| 婷婷国产亚洲精品网站| 成人免费爱爱视频| 91人妻论坛| 日本三级片免费| 激情无码一区二区| 一区二区三区四区五区六区高清无吗视频| 最近最经典中文MV字幕| 国产无遮挡又黄又爽免费网站| 国产激情综合在线| 亚洲精品成a人在线观看| 91香蕉国产在线观看| 先锋资源av在线| 91爱爱| 夫妻-ThePorn| 久久婷婷视频| 乱伦内射视频| 大香蕉在线电影| yjizz视频网| 蜜桃久久久| 国产亚洲欧美日韩高清| 男人色天堂网| 久久久无码人妻精品无码| 蜜桃久久久亚洲精品| 亚洲中文字幕av天堂| 中文字幕黄色片| 夜夜骚AV一二三区无码| 最新毛片网站| 人妖黄片| 最新毛片网站| 蜜桃av秘无码一区三区四| 亚洲成人午夜电影| 91站街农村熟女露脸| 亚洲免费小电影| 色诱av| 亚洲第一成网站| 国产无码激情| 亚洲精品无| 亚洲精品日韩无码| 天天逼网| 婷婷网址| 成人在线黄片| 福利视频网站| 午夜福利区| www黄色视频| 四虎影成人精品A片| 天天射日日干| 香蕉午夜视频| 欧美操逼逼| a片视频免费| 日韩中文字幕熟妇人妻| 在线欧美日韩| 蜜桃91精品秘入口内裤| 成人日皮视频| 精品乱码一区| 国产精品视频免费在线观看| 蜜桃视频91| 色爽AV| 午夜成人黄色电影| 91人妻论坛| 欧美一区二区精品| 久久久久久| 国产在线一区二区三区四区| 77777免费观看电视剧推荐爱的教育| 欧美国产第一页| wwwA片| 日韩免费小视频| 殴美色色网| 玖玖资源网站| 99成人电影| 麻豆视频国产| 亚洲国产精品成人综合色在线婷婷| 天天操夜夜操狠狠操| 日皮视频| 在线不卡| 中文字幕99页| 国产45页| 久久精品国产精品| 亚洲天堂在线观看视频网站| 欧美性69| 日韩精品极品视频在线观看免费| 天天爽日日澡AAAA片| 狠狠色噜噜狠狠狠7777| 自拍偷拍网| 9797色色| 中文字幕精品综合| 无码人妻一区二区三区免费n狂飙 性猛交AAAA片免费看蜜桃视频 | 中文字幕天堂网| 亚洲熟女一区| 欧美二区视频| 91精品国产乱码久久久竹菊| 香蕉视频毛片| 九九久久国产精品| 中文字幕一区二区三区四区五区六区 | 91无码国产成人精品| www.狠狠操| 日韩黄| 在线免费小黄片| 一级无码高清| 亚洲AV一级| 野花av| 自拍偷拍精品视频| 欧美99在线| 日韩五月天| 国产1级a毛a毛1级a毛1级| 色色网站| 麻豆久久久久| 人人色人人草| 婷婷激情四射| 欧美A色| 激情av在线观看| 俺去听听婷婷| 国产三级一区二区| 波多野结衣无码电影| 影音先锋蜜桃| 人人射| 麻豆传媒电影| 国内自拍网站| 无码人妻一区二区三区精品不付款 | 777国产盗摄偷窥精品0000| 欧美群交在线| 另类老妇奶性BBWBBwBBw| 久久欧洲成人精品无码区| 黄色网址在线免费观看| 久久综合大香蕉| 国产无码一区二区| 男人在线天堂| 欧美va亚洲va| 亚洲av在线观看| 亚洲国产熟妇无码日韩| 中文字幕资源在线| 51成人网站| 久久精品苍井空免费一区二| 中文字幕无码精品三级在线欧美| 亚洲精品在线视频| 大香蕉网在线| 免费AV资源在线观看| 亚洲理论电影| 处破女初破全过免费看| 国产精品一区二区黑人巨大| 亚洲影音先锋| 狼人香蕉网| 欧美激情亚洲无码| 99视频免费观看| 中文字幕久热| 唐嫣一级婬片A片AAA| 黄色视频网站在线观看| 中文字幕在线视频免费观看| 久一区| 精品视频在线观看| 婷婷91| 天天天日天天天天天天天日歌词 | 亚洲AV无码成人精品区天堂小说 | 大香蕉精品在线视频| 你懂的在线免费观看| 91视频网站| 六月丁香网| 中文字幕第23页| 久久无码影院| 国精产品一区二区三区黑人和中国 | 久久91精品| 国产久久精品视频| 国产美女操逼| 国产女主播在线观看| 亚洲一在线| 亚洲日韩中文字幕| 91高潮| 国产精品天天| 国产人妻精品一区二区三区不卡| 天天干夜夜骑| 深夜福利av| 99精品99| www.国产豆花精品区| 国产精品黄色电影| 亚洲成人精品一区二区| 亚洲AV片一区二区三区| 中文字幕在线视频观看| 91亚洲精品久久久久久久久久久久| 中文字幕国产在线观看| 国产牛牛在线| 91麻豆国产| 9999国产精品| 欧美18成人| 午夜免费播放观看在线视频| 成人在线一区二区| 九九色网| 久久a视频| 日本一级婬片A片免费看| 在线成人| 伊人视频在线| 99色婷婷| 亚洲一区色| 久草视频免费在线观看| 黄色视频在线免费播放| 国产精品视频在线免费观看| 精品视频导航| 成人视频18| 国产三级网| 日韩欧美成人网站| 久久人视频| 欧美一区二区丁香五月天激情| 国产美女自慰网站| 欧美一区二区三区免费| 亚洲另类图片小说| 中文av网站| 黄色激情五月天| 怡春院在线| 国产成人精品麻豆| 亚洲毛片亚洲毛片亚洲毛片 | 日韩爱爱网| 久久久久久免费毛片精品| 性爱av在线观看| av久| 天天射日日干| 日韩久久综合| 性九九九九九九| 国产熟女自拍| 成人性爱毛片| 日韩国产在线观看| 在线无码av| 日本一区二区三区在线观看网站| 丰满熟妇高潮呻吟无码| 伊人三级| 亚洲高清无码在线观看| 国产AV一区二区三区四区| 丁香欧美| 麻豆精品传媒2021md| 九七无码| 日日免费视频| 欧美在线视频99| 91九色在线观看| 99人妻在线| 日本亲子乱婬一级A片| 人妖无码| 加勒比在线视频| 97无码视频| 午夜免费视频1000| 国产成人免费做爰视频| 97精品人妻一区二区三区香蕉 | 无码日批| 美女做爱在线观看| 国产aa| 尻屄视频在线观看| 成人看片| 成人爽爽视频| 靠逼网站免费观看| 97香蕉久久夜色精品国产| 国产牛牛在线| 东京热视频网站| 亚洲成人精品在线观看| 成人在线免费网站| 天天视频国产| 国产免费www| 少妇高潮一区二区三区99| 女人高潮天天躁夜夜躁| 日韩中文字幕在线| 久久久黄片| 亚洲色天堂网| 天天色AV| 精品www| 人人干视频| 午夜xxx| 大香蕉伊人网在线| 亚洲精品乱码久久久久久按摩观| 四川少妇搡bbbbb搡多人| 91在线无码精品秘| 欧美AA片| 337P人体美鮑高清| AV无码一区二区三区| 久久人视频| 性欧美xxxx| 91在线无码精品秘网站| 亚洲高清在线| 一区不卡| 99精品视频在线观看免费| 欧美特黄AAAAAAAAA片| 日韩一级片在线播放| 精产国品一区二区三区| 中文字幕+乱码+中文乱码91在线观看 | 日本少妇无码| av一区二区三区四区| 黄色视频在线观看免费网站| 天天天天天天天干| 日韩a在线观看| 人妻九九九| 五月天激情片| 久久国产精品伦子伦| 麻豆91网站| 欧美三级片在线观看| 日韩欧美激情| 久久精品视频在线| 91绿帽人妻-ThePorn| 在线少妇| 欧美人妻激情| 国产一级二级视频| 九九九无码| a√免费看| 天天日人人| 在线观看亚| 国产精品久久7777777精品无码 | 黄色网页免费观看| 日本色情网| 亚洲色777| 午夜av免费在线| 91免费在线视频| 亚洲欧美性爱| 青草久久久| 国产黄色影院| 久热精品视频在线观看| 一本道中文字幕| 精品无码在线| 97在线观看免费视频| 五月天激情综合网| 日本免费不卡| 国产va在线| 国产AV无码高清| 麻豆激情视频| 在线观看老湿视频福利| 亚洲一区二区成人| 黄页av| 亚洲AV成人一区二区三区不卡| 亚洲免费大片| AAA精品| 国产精品美女久久久久久久久| 夜夜操天天| 丰满人妻一区二区三区精品高清| 日韩黄色电影在线| 欧美黄片区| 成人水蜜桃| 色老板在线精品免费观看| a√在线视频| 伊人精品大香蕉| 微拍福利一区二区| 无码日逼视频| 尤物视频网站在线观看| 婷婷成人小说| 色欲成人AV| 日韩电影免费在线观看| 91丨熟女露脸| 精品乱子伦一区二区三区下载 | 午夜福利视频3000| 久本草精品| 永久AV免费网站| 欧美熟女在线| 色操网| 日韩av小电影| WWW久久久| 免费A在线观看| 热久久91| 成人国产在线无码AV免费| 精品亚洲无码视频| 99热在线观看免费| 青娱乐伊人| 婷婷丁香五月综合| 国产激情片| 在线免费观看毛片| 国语对白做受欧美| 欧美1区| 激情婷婷五月| 操逼A片| 豆花视频在线观看| 欧美性爱精品一区| 青草碰| 色欧美亚洲| 国产又黄又大又粗| 五月天堂婷婷| 黄片视频在线免费播放| 操人在线观看| 亚洲精品白浆高清久久久久久| 99欧美精品| 欧美精品乱码99久久蜜桃| 日韩中文字幕网| 黄色视频导航| 日本高清不卡视频| 精品视频免费| 亚洲有码在线| 精品视频| 丁香五月欧美| 亚洲成人无码视频| 香蕉操逼小视频| 东北成人毛片| 色狠狠干| 国产suv精品一区二区6精华液 | 色xxx| 精品午夜福利| 久久99精品久久久久久| 免费无码国产在线观看| 香蕉久久国产AV一区二区| 炮友露脸青楼传媒刘颖儿| 999久久精品| 欧美性爱动态| 久久青青草在线视频| 久久久久久久9999| 免费黄色福利视频| 三级片亚洲| 99精品在线观看视频| 亚洲精品成人视频| 日韩综合色| 欧美丰满人妻免费视频人| 91视频一区| 91日综合欧美| 亚洲午夜福利一区二区三区| 亚洲日韩精品欧美一区二区yw| 国产日韩一区二区三免费高清| 色欲av网站| 日韩无码视频免费| 性天堂| www.av91| 欧美一级黄色电影| 99热1| 午夜亚洲AV永久无码精品蜜芽 | 亚洲三级无码在线观看| 日韩A片免费观看| 91麻豆精品在线观看| 成人免费激情视频| 五月婷亚洲精品AV天堂| 波多野结衣在线无码| 麻豆久久久| 五月天青青草超碰免费公开在线观看 | 精品免费囯产| 星空AV| 日本免费黄色小视频| 天天草天天撸| 在线视频日本| 99精品在线免费观看| 亚洲中文字幕AV| 操一炮在线视频| 精品视频中文字幕| 亚洲天堂AV在线观看| 麻豆AV在线播放| 伊人无码在线| 在线黄片视频| 五月丁香婷婷综合| 亚洲永久在线| 日逼老女人| 青青操b| 91麻豆精品视频| 色欲一区| 人妻少妇精品视频| 翔田千里被躁120分钟| 鲁鲁鲁鲁鲁鲁鲁777777| 久久国产精品精品国产色婷婷| 亚洲v区| 伊人福利导航| 无码国产精品一区二区免费96| 久久久久久精品国产三级| AV在线播放中文字幕| 在线观看日韩精品| 麻豆做爱| 日逼网站免费观看| 无码人妻一区二区| 欧美人妻视频在线| 99在线小视频| 我想看操逼| 色婷婷AV一区二区三区之e本道| 第一福利视频| 日皮做爱视频网站| 丁香激情综合| 丰滿人妻-区二区三区| 久久免费视频1| 伊人天天干| 国产高清AV| 欧美大胆a| 一级香蕉视频| 先锋影音中文字幕| 骚逼AV| 韩国精品久久久| 青娱乐国产精品一区二区| 青青草免费在线观看| 中国无码视频| 最近最好的2019中文| 脓肿是什么原因引起的,该怎么治疗 | 国产三级AV在线观看| 久久av一区二区三区观看| 色欲91| 中文字幕精品亚洲熟女| 亚洲一区二区无码| 亚洲人妻性爱| 国产成人秘在线观看免费网站 | 99人妻人人爽人人添人人精品| avav无码| 青娱乐A片| 91成人在线电影| 激情av| 人妻一区二区三区| 天天撸天天色| 色呦呦视频在线观看| 91精品国产99久久久久久天美 | 日韩欧美成人在线视频| 一本色道久久88加勒比| 久久99视频| 日皮视频在线观看免费| 99热免费精品| 毛多水多丰满女人A片| 午夜一区二区三区| 人妻体体内射精一区二区| 久久天堂AV综合合色蜜桃网| 国产在线高潮| 日韩人妻精品中文字幕免费| 777国产盗摄偷窥精品0000 | 国产三级av在线| 中文字幕在线视频观看| 夜夜骑免费视频| 国产av三级| 五月天婷婷综合| 大香蕉75| 国产精品乱码一区二区三区| 亚洲成人二区| 操逼影视| 四虎2025在线51| 香蕉中文在线| 国产成人免费做爰视频| 五月激情综合网| 怡春院日韩| 操操操无码| 黄色视频网站在线观看免费| 逼特逼视频| 91无码一区二区| 欧美一级特黄AAAAAA片| 成人毛片在线观看| 国产精品视频瘾无码| 亚欧一区二区| 噜噜噜在线| 国产96在线亚洲| 黄色小视频在线| 豆花av在线| 日韩一级一级| 欧美激情伊人| 暖暖高清无码| 午夜性福利| 操青青| 久久久69| 免费黄色网页| 无码字幕| 高清无码不卡视频| 热99re69精品8在线播放| 国产骚逼| 狠狠干2022| aa免费视频| 爱爱网址| 亚洲成人无码高清| 91成人大片| 91操操| 黄色搞逼视频| 2025av在线| 亚洲AV无码成人精品| 9l蝌蚪PORNY中文| 国产黄色视频网站在线观看| 免费无码视频在线观看| 久久久精品无码| 182av| 国产精品久久久久毛片SUV| 91九色精品女同系列| 日韩黄网站| 日本黄色免费| 北条麻妃精品视频| 午夜成人福利剧场| 免费看欧美成人A片无码| 欧美激情xxx| 国内久久婷婷| 日韩一二区| 一区二区三区四区在线视频| 亚洲成人影片在线观看| 精品视频在线播放| 婷婷久久久久久| 毛片18| 青青草五月天色婷婷丁香| 亚洲成人精品AV| 精品国产一区二区三区久久久蜜月| 欧美日本成人网站入口| 欧美成在线视频| 麻豆mdapp03.tⅴ| 欧美第一网站| yw在线播放| 无码v| 中文字幕无码一区二区三区一本久| 狠狠干五月天| 国产精品视频| 亚洲无码在线观看网站| 三级麻豆| 污视频在线| 亚洲色欲av| 无码人妻一区二区三区| 欧美系列在线| 暖暖在线视频| 日本三级网址| 青青草原成人在线视频| 爱搞搞就搞搞| 偷拍内射| 再深点灬好爽灬轻点久久国产| 一级A片免费黄色视频| 国内精品久久久久久久久久| 日韩性爱无码| 狼友视频免费观看|