日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

Go語言:利用Govaluate構(gòu)建規(guī)則配置引擎

來源: 責(zé)編: 時間:2024-05-27 08:57:50 220觀看
導(dǎo)讀Govaluate簡介Govaluate 是一個 Go 語言的表達(dá)式評估庫,允許你在運(yùn)行時動態(tài)評估字符串表達(dá)式。雖然它不是一個完整的規(guī)則引擎,但可以用于實(shí)現(xiàn)一些簡單的規(guī)則評估功能。以下是一個簡單示例,展示如何使用 Govaluate:首先,你

Govaluate簡介

Govaluate 是一個 Go 語言的表達(dá)式評估庫,允許你在運(yùn)行時動態(tài)評估字符串表達(dá)式。雖然它不是一個完整的規(guī)則引擎,但可以用于實(shí)現(xiàn)一些簡單的規(guī)則評估功能。qIo28資訊網(wǎng)——每日最新資訊28at.com

以下是一個簡單示例,展示如何使用 Govaluate:qIo28資訊網(wǎng)——每日最新資訊28at.com

首先,你需要導(dǎo)入 Govaluate 庫:qIo28資訊網(wǎng)——每日最新資訊28at.com

import "github.com/Knetic/govaluate"

然后,你可以編寫代碼進(jìn)行表達(dá)式評估:qIo28資訊網(wǎng)——每日最新資訊28at.com

package mainimport (    "fmt"    "github.com/Knetic/govaluate")func main() {    // 準(zhǔn)備表達(dá)式    expression, err := govaluate.NewEvaluableExpression("value > 10")    if err != nil {        fmt.Println("Error creating expression:", err)        return    }        // 準(zhǔn)備數(shù)據(jù)    parameters := map[string]interface{}{        "value": 15,    }        // 評估表達(dá)式    result, err := expression.Evaluate(parameters)    if err != nil {        fmt.Println("Error evaluating expression:", err)        return    }        // 輸出評估結(jié)果    fmt.Println("Expression evaluation result:", result)}

在這個示例中,我們創(chuàng)建了一個簡單的表達(dá)式 value > 10,然后使用 Govaluate 對其進(jìn)行評估。我們還準(zhǔn)備了一個包含了參數(shù) "value" 的 parameters 映射,其中的值是 15。最后,我們輸出了表達(dá)式的評估結(jié)果。qIo28資訊網(wǎng)——每日最新資訊28at.com

Govaluate 提供了一種簡單而靈活的方法來進(jìn)行表達(dá)式評估,可以用于實(shí)現(xiàn)一些基本的規(guī)則評估功能。但是,如果你需要更復(fù)雜的規(guī)則引擎功能,可能需要考慮使用其他專門的規(guī)則引擎庫。qIo28資訊網(wǎng)——每日最新資訊28at.com

除了 Govaluate 之外,還有一些其他的表達(dá)式評估庫,雖然它們沒有 Govaluate 那么流行,但它們提供了更多功能和更完整的支持。qIo28資訊網(wǎng)——每日最新資訊28at.com

自定義函數(shù)

functions := map[string]govaluate.ExpressionFunction{		"strlen": func(args ...interface{}) (interface{}, error) {			str, ok := args[0].(string)			if !ok {				return nil, fmt.Errorf("strlen function requires a string argument")			}			length := len(str)			return float64(length), nil // 返回字符串的長度和 nil 錯誤		},	}	// 定義表達(dá)式字符串	exprString := "strlen('teststringdsa') > 10"	// 創(chuàng)建可評估的表達(dá)式	expr, err := govaluate.NewEvaluableExpressionWithFunctions(exprString, functions)	if err != nil {		fmt.Println("Error:", err)		return	}	// 執(zhí)行表達(dá)式	result, err := expr.Evaluate(nil)	if err != nil {		fmt.Println("Error:", err)		return	}	fmt.Println(result)

語法

govaluate 是一個支持基本數(shù)學(xué)和邏輯運(yùn)算的表達(dá)式求值器。默認(rèn)情況下,它支持以下語法qIo28資訊網(wǎng)——每日最新資訊28at.com

基本運(yùn)算符

  • + 加法
  • - 減法
  • * 乘法
  • / 除法
  • % 取模
  • ^ 冪運(yùn)算

比較運(yùn)算符

  • == 等于
  • != 不等于
  • < 小于
  • > 大于
  • <= 小于等于
  • >= 大于等于

邏輯運(yùn)算符

  • && 邏輯與
  • || 邏輯或
  • ! 邏輯非

其他

  • 括號 ( 和 ) 用于改變運(yùn)算優(yōu)先級
  • 數(shù)字和字符串常量

這些是 govaluate 默認(rèn)支持的主要語法。但是,我們可以通過自定義函數(shù)來擴(kuò)展其功能,以支持更復(fù)雜的表達(dá)式。qIo28資訊網(wǎng)——每日最新資訊28at.com

自定義函數(shù)

我們可以考慮把go語言中自帶的庫集成進(jìn)去,例如,下面是數(shù)據(jù)函數(shù)庫qIo28資訊網(wǎng)——每日最新資訊28at.com

package methodimport (	"fmt"	"math")// Abs 返回 x 的絕對值func Abs(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Abs function requires 1 argument")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("argument must be a float64")	}	return math.Abs(x), nil}// Ceil 返回不小于 x 的最小整數(shù)值,即向上取整func Ceil(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Ceil function requires 1 argument")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("argument must be a float64")	}	return math.Ceil(x), nil}// Floor 返回不大于 x 的最大整數(shù)值,即向下取整func Floor(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Floor function requires 1 argument")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("argument must be a float64")	}	return math.Floor(x), nil}// Max 返回 x 和 y 中的最大值func Max(args ...interface{}) (interface{}, error) {	if len(args) != 2 {		return nil, fmt.Errorf("Max function requires 2 arguments")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("arguments must be float64")	}	y, ok := args[1].(float64)	if !ok {		return nil, fmt.Errorf("arguments must be float64")	}	return math.Max(x, y), nil}// Min 返回 x 和 y 中的最小值func Min(args ...interface{}) (interface{}, error) {	if len(args) != 2 {		return nil, fmt.Errorf("Min function requires 2 arguments")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("arguments must be float64")	}	y, ok := args[1].(float64)	if !ok {		return nil, fmt.Errorf("arguments must be float64")	}	return math.Min(x, y), nil}// Pow 返回 x 的 y 次冪的值func Pow(args ...interface{}) (interface{}, error) {	if len(args) != 2 {		return nil, fmt.Errorf("Pow function requires 2 arguments")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("arguments must be float64")	}	y, ok := args[1].(float64)	if !ok {		return nil, fmt.Errorf("arguments must be float64")	}	return math.Pow(x, y), nil}// Sqrt 返回 x 的平方根func Sqrt(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Sqrt function requires 1 argument")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("argument must be a float64")	}	return math.Sqrt(x), nil}// Round 返回最接近 x 的整數(shù),四舍五入func Round(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Round function requires 1 argument")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("argument must be a float64")	}	return math.Round(x), nil}// Trunc 返回 x 的整數(shù)部分,舍棄小數(shù)部分func Trunc(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Trunc function requires 1 argument")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("argument must be a float64")	}	return math.Trunc(x), nil}// Sin 返回 x 的正弦值func Sin(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Sin function requires 1 argument")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("argument must be a float64")	}	return math.Sin(x), nil}// Cos 返回 x 的余弦值func Cos(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Cos function requires 1 argument")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("argument must be a float64")	}	return math.Cos(x), nil}// Tan 返回 x 的正切值func Tan(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Tan function requires 1 argument")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("argument must be a float64")	}	return math.Tan(x), nil}// Asin 返回 x 的反正弦值func Asin(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Asin function requires 1 argument")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("argument must be a float64")	}	return math.Asin(x), nil}// Acos 返回 x 的反余弦值func Acos(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Acos function requires 1 argument")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("argument must be a float64")	}	return math.Acos(x), nil}// Atan 返回 x 的反正切值func Atan(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Atan function requires 1 argument")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("argument must be a float64")	}	return math.Atan(x), nil}// Atan2 返回點(diǎn) (y, x) 的反正切值func Atan2(args ...interface{}) (interface{}, error) {	if len(args) != 2 {		return nil, fmt.Errorf("Atan2 function requires 2 arguments")	}	y, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("arguments must be float64")	}	x, ok := args[1].(float64)	if !ok {		return nil, fmt.Errorf("arguments must be float64")	}	return math.Atan2(y, x), nil}// Exp 返回 e 的 x 次冪的值func Exp(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Exp function requires 1 argument")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("argument must be a float64")	}	return math.Exp(x), nil}// Log 返回 x 的自然對數(shù)func Log(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Log function requires 1 argument")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("argument must be a float64")	}	return math.Log(x), nil}// Log10 返回 x 的以 10 為底的對數(shù)func Log10(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Log10 function requires 1 argument")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("argument must be a float64")	}	return math.Log10(x), nil}// Mod 返回 x 除以 y 的余數(shù)func Mod(args ...interface{}) (interface{}, error) {	if len(args) != 2 {		return nil, fmt.Errorf("Mod function requires 2 arguments")	}	x, ok := args[0].(float64)	if !ok {		return nil, fmt.Errorf("arguments must be float64")	}	y, ok := args[1].(float64)	if !ok {		return nil, fmt.Errorf("arguments must be float64")	}	return math.Mod(x, y), nil}// Inf 返回指定符號的正無窮大數(shù)值func Inf(args ...interface{}) (interface{}, error) {	if len(args) != 1 {		return nil, fmt.Errorf("Inf function requires 1 argument")	}	sign, ok := args[0].(int)	if !ok {		return nil, fmt.Errorf("argument must be an int")	}	return math.Inf(sign), nil}

govaluate應(yīng)用場景

判斷

動態(tài)條件判斷

使用govaluate可以在運(yùn)行時根據(jù)給定的條件字符串進(jìn)行條件判斷,例如,基于用戶輸入的條件判斷是否執(zhí)行特定的操作。qIo28資訊網(wǎng)——每日最新資訊28at.com

規(guī)則引擎

作為規(guī)則引擎的一部分,可以使用govaluate來解析和執(zhí)行規(guī)則,例如,在金融領(lǐng)域中根據(jù)一系列條件制定交易策略。qIo28資訊網(wǎng)——每日最新資訊28at.com

配置文件解析

在解析配置文件時,可以使用govaluate來解析條件,以確定何時激活特定的配置選項(xiàng)。qIo28資訊網(wǎng)——每日最新資訊28at.com

求值

動態(tài)表達(dá)式求值

govaluate可以用于動態(tài)計算表達(dá)式的值,例如,在計算器應(yīng)用中,可以讓用戶輸入表達(dá)式,然后使用govaluate計算結(jié)果。qIo28資訊網(wǎng)——每日最新資訊28at.com

動態(tài)參數(shù)計算

當(dāng)需要在運(yùn)行時計算參數(shù)值時,可以使用govaluate,例如,在科學(xué)計算中,根據(jù)用戶輸入的參數(shù)計算函數(shù)的值。qIo28資訊網(wǎng)——每日最新資訊28at.com

動態(tài)數(shù)據(jù)過濾

在數(shù)據(jù)處理中,可以使用govaluate來動態(tài)過濾數(shù)據(jù),例如,在數(shù)據(jù)分析應(yīng)用中,根據(jù)用戶輸入的條件過濾數(shù)據(jù)。qIo28資訊網(wǎng)——每日最新資訊28at.com

以上是一些govaluate的應(yīng)用場景,它的靈活性和易用性使其在各種領(lǐng)域都有廣泛的應(yīng)用。qIo28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-90860-0.htmlGo語言:利用Govaluate構(gòu)建規(guī)則配置引擎

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 避免鎖表:為Update語句中的Where條件添加索引字段

下一篇: 為什么Webpack打包慢?為什么Vite會比Webpack快?如何提高Webpack速度?

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 石頭智能洗地機(jī)A10 Plus體驗(yàn):雙向自清潔治好了我的懶癌

    一、前言和介紹專為家庭請假懶人而生的石頭科技在近日又帶來了自己的全新旗艦新品,石頭智能洗地機(jī)A10 Plus。從這個產(chǎn)品名上就不難看出,這次石頭推出的并不是常見的掃地機(jī)器
  • 十個可以手動編寫的 JavaScript 數(shù)組 API

    JavaScript 中有很多API,使用得當(dāng),會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進(jìn)行一次小總結(jié)。現(xiàn)在開始吧。1.forEach()forEach()用于遍歷數(shù)組接收一參
  • 學(xué)習(xí)JavaScript的10個理由...

    作者 | Simplilearn編譯 | 王瑞平當(dāng)你決心學(xué)習(xí)一門語言的時候,很難選擇到底應(yīng)該學(xué)習(xí)哪一門,常用的語言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 微信語音大揭秘:為什么禁止轉(zhuǎn)發(fā)?

    大家好,我是你們的小米。今天,我要和大家聊一個有趣的話題:為什么微信語音不可以轉(zhuǎn)發(fā)?這是一個我們經(jīng)常在日常使用中遇到的問題,也是一個讓很多人好奇的問題。讓我們一起來揭開這
  • 中國家電海外掘金正當(dāng)時|出海專題

    作者|吳南南編輯|胡展嘉運(yùn)營|陳佳慧出品|零態(tài)LT(ID:LingTai_LT)2023年,出海市場戰(zhàn)況空前,中國創(chuàng)業(yè)者在海外紛紛摩拳擦掌,以期能夠把中國的商業(yè)模式、創(chuàng)業(yè)理念、戰(zhàn)略打法輸出海外,他們依
  • 自律,給不了Keep自由!

    來源 | 互聯(lián)網(wǎng)品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • 網(wǎng)傳小米汽車開始篩選交付中心 建筑面積不低于3000平方米

    7月7日消息,近日有微博網(wǎng)友@長三角行健者爆料稱,據(jù)經(jīng)銷商集團(tuán)反饋,小米汽車目前已經(jīng)開始了交付中心的篩選工作,要求候選場地至少有120個車位,建筑不能低
  • 三星Galaxy Z Fold5官方渲染圖曝光:13.4mm折疊厚度依舊感人

    據(jù)官方此前宣布,三星將于7月26日在韓國首爾舉辦Unpacked活動,屆時將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • 上海舉辦人工智能大會活動,建設(shè)人工智能新高地

    人工智能大會在上海浦江兩岸隆重拉開帷幕,人工智能新技術(shù)、新產(chǎn)品、新應(yīng)用、新理念集中亮相。8月30日晚,作為大會的特色活動之一的上海人工智能發(fā)展盛典人工
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
韩国精品在线观看| 亚洲精品乱码| 国产日产欧美精品| 国产一区二区三区的电影| 激情五月综合色婷婷一区二区| **网站欧美大片在线观看| 亚洲精品欧美激情| 亚洲欧美激情视频| 久久影视三级福利片| 欧美日韩国产成人高清视频| 国产精品国产三级国产专播品爱网| 国产精品专区第二| 亚洲黄色一区| 亚洲欧美经典视频| 玖玖玖免费嫩草在线影院一区| 欧美日本高清| 国内精品免费午夜毛片| 99精品国产在热久久| 久久激情五月丁香伊人| 欧美日韩视频专区在线播放| 国产一区二区三区奇米久涩 | 伊人久久男人天堂| 99在线|亚洲一区二区| 欧美高清在线播放| 另类天堂av| 国产精品毛片va一区二区三区| 欧美日韩成人综合天天影院| 国产欧美精品在线观看| 亚洲激情啪啪| 欧美一区二区精品| 欧美久久电影| 国产综合在线看| 中国成人黄色视屏| 老司机精品导航| 国产精品爽黄69| 亚洲乱码国产乱码精品精天堂 | 国产精品系列在线播放| 91久久综合| 久久久久久久一区二区三区| 欧美午夜女人视频在线| 91久久精品网| 久久久久.com| 国产精品一区免费观看| 9久re热视频在线精品| 久热精品视频| 国内成+人亚洲+欧美+综合在线| 亚洲一区在线免费观看| 亚洲国产精品高清久久久| 亚洲欧美日韩精品| 欧美性做爰猛烈叫床潮| 欧美激情精品久久久久久黑人| 蜜桃av噜噜一区| 国产精品扒开腿做爽爽爽视频| 亚洲国产精品久久久久婷婷老年 | 亚洲女同在线| 欧美极品aⅴ影院| 亚洲第一页自拍| 久久久欧美一区二区| 国产视频久久| 午夜在线成人av| 国产精品成人v| 在线亚洲高清视频| 欧美日韩国语| 亚洲精品免费在线| 免费不卡视频| 亚洲第一中文字幕| 久久亚洲春色中文字幕| 国产尤物精品| 久久aⅴ国产欧美74aaa| 国产麻豆精品theporn| 亚洲在线黄色| 国产精品美女久久久久久久| 这里只有精品电影| 欧美三级日韩三级国产三级| 亚洲美女视频在线观看| 欧美理论片在线观看| 亚洲免费av网站| 欧美日韩国产不卡| 9色精品在线| 欧美国产综合一区二区| 狠狠色丁香婷婷综合| 亚洲国产日韩在线| 美日韩精品免费观看视频| 久久精品国产2020观看福利| 国产目拍亚洲精品99久久精品| 亚洲一区二区在线免费观看| 欧美视频精品一区| 亚洲深夜激情| 欧美亚一区二区| 亚洲一区二区av电影| 国产精品久久777777毛茸茸| 亚洲午夜精品在线| 国产精品国产福利国产秒拍| 亚洲一区二区不卡免费| 国产精品女人毛片| 欧美一区二区精品久久911| 国产欧美精品| 久久久久欧美精品| 亚洲国产高清一区二区三区| 欧美大片免费久久精品三p| 亚洲精品视频在线观看网站| 欧美日韩国产bt| 亚洲一区美女视频在线观看免费| 国产精品视频免费观看www| 欧美专区在线| 1024国产精品| 欧美日韩久久不卡| 午夜国产一区| 狠久久av成人天堂| 欧美高清视频| 亚洲一区二区三区影院| 国产午夜精品福利| 欧美成人精品激情在线观看| 一本一本久久a久久精品综合麻豆| 国产精品国产三级国产aⅴ浪潮 | 亚洲国产女人aaa毛片在线| 欧美日韩成人在线播放| 午夜精品国产更新| 精品999网站| 欧美精品久久久久久久免费观看 | 精东粉嫩av免费一区二区三区| 欧美高清在线一区| 亚洲影院高清在线| 伊人久久久大香线蕉综合直播 | 国产精品日日做人人爱| 久久婷婷成人综合色| 99国产精品久久久| 国产日韩欧美一区二区三区四区 | 欧美人在线观看| 欧美一区午夜视频在线观看| 亚洲国产高清一区二区三区| 国产精品久久久久久av福利软件| 久久精品一区二区三区不卡牛牛| 亚洲精品五月天| 国产日韩一区欧美| 欧美激情第二页| 羞羞漫画18久久大片| 亚洲欧洲在线观看| 国产美女诱惑一区二区| 欧美国产91| 久久国产福利| 中文亚洲欧美| 亚洲国产小视频在线观看| 国产精品欧美日韩久久| 欧美成人在线影院| 欧美尤物一区| 一区二区91| 欧美丝袜一区二区| 美女主播视频一区| 久久久蜜桃一区二区人| 激情综合色综合久久| 欧美成人精品三级在线观看| 亚洲欧美激情视频在线观看一区二区三区| 一区视频在线播放| 国产精品videosex极品| 久久久之久亚州精品露出| 亚洲视频 欧洲视频| 原创国产精品91| 国产麻豆综合| 欧美日韩综合在线免费观看| 久久亚洲精品一区二区| 香蕉乱码成人久久天堂爱免费 | 久久久噜噜噜久久| 亚洲伊人网站| 99精品免费视频| **欧美日韩vr在线| 国产午夜精品一区理论片飘花| 欧美日韩午夜在线| 欧美激情第8页| 噜噜噜躁狠狠躁狠狠精品视频| 欧美怡红院视频一区二区三区| 中文av字幕一区| 最新中文字幕一区二区三区| 韩国成人精品a∨在线观看| 国产精品亚洲综合久久| 欧美日韩一区二区免费视频| 欧美高清在线一区二区| 免费成人av在线| 久久久久久高潮国产精品视| 性伦欧美刺激片在线观看| 亚洲视频日本| 一区二区三区色| 99热在这里有精品免费| 亚洲全黄一级网站| 亚洲电影免费观看高清| 国内成人在线| 国产在线观看一区| 国产亚洲一区二区三区在线播放| 国产精品毛片大码女人| 国产精品爱久久久久久久| 欧美日韩在线观看视频| 欧美母乳在线| 欧美日韩另类视频| 欧美日韩精品综合| 欧美色网一区二区| 欧美视频国产精品| 欧美午夜片在线观看| 欧美系列亚洲系列| 欧美性猛交99久久久久99按摩| 欧美日韩免费观看中文| 欧美日韩在线一区| 国产精品视频你懂的| 国产欧美精品一区二区色综合| 国产精品亚洲片夜色在线|