久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

golang使用json格式實(shí)現(xiàn)增刪查改的實(shí)現(xiàn)示例

瀏覽:133日期:2024-05-30 15:52:53

需求和思路

在一般的小項(xiàng)目或者一個(gè)小軟件,例如客戶端之類的小程序中,可能會需要數(shù)據(jù)的持久化.但是使用一般的數(shù)據(jù)庫(Mysql)之類的不合適.使用sqlite3這種嵌入式的是個(gè)較好的方法,但是Go語言中sqlite3的庫是C語言的,Cgo不支持跨平臺編譯.正是由于這種需求,才想到使用json格式將數(shù)據(jù)直接保存在文件中.具體的思路是怎么樣呢? 在Go語言中如果要將數(shù)據(jù)轉(zhuǎn)化成json格式的話,有兩種格式 struct 和 map. 如果同時(shí)需要增刪查改功能的話,將map作為中間格式是比較合適的.接下來我們就來實(shí)現(xiàn)它.

查詢操作

這種操作的實(shí)現(xiàn)比較簡單,直接將文件中的數(shù)據(jù)讀取出來,使用json庫反序列化就可以了. 代碼如下 :

type Product struct { Name string `json:'name'` Num int `json:'num'`}func findAll() { ps := make([]Product, 0) data, err := ioutil.ReadFile('./index.json') if err != nil { log.Fatal(err) } // 這里參數(shù)要指定為變量的地址 err = json.Unmarshal(data, &ps) if err != nil { log.Fatal(err) } fmt.Println(ps)}

添加操作

添加的實(shí)現(xiàn)實(shí)在查詢的基礎(chǔ)上的,我們需要先查詢文件中的數(shù)據(jù)庫,并轉(zhuǎn)化為map格式,再將struct也轉(zhuǎn)化為map格式(這里要使用反射),合并map,json序列化,最后保存在文件中.代碼如下:

func create() { fields := make([]map[string]interface{}, 0) p1 := &Product{ Name: 'Blog', Num: 2, } _, _ = json.Marshal(p1) // 讀取文件中的數(shù)據(jù),保存為map格式 data, _ := ioutil.ReadFile('./index.json') err := json.Unmarshal(data, &fields) if err != nil { log.Fatal(err) } // 使用反射將struct轉(zhuǎn)化為map tp := reflect.TypeOf(p1).Elem() vp := reflect.ValueOf(p1).Elem() field := make(map[string]interface{}, 0) for i := 0; i < tp.NumField(); i++ { field1 := tp.Field(i) field2 := vp.Field(i) key := field1.Tag.Get('json') field[key] = field2.Interface() } // 合并map fields = append(fields, field) // 寫入文件 out, _ := json.Marshal(fields) _ = ioutil.WriteFile('./index.json', out, 0755)}

條件查詢

思路: 將struct轉(zhuǎn)化為map,根據(jù)輸入的條件查詢.查詢的結(jié)果轉(zhuǎn)化為struct.代碼如下:

func FindOne() { product := &Product{} p1 := &Product{ Name: 'John', Num: 23, } // 使用反射將struct轉(zhuǎn)化為map tp := reflect.TypeOf(p1).Elem() vp := reflect.ValueOf(p1).Elem() field := make(map[string]interface{}, 0) for i := 0; i < tp.NumField(); i++ { field1 := tp.Field(i) field2 := vp.Field(i) key := field1.Tag.Get('json') switch field2.Kind() { case reflect.Int: field[key] = float64(field2.Interface().(int)) case reflect.Int8: field[key] = float64(field2.Interface().(int8)) case reflect.Int16: field[key] = float64(field2.Interface().(int16)) case reflect.Int32: field[key] = float64(field2.Interface().(int32)) case reflect.Int64: field[key] = float64(field2.Interface().(int64)) case reflect.Uint: field[key] = float64(field2.Interface().(uint)) case reflect.Uint8: field[key] = float64(field2.Interface().(uint8)) case reflect.Uint16: field[key] = float64(field2.Interface().(uint16)) case reflect.Uint32: field[key] = float64(field2.Interface().(uint32)) case reflect.Uint64: field[key] = float64(field2.Interface().(uint64)) case reflect.Float32: field[key] = float64(field2.Interface().(float32)) case reflect.Float64: field[key] = field2.Interface() default: field[key] = field2.Interface() } } _, _ = json.Marshal(p1) // 讀取文件中的數(shù)據(jù),保存為map格式 // 數(shù)據(jù)轉(zhuǎn)化為map時(shí),數(shù)值類型的統(tǒng)一變成float64 data, _ := ioutil.ReadFile('./index.json') fields := make([]map[string]interface{}, 0) err := json.Unmarshal(data, &fields) if err != nil { log.Fatal(err) } // 查詢的條件 columns := []string{'name', 'num'} length := len(columns) for _, item := range fields { for i := 0; i < length; i++ { // 這里的比較需要改進(jìn) if item[columns[i]] != field[columns[i]] {break } if i == length-1 {field = itemgoto OVER } } }OVER: fmt.Println(field) out, _ := json.Marshal(field) _ = json.Unmarshal(out, &product) fmt.Println(product)}

修改操作

修改操作在查詢操作的基礎(chǔ)上實(shí)現(xiàn), 修改操作需要有一個(gè)id值,能確定元素的唯一性.代碼如下:

func Update() { p1 := &Product{ Id: '2bbec87025968879c3c9682abe3bf730', Name: 'John_e', Num: 100, } // 使用反射將struct轉(zhuǎn)化為map tp := reflect.TypeOf(p1).Elem() vp := reflect.ValueOf(p1).Elem() field := make(map[string]interface{}, 0) for i := 0; i < tp.NumField(); i++ { field1 := tp.Field(i) field2 := vp.Field(i) key := field1.Tag.Get('json') switch field2.Kind() { case reflect.Int: field[key] = float64(field2.Interface().(int)) case reflect.Int8: field[key] = float64(field2.Interface().(int8)) case reflect.Int16: field[key] = float64(field2.Interface().(int16)) case reflect.Int32: field[key] = float64(field2.Interface().(int32)) case reflect.Int64: field[key] = float64(field2.Interface().(int64)) case reflect.Uint: field[key] = float64(field2.Interface().(uint)) case reflect.Uint8: field[key] = float64(field2.Interface().(uint8)) case reflect.Uint16: field[key] = float64(field2.Interface().(uint16)) case reflect.Uint32: field[key] = float64(field2.Interface().(uint32)) case reflect.Uint64: field[key] = float64(field2.Interface().(uint64)) case reflect.Float32: field[key] = float64(field2.Interface().(float32)) case reflect.Float64: field[key] = field2.Interface() default: field[key] = field2.Interface() } } _, _ = json.Marshal(p1) // 讀取文件中的數(shù)據(jù),保存為map格式 // 數(shù)據(jù)轉(zhuǎn)化為map時(shí),數(shù)值類型的統(tǒng)一變成float64 data, _ := ioutil.ReadFile('./index.json') fields := make([]map[string]interface{}, 0) err := json.Unmarshal(data, &fields) if err != nil { log.Fatal(err) } // 修改的條件 columns := []string{'name', 'num'} for _, v := range fields { if v['_id'] == field['_id'] { for _, col := range columns {v[col] = field[col] } field = v } } out, _ := json.MarshalIndent(fields, '', ' ') _ = ioutil.WriteFile('./index.json', out, 0755)}

刪除操作

最后就是刪除操作了,這個(gè)比較思路簡單,輸入唯一的id值,刪除對應(yīng)的字段,再保存到文件就可以了.代碼如下:

func Delete() { p1 := &Product{ Id: 'db43fa2d4f69cddce7494941cb36032b', Name: 'John_e', Num: 100, } _, _ = json.Marshal(p1) // 讀取文件中的數(shù)據(jù),保存為map格式 // 數(shù)據(jù)轉(zhuǎn)化為map時(shí),數(shù)值類型的統(tǒng)一變成float64 data, _ := ioutil.ReadFile('./index.json') fields := make([]map[string]interface{}, 0) err := json.Unmarshal(data, &fields) if err != nil { log.Fatal(err) } length := len(fields) for index, field := range fields { if field['_id'] == p1.Id { if index == length - 1 {fields = fields[0:index] } else {fields = append(fields[0:index], fields[index+1:]...) } } } out, _ := json.MarshalIndent(fields, '', ' ') _ = ioutil.WriteFile('./index.json', out, 0755)}

完整版

最后在附上完整版代碼:

package storeimport ( 'bytes' 'crypto/md5' 'encoding/json' 'errors' 'fmt' 'io/ioutil' 'os' 'path/filepath' 'reflect' 'strings' 'time')type Store struct { Dir string}func NewStore(dir string) (*Store, error) { // .開頭的為相對路徑,補(bǔ)全為全路徑 if strings.HasPrefix(dir, '.') { pwd, _ := os.Getwd() dir = filepath.Join(pwd, dir) } store := &Store{Dir: dir} st, err := os.Stat(dir) if err != nil { err = os.Mkdir(dir, 0755) if err != nil { return nil, err } } else if st != nil && !st.IsDir() { return nil, errors.New('file already exists') } return store, nil}// 創(chuàng)建與結(jié)構(gòu)體對應(yīng)的json文件func (s *Store) Sync(values ...interface{}) error { for _, v := range values { tb := parseTn(v) if tb == '' { return errors.New('does not find store') } _path := filepath.Join(s.Dir, tb) _, err := os.Stat(_path) if err != nil { _ = ioutil.WriteFile(_path, []byte('[]'), 0755) } } return nil}// 刪除所有func (s *Store) Destroy() error { return os.RemoveAll(s.Dir)}func (s *Store) FindAll(v interface{}) error { _path, err := s.before(v) if err != nil { return err } out, err := s.readAll(_path) if err != nil { return err } err = json.Unmarshal(out, &v) return err}func (s *Store) FindOne(v interface{}, columns ...string) (interface{}, error) { _path, err := s.before(v) if err != nil { return nil, err } data, err := s.readAll(_path) if err != nil { return nil, err } fields := make([]map[string]interface{}, 0) err = json.Unmarshal(data, &fields) if err != nil { return nil, err } m := structToMap(v) length := len(columns) for _, item := range fields { for i := 0; i < length; i++ { // TODO 這里的比較需要改進(jìn) if item[columns[i]] != m[columns[i]] {break } if i == length-1 {m = itemgoto OVER } } }OVER: err = mapToStruct(m, &v) if err != nil { return nil, err } return v, nil}func (s *Store) Create(v interface{}) error { _path, err := s.before(v) if err != nil { return err } data, err := s.readAll(_path) if err != nil { return err } fields := make([]map[string]interface{}, 0) err = json.Unmarshal(data, &fields) if err != nil { return err } m := structToMap(v) m['_id'] = randId() fields = append(fields, m) err = s.writeAll(_path, fields) if err != nil { return err } err = mapToStruct(m, v) if err != nil { return err } return nil}func (s *Store) Update(v interface{}, columns ...string) error { _path, err := s.before(v) if err != nil { return err } data, err := s.readAll(_path) if err != nil { return err } fields := make([]map[string]interface{}, 0) err = json.Unmarshal(data, &fields) if err != nil { return err } m := structToMap(v) for _, v := range fields { if v['_id'] == m['_id'] { for _, col := range columns {v[col] = m[col] } m = v } } err = s.writeAll(_path, fields) if err != nil { return err } return nil}func (s *Store) Delete(v interface{}) error { _path, err := s.before(v) if err != nil { return err } data, err := s.readAll(_path) if err != nil { return err } fields := make([]map[string]interface{}, 0) err = json.Unmarshal(data, &fields) if err != nil { return err } m := structToMap(v) length := len(fields) for index, field := range fields { if field['_id'] == m['_id'] { if index == length-1 {fields = fields[0:index] } else {fields = append(fields[0:index], fields[index+1:]...) } } } err = s.writeAll(_path, fields) if err != nil { return err } return nil}func (s *Store) Clean(v interface{}) error { _path, err := s.before(v) if err != nil { return err } return os.Remove(_path)}func (s *Store) readAll(file string) ([]byte, error) { out, err := ioutil.ReadFile(file) if err != nil { return nil, err } return out, nil}func (s *Store) writeAll(file string, v interface{}) error { out, err := json.MarshalIndent(v, '', ' ') if err != nil { return err } err = ioutil.WriteFile(file, out, 0755) if err != nil { return err } return nil}func (s *Store) before(v interface{}) (string, error) { tb := parseTn(v) if tb == '' { return '', errors.New('invalid table name') } _path := filepath.Join(s.Dir, tb) _, err := os.Stat(_path) if err != nil { return '', err } return _path, nil}func structToMap(v interface{}) map[string]interface{} { tp := reflect.TypeOf(v).Elem() vp := reflect.ValueOf(v).Elem() field := make(map[string]interface{}, 0) for i := 0; i < tp.NumField(); i++ { field1 := tp.Field(i) field2 := vp.Field(i) key := field1.Tag.Get('json') field[key] = field2.Interface() switch field2.Kind() { case reflect.Int: field[key] = float64(field2.Interface().(int)) case reflect.Int8: field[key] = float64(field2.Interface().(int8)) case reflect.Int16: field[key] = float64(field2.Interface().(int16)) case reflect.Int32: field[key] = float64(field2.Interface().(int32)) case reflect.Int64: field[key] = float64(field2.Interface().(int64)) case reflect.Uint: field[key] = float64(field2.Interface().(uint)) case reflect.Uint8: field[key] = float64(field2.Interface().(uint8)) case reflect.Uint16: field[key] = float64(field2.Interface().(uint16)) case reflect.Uint32: field[key] = float64(field2.Interface().(uint32)) case reflect.Uint64: field[key] = float64(field2.Interface().(uint64)) case reflect.Float32: field[key] = float64(field2.Interface().(float32)) case reflect.Float64: field[key] = field2.Interface() default: field[key] = field2.Interface() } } return field}func mapToStruct(m map[string]interface{}, v interface{}) error { out, err := json.Marshal(m) if err != nil { return err } return json.Unmarshal(out, &v)}func toSnake(s string) string { out := bytes.Buffer{} bName := []byte(s) point := 0 for index, b := range bName { // 非大寫,不需要轉(zhuǎn)化 if b < 65 || b > 90 || index-point < 2 { out.WriteByte(b) continue } // 首字符大寫,直接轉(zhuǎn)化為小寫 if index == 0 { out.WriteByte(b + 32) point = index } // 連續(xù)三個(gè)大寫,觸發(fā)轉(zhuǎn)化 if index-point >= 2 { out.WriteByte(95) out.WriteByte(b + 32) point = index } } return out.String()}func parseTn(v interface{}) string { var name string tp := reflect.TypeOf(v).Elem() switch tp.Kind() { case reflect.Ptr: sp := strings.Split(tp.String(), '.') name = sp[len(sp)-1] case reflect.Slice: sp := strings.Split(tp.String(), '.') name = sp[len(sp)-1] case reflect.Struct: name = tp.Name() } name = toSnake(name) return name + '.json'}func randId() string { return fmt.Sprintf('%x', md5.Sum([]byte(time.Now().String())))}

到此這篇關(guān)于golang使用json格式實(shí)現(xiàn)增刪查改的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)golang json增刪查改內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 欧美精品成人 | 国产综合精品 | 亚洲精品国品乱码久久久久 | 中文在线a在线 | 一区二区三区免费网站 | 亚洲午夜精品一区二区三区 | 欧美乱码久久久久久蜜桃 | 免费观看一级毛片 | 男人久久天堂 | 亚洲国产精品一区二区久久 | 亚洲成人二区 | 手机在线不卡av | 99riav国产精品| 看羞羞视频免费 | 成人h视频在线观看 | 一级免费网站 | 国产日韩欧美一区二区 | 精品av| 午夜视频在线播放 | 狠狠色综合色综合网络 | 天天视频成人 | 日本不卡一区二区三区在线观看 | 视频专区一区二区 | 91丝袜 | 日韩亚洲欧美综合 | 亚洲福利影院 | 欧美在线一区二区 | 久久精品一区二区三区四区 | 成人精品 | 亚洲一区二区三区四区五区中文 | 黄色片网站视频 | 91在线视频播放 | 中文字幕一区二区三区不卡 | 久久久精品综合 | 日本成人黄色网址 | 91精品一区二区三区久久久久久 | 亚洲人成人一区二区在线观看 | 欧美精品一区二区三区蜜臀 | 亚洲色欲色欲www | 一区二区久久 | 四影虎影ww4hu55.com| 国产三级在线 | 中文字幕在线视频网站 | 日韩欧美在线观看 | 久久亚洲一区二区 | 国产一区二区三区四区在线观看 | 久久久99精品免费观看 | 久久免费精品视频 | 超碰高清 | 久草热8精品视频在线观看 亚洲区在线 | 毛片视频网站 | 九九精品视频在线观看 | 日韩精品一区二区在线观看 | 国产精品嫩草55av | 精品毛片 | 中文字幕亚洲视频 | 日本黄色影片在线观看 | 在线成人| 91精品国产91久久久久久吃药 | 青娱乐一区 | 欧美日韩一区二区三区在线观看 | 超碰人人插 | 成人免费视频观看视频 | www.一区二区三区 | 男人天堂亚洲 | 最新中文字幕在线 | 理伦影院 | 一级一级国产片 | 亚洲高清视频在线观看 | 艹逼逼视频 | 久久久xx | www.日韩系列| 久热中文在线 | 99热在线播放 | 亚洲毛片在线观看 | 午夜视频在线播放 | 九九热在线视频 | 成人在线播放 | 欧美日韩国产在线观看 | 在线视频一区二区三区 | 一道本一区 | 亚洲经典视频在线观看 | 国产精品色婷婷亚洲综合看 | 亚洲第一成年免费网站 | 黄色av网站在线免费观看 | 精品亚洲永久免费精品 | 欧美日韩一区二区三区在线观看 | 国产91在线播放精品91 | 第四色影音先锋 | 亚洲国产婷婷香蕉久久久久久99 | 波多野结衣一区二区三区四区 | 亚洲欧美高清 | 欧美日韩电影一区 | 亚洲免费网址 | 精品一二区 | www麻豆 | 国产高清一区二区 | 久久久久久免费毛片精品 | 欧美一级一区 | 狠狠干影院 | 亚洲精选久久 | 午夜免费视频 | 性开放xxxhd视频 | 91精品国产乱码久久久久久 | 欧美一级做性受免费大片免费 | 午夜天堂精品久久久久 | 欧美大片黄 | 激情视频在线观看 | 一级a性色生活片久久毛片波多野 | 91亚洲一区 | 成人精品鲁一区一区二区 | 成人精品视频在线观看 | 亚洲永久免费视频 | 超碰人人操 | 美女黄网站视频免费 | 一区二区精品在线 | 午夜家庭影院 | 亚洲精品日韩综合观看成人91 | 国产精品女教师av久久 | 精品免费久久 | 日韩91| 久久久久中文 | 精品国产一区二区三区久久久蜜臀 | 婷婷免费在线观看 | 天天操天天碰 | 国产免费拔擦拔擦8x高清在线人 | 羞羞在线观看视频免费观看hd | 国产女人高潮视频在线观看 | 999久久久国产精品 免费视频一区 | 国产成人综合一区 | 国产婷婷久久 | 国产精品久久久久久久岛一牛影视 | 精品国产乱码久久久久久88av | h在线观看| 一区二区三区四区在线 | 欧美激情精品久久久久久免费 | 日韩福利一区 | 成人免费久久 | 国产久| 亚洲毛片在线观看 | 先锋影音av资源站 | 亚洲成人精品av | 久久国产一 | 精品国产91乱码一区二区三区 | 久久精品国产亚卅av嘿嘿 | 欧洲亚洲精品久久久久 | 亚洲成人日韩 | 91精品一区二区三区久久久久久 | 欧美精品区| 午夜免费福利在线 | 国产黄色一级片 | 久久亚洲综合 | 精品一区二区久久久久久久网站 | 国产欧美日韩一区 | 精品久久久久久久久久久久久久 | 久久国产高清 | 亚洲视频在线观看免费 | 99色在线视频 | 国产日韩一区二区 | 亚洲精品视频在线 | 狠狠爱www人成狠狠爱综合网 | 三区视频 | 欧美日韩国产91 | 日韩精品一区二区在线观看 | 国产一二区在线 | 伊人网亚洲| 久久精品一区二区三区不卡牛牛 | 天天爱爱网 | 99久久视频 | 成人网在线观看 | 国产伦精品一区二区三区四区视频 | 中文字幕一区二区三区四区 | 日本久久艹 | 免费黄色在线视频网址 | 91精品久久久久久久久 | 欧美一区二区三区免费 | 91视频观看 | 亚洲一级淫片 | 亚洲视频在线免费观看 | 色www精品视频在线观看 | 精品av | 欧美精品在线视频 | 91精品中文字幕一区二区三区 | 免费成人精品 | 成人久久久久 | 亚洲爽爽 | 91社区在线高清 | 毛片a片 | 成人在线播放 | 日韩色av| 色综久久 | 天天夜碰日日摸日日澡 | 人人人人人你人人人人人 | www.色涩涩.com网站 | 超碰激情| 日韩精品一区二区三区中文字幕 | 91精品国产一区二区 | 亚洲中国精品精华液 | 欧美激情一区二区 | 国产精品免费看 | 久久久免费视频看看 | 精品超碰| 91免费视频在线 | 午夜小视频免费 | 国产精品18hdxxxⅹ在线 | 日韩中文在线 | 国产精品美女久久 | 午夜高清视频 | 中文字幕免费在线 | 91国内产香蕉 | 天堂综合网久久 | 久久国产精品视频一区 | 亚洲精品乱码 | 国产福利一区二区三区四区 | 亚洲欧美激情精品一区二区 | 亚洲国产伊人 | 亚洲精品国产剧情久久9191 | 一级网站在线观看 | 日本天天操 | 欧美性网| 久久人人av | 一级片黄片毛片 | 美女福利视频 | 天天摸天天操 | 午夜资源 | 在线中文视频 | 嫩草影院在线观看91麻豆 | 特级毛片在线大全免费播放 | 久久伊人操 | 欧美日在线 | 九色在线观看 | www.xxx免费| 午夜视频在线免费观看 | 91精品一区二区三区久久久久久 | www.涩涩视频 | 国产午夜久久 | 龙珠z国语版291集全 | 97精品久久 | 综合久久99| 精品国产影院 | 久久久国产精品入口麻豆 | 午夜男人免费视频 | 成人久久久精品国产乱码一区二区 | 中文字幕国产区 | 九九天堂网 | 欧美精品1区2区3区 免费亚洲婷婷 | 一区二区免费视频 | 高清久久 | 欧美日韩一区二区在线观看 | 亚洲第一免费网站 | 久久久片 | 在线视频国产一区 | 日韩视频一区二区三区在线观看 | 中国一级免费毛片 | 国产精品久久久久久久久免费 | 日韩成人av网站 | 国产黄色免费视频 | 夜夜爽网址 | 国产精品日日做人人爱 | 国产一区 | 久久这里只有国产精品 | 久久国内精品 | 日韩精品一区二区三区在线观看 | 91一区二区 | 欧洲成人午夜免费大片 | 成人欧美一区二区三区黑人孕妇 | 中文字幕在线免费看 | 亚洲精品福利在线观看 | 亚洲成人一区二区三区 | 色吧一区 | 日韩视频在线免费观看 | 中文无码日韩欧 | 99国产精品久久久久老师 | 一级毛片色一级 | 欧美黄色网络 | 91在线综合| 99re在线 | 久久无码精品一区二区三区 | 毛片在线免费播放 | 欧美日韩国产精品一区 | 亚洲aⅴ天堂av在线电影软件 | 午夜天堂精品久久久久 | 国产视频综合在线 | 成人av一区二区三区 | 国产在线拍揄自揄拍视频 | 97视频网站| 免费在线看a | 中文字幕亚洲在线观看 | 欧美黄视频 | 久久久久一区 | 狠狠躁日日躁夜夜躁东南亚 | 亚洲欧美一区二区三区视频 | 亚洲天堂av网 | 日韩成人在线免费视频 | 在线中文字幕av | 91视频国产区 | 国产精久久久久 | 国精品一区二区三区 | 黄色片在线免费看 | 日韩精品一区二区在线观看 | 日韩国产一区二区 | 日韩在线精品 | 一区二区三区免费在线观看 | 美女久久| 91久久综合 | 九九精品视频在线观看 | 国产三级一区二区 | 日韩视频一区二区三区 | 欧美第5页 | 99久久婷婷国产精品综合 | 四虎成人在线播放 | 日韩视频免费 | 国产精品久久综合 | 久久美女视频 | 久久99精品久久久久久噜噜 | 久久少妇免费看 | 桃色视频在线播放 | 中文字幕久久精品 | 玖玖综合网 | 国产日韩欧美综合 | 久久精品视频一区 | 日韩欧美一区二区三区久久婷婷 | 精品美女在线观看视频在线观看 | 亚洲午夜在线 | 成年人免费看 | 欧洲另类二三四区 | 亚洲成人精品影视 | 嫩草影院地址 | 爱干视频 | 一区二区三区免费在线观看 | 久久99精品久久久久久按摩秒播 | 成人影音 | 亚洲电影一区二区 | www.麻豆| 四虎永久在线 | 韩国精品一区 | 日韩精品视频在线观看免费 | 国产欧美精品一区二区 | 日韩在线1 | 色一色网站 | 9l蝌蚪porny中文自拍 | 免费黄色在线 | 一级黄色录像免费观看 | 老师的朋友2 | 中文字幕一区在线观看视频 | 国产乱码精品一区二区三区中文 | 天天操天天碰 | 成人在线视频免费观看 | 精品国产乱码久久久久久影片 | 欧美一级艳情片免费观看 | 欧美日韩一区二区三区在线电影 | 日韩在线视频一区 | 色综合久久久久 | 一级免费毛片 | 一区二区免费在线观看 | 欧美一区二区三区 | 欧美激情一区二区 | 国产美女自拍视频 | 欧美精品一区三区 | 久久久久久免费看 | 亚洲成人日本 | www.狠狠干 | 亚洲一区二区三区在线播放 | 日一日干一干 | 欧美一区二区在线免费观看 | 国产日韩精品在线 | 国产亚洲一区二区精品 | 久久精品欧美一区二区三区不卡 | 伊人精品视频 | 成人性毛片 | 精品久 | 一区二区影视 | 久久大陆| 羞羞视频在线网站观看 | 欧美日韩一区二区三区在线观看 | 亚洲视频在线观看视频 | 免费看h| 国产精品久久久久婷婷二区次 | 欧美久久久久久 | 国产精品久久一区二区三区 | 黄网站在线播放 | 一级毛片免费播放 | 国产精品久久久久久久久小说 | 久久aⅴ乱码一区二区三区 91综合网 | 精品亚洲网| 午夜av电影 | 欧美大片网站 | 久久久久a | 看毛片网站 | 夜夜操天天干, | www精品 | 久久毛片 | √天堂在线 | 精品一区二区三区免费视频 | 羞羞视频免费网站 | 成人av一区二区三区 | 欧美精品三区 | 一级高清 | 久久久亚洲一区 | 成人欧美一区二区三区在线播放 | 日韩高清不卡一区二区三区 | 9 1在线观看 | 另类免费视频 | 日韩久久久一区二区 | 欧美日韩在线一区二区 | 亚洲天堂色2017 | 在线精品国产一区二区三区 | 综合伊人| 亚洲国产成人久久 | 天天天操操操 | 欧美精品成人一区二区三区四区 | 91免费视频 | 一区二区三 | 91伦理片 | 日韩欧美一区在线 | 一区二区福利 | av自拍 | 无码国模国产在线观看 | 色网在线观看 | 一区二区三区四区不卡视频 | 日本一区二区三区免费观看 | 国产成人精品一区二区三区视频 | 国产伦精品一区二区三区在线 | 日韩免费视频 | 久草免费在线视频 | 亚洲综合首页 | 国产精品免费看 | 亚洲精品一区 | 99国产精品99久久久久久 | 中文字幕第二十六页页 | 色婷婷在线播放 | 欧美日韩在线精品 | 久久精品a一级国产免视看成人 | 亚洲国产精品久久久久 | 国产精品久久久久久吹潮 | 精品视频一区二区在线 | 欧美日韩国产在线观看 | 国产欧美精品一区二区三区 | 国产精品久久综合 | 日韩视频区 | 欧美性一区二区三区 | 国产成人a亚洲精品 | 国产精品二区三区 | 国产日韩一区二区三区 | 精品国产髙清在线看国产毛片 | 国产精品国产三级国产aⅴ 精品91 | 成人午夜激情 | 嫩草视频免费在线观看 | 欧美一级小视频 | 国产色区 | 中文字幕在线第一页 | 欧美一级免费观看 | 高清国产视频 | 中文字幕在线免费 | 九九成人 | 手机看片亚洲 | 国产超碰人人模人人爽人人添 | 色花av| 在线一区二区三区视频 | 免费观看黄a一级视频 | 成人免费在线视频观看 | 国产精品视频导航 | 欧美黄色片免费观看 | 午夜影院免费 | 日日综合 | 午夜免费观看视频 | 99re视频| 久久韩国| 一区二区电影 | 免费久久久久 | 色爱区综合五月激情 | 国产精品成人观看视频国产奇米 | 日韩在线二区 | 日本超碰 | 99热最新网站 | 国产成人精品免费视频大全最热 | 日本激情网 | hitomi一区二区三区精品 | 欧美激情一区二区 | 欧美日韩高清不卡 | 午夜视频免费 | av一区二区三区 | 男女视频网站 | 国产在线精品一区二区三区 | 欧美大片黄 | 人妖天堂狠狠ts人妖天堂狠狠 | 亚洲福利在线观看 | 激情开心成人网 | 天堂在线视频 | 视频一区 中文字幕 | 久草视| 一区二区免费视频 | 国产日韩欧美91 | 精品久久久久久久久久久 | 亚洲国产二区三区 | 99色影院| 欧美成人一区二区三区片免费 | 综合久久国产九一剧情麻豆 | 成人在线观看av | 免费观看欧美一级 | 精品欧美一区二区三区 | 国产精品成人一区二区三区夜夜夜 | 午夜免费小视频 | 天天久久 | 久久国产精品一区 | 91久久国产综合久久 | 亚洲区在线 | aa级毛片毛片免费观看久 | 伊人无码高清 | 亚洲一区二区免费看 | 午夜影视| 婷婷久久综合 | 99视频免费看| 蜜桃视频一区二区三区 | 羞羞的视频在线观看 | 亚洲免费视频网站 | 国产精品视频免费 | 青青草免费在线视频 | 精品亚洲一区二区三区四区五区 | 欧美a级成人淫片免费看 | 国产精品二区一区二区aⅴ污介绍 | 亚洲精品久久久久久久久久久久久 | 国产在线观看一区二区三区 | 欧美一级二级三级 | 欧美美女爱爱视频 | 一区在线视频观看 | 97久久久| 99精品视频一区二区三区 | 骚视频在线观看 | 欧美亚洲视频在线观看 | 亚洲精品乱码久久久久久蜜桃91 | 久久久久久久一区 | 狠狠操操| 久久99精品久久久久久琪琪 | 天天干夜操 | 在线小视频 | 秋霞电影院午夜伦 | 天天插天天干 | 久久久久免费精品视频 | 一区在线观看视频 | 亚洲综合视频 | 国产成人精品一区二区三区在线 | 国产日韩精品视频 | 免费黄色网址在线播放 | 国产1区在线观看 | 日韩欧美国产一区二区 | 国产精品美女久久久久久久网站 | 欧美一区永久视频免费观看 | 欧美videosex性欧美黑吊 | 午夜精品在线观看 | 欧美激情一区二区三区 | 91操碰| 越南性xxxx精品hd | 中文字幕视频在线 | 夜夜天天| sese综合 | 黄色毛片在线观看 | 日韩欧美三区 | 午夜影院免费 | 亚洲综合色网 | 欧美在线网站 | 综合精品久久久 | 成人精品免费视频 | 在线观看www| 国产欧美精品一区二区色综合 | 国产一级黄色大片 | 精品久久久久久国产 | 国产av毛片| 日韩高清在线播放 | 香蕉视频成人在线观看 | 亚洲欧美国产一区二区 | www.成人在线视频 | 国产精品久久久久久久久久大牛 | 日日摸夜夜添夜夜添亚洲女人 | 伊人久久视频 | 精品国产99 | 一级毛片电影院 | 91短视频版在线观看免费大全 | 成人欧美一区二区三区黑人孕妇 | 一区二区三区国产 | 羞羞视频在线网站观看 | 亚洲最新中文字幕 | 国产精品福利在线观看 | 日本一区视频在线观看 | 在线观看国产 | а√天堂资源中文最新版地址 | 黑人av | 蜜桃一区二区三区 | 亚洲视频在线一区 | 久久精品视频一区 | 精品久久久免费视频 | 98精品国产高清在线xxxx天堂 | 国产精品无码永久免费888 | 夜夜艹 | 国产免费一区二区三区 | 一级毛片在线播放 | 色免费在线观看 | 欧美一区二区三区免费 | 日本精品一区二区三区在线观看 | 欧美精品在欧美一区二区少妇 | 亚洲欧洲视频在线 | 亚洲欧美另类在线 | 中文字幕一区二区三 | 亚洲一区久久久 | 成人国产精品视频 | 亚洲小视频网站 | 亚洲风情在线观看 | av国产精品| 久久综合狠狠综合久久综合88 | 色综合色综合网色综合 | 亚洲日本欧美日韩高观看 | 久久综合久久久 | 亚洲日本乱码在线观看 | 一级全黄少妇性色生活片免费 | 亚洲天堂电影网 |