您的位置:首页 > 编程语言 > Go语言

go依赖包管理工具对比

2017-07-30 00:00 621 查看
GOPATH和GOROOT

GOROOT并不是必须要设置的。

GOPATH必须要设置,但并不是固定不变的

本项目内部的依赖

管理外部的依赖包

使用GOPATH来管理外部依赖

vendor

godep

glide

govendor

golang官方dep

各依赖管理工具对比

gvt

vendor的问题

当开始真正用go去做项目的时候,不可避免的就会遇到依赖包的问题。go的依赖包管理与java+maven的依赖管理不太一样,我们从GOPATH开始逐渐理解其思想,然后再对比下目前常用的依赖包管理工具。

GOPATH和GOROOT

初学者很容易会被这两个环境变量给搞晕。

GOROOT并不是必须要设置的。

GOROOT不是必须要设置的。参见Installing to a custom location,默认go会安装在/usr/local/go下,但也允许自定义安装位置,GOROOT的目的就是告知go当前的安装位置,编译的时候从GOROOT去找SDK的system libariry。

例如我用的是ubuntu 16.04,默认go的版本是1.6,如果我想升级为更新的版本,就需要自定义安装,所以我设置了GOROOT:
export GOROOT=$HOME/go1.7.4


GOPATH必须要设置,但并不是固定不变的

GOPATH的目的是为了告知go,需要代码的时候,去哪里查找。注意这里的代码,包括本项目和引用外部项目的代码。GOPATH可以随着项目的不同而重新设置。

GOPATH下会有3个目录:src, bin, pkg。

src目录:go编译时查找代码的地方

bin目录:go get godep这种bin工具的时候,二进制文件下载的目的地

pkg目录:编译生成的lib文件存储的地方。

本项目内部的依赖

以kubernetes为例。
kubernetes/cmd/kubectl/kubectl.go
中引用了app包中的kubectl.go,代码是这样写的:

import (
"os"
"k8s.io/kubernetes/cmd/kubectl/app"
)

那么go在编译的时候怎么查找这个包呢?

3ff0

这就是GOPATH发挥作用的时候了。go编译时会去$GOPATH/src/目录去查找需要的代码,因此只要上面app/kubectl.go在
$GOPATH/src/k8s.io/kubernetes/cmd/kubectl/
里面,go编译的时候就能找到,那么自然的,
kubernetes/cmd/kubectl/kubectl.go
也需要放到
$GOPATH/src/k8s.io/
里去。最终$GOPATH里的代码结构是这样的:

├── src
│   ├── k8s.io
│   │   └── kubernetes
│   │       ├── cmd
│   │       │   ├── kubectl
│   │       │   │   ├── app
│   │       │   │   │   ├── BUILD
│   │       │   │   │   └── kubectl.go
│   │       │   │   ├── BUILD
│   │       │   │   ├── kubectl.go
│   │       │   │   └── OWNERS


管理外部的依赖包

不可避免的我们会使用外部的依赖包包。go在这方面做的非常飘逸。go没有像java使用maven来管理依赖包、包版本,而是直接使用GOPATH来管理外部依赖。

使用GOPATH来管理外部依赖

go允许import不同代码库的代码,例如github.com, k8s.io, golang.org等等;对于需要import的代码,可以使用 go get 命令取下来放到GOPATH对应的目录中去。例如
go get github.com/silenceshell/hcache
,会下载到
$GOPATH/src/github.com/silenceshell/hcache
中去,当其他项目在
import github.com/silenceshell/hcache
的时候也就能找到对应的代码了。

看到这里也就明白了,对于go来说,其实并不care你的代码是内部还是外部的,总之都在GOPATH里,任何import包的路径都是从GOPATH开始的;唯一的区别,就是内部依赖的包是开发者自己写的,外部依赖的包是go get下来的。

vendor

依赖GOPATH来解决go import有个很严重的问题:如果项目依赖的包做了修改,或者干脆删掉了,会影响我的项目。因此在1.5版本以前,为了规避这个问题,通常会将当前使用的依赖包拷贝出来。

为了能让项目继续使用这些依赖包,有这么几个办法:

将依赖包拷贝到项目源码树中,然后修改import

将依赖包拷贝到项目源码树中,然后修改GOPATH

在某个文件中记录依赖包的版本,然后将GOPATH中的依赖包更新到对应的版本(因为依赖包实际是个git库,可以切换版本)

go作为一个现代化的语言,居然要用这么复杂不直观而又不标准的方法来管理依赖,难怪在早期会有很多人非常不看好go的前景。

为了解决这个问题,go在1.5版本引入了vendor属性(默认关闭,需要设置go环境变量GO15VENDOREXPERIMENT=1),并在1.6版本中默认开启了vendor属性。

简单来说,vendor属性就是让go编译时,优先从项目源码树根目录下的vendor目录查找代码(可以理解为切了一次GOPATH),如果vendor中有,则不再去GOPATH中去查找。

kube-keepalived-vip为例。该项目会调用k8s.io/kubernetes的库(Client),但如果你用1.5版本的kubernetes代码来编译keepalived,会编译不过:

./controller.go:107: undefined: "k8s.io/kubernetes/pkg/client/unversioned".Client

查下代码会发现1.5版本中代码有变化,已经没有这个Client了。这就是前面说的依赖GOPATH来解决go import所带来的问题,代码不对上了。

kube-keepalived-vip项目用vendor目录解决了这个问题:该项目把所有依赖的包都拷贝到了vendor目录下,对于需要编译该项目的人来说,只要把代码从github上clone到
$GOPATH/src
以后,就可以进去go build了(注意,必须将kube-keepalived-vip项目拷贝到$GOPATH/src目录中,否则go会无视vendor目录,仍然去$GOPATH/src中去找依赖包)。

但是vendor目录又带来了一些新的问题:

vendor目录中依赖包没有版本信息。这样依赖包脱离了版本管理,对于升级、问题追溯,会有点困难。

如何方便的得到本项目依赖了哪些包,并方便的将其拷贝到vendor目录下? Manual is fxxk.

社区为了解决这些(工程)问题,在vendor基础上开发了多个管理工具,比较常用的有godep, govendor, glide。go官方也在开发官方dep,目前还是Alpha状态。

下面来看看使用的比较多的gode, glide和 govendor。

godep

godep的使用者众多,如docker,kubernetes, coreos等go项目很多都是使用godep来管理其依赖,当然原因可能是早期也没的工具可选。

godep早期版本并不依赖vendor,所以对go的版本要求很松,go 1.5之前的版本也可以用,只是行为上有所不同。在vendor推出以后,godep也改为使用vendor了。

godep使用很简单:当你的项目编写好了,使用GOPATH的依赖包测试ok了的时候,执行:

$ godep save

hcache为例,执行
go save
,会做2件事:

扫描本项目的代码,将hcache项目依赖的包及该包的版本号(即git commit)记录到Godeps/Godeps.json文件中

将依赖的代码从GOPATH/src中copy到vendor目录(忽略原始代码的.git目录)。对于不支持vendor的早期版本,则会拷贝到Godeps/_workspace/里

一个Godeps.json的例子。

{
"ImportPath": "github.com/silenceshell/hcache",
"GoVersion": "go1.7",
"GodepVersion": "v79",
"Deps": [
{
"ImportPath": "github.com/tobert/pcstat",
"Rev": "91a7346e5b462a61e876c0574cb1ba331a6a5ac5"
},
{
"ImportPath": "golang.org/x/sys/unix",
"Rev": "0b25a408a50076fbbcae6b7ac0ea5fbb0b085e79"
}
]
}

如果要增加新的依赖包:

Run go get foo/bar

Edit your code to import foo/bar.

Run godep save (or godep save ./…).

如果要更新依赖包:

Run go get -u foo/bar

Run godep update foo/bar. (You can use the … wildcard, for example godep update foo/…).

godep还支持
godep restore
,可以将vendor下的代码反向拷贝到$GOPATH下。不过我没想到这个功能在什么情况下可以用到。

glide

glide也是在vendor之后出来的。glide的依赖包信息在glide.yaml和glide.lock中,前者记录了所有依赖的包,后者记录了依赖包的版本信息(合成一个多好)。

glide使用也不麻烦:

glide create  # 创建glide工程,生成glide.yaml
glide install # 生成glide.lock,并拷贝依赖包
work, work, work
glide update  # 更新依赖包信息,更新glide.lock

glide install会根据glide.lock来更新包的信息,如果没有则会走一把glide update生成glide.lock

最终一个使用glide管理依赖的的工程会是这样:

──$GOPATH/src/myProject (Your project)
├─ glide.yaml
├─ glide.lock
├─ main.go (Your main go code can live here)
├─ mySubpackage (You can create your own subpackages, too)
|    ├─ foo.go
├─ vendor
├─ github.com
├─ Masterminds
├─ ... etc.

glide的功能更丰富一些。

glide tree
可以很直观的看到vendor中的依赖包(以后会被移除掉,感觉没啥用)

glide list
可以列出vendor下所有包

glide支持的Version Control Systems更多,除了支持git,还支持 SVN, Mercurial (Hg), Bzr

最重要的,glide.yaml可以指定更多信息,例如依赖包的tag、repo、本package的os, arch。允许指定repo可以解决package名不变,但使用的是fork出来的的工程

govendor

govendor是在vendor之后出来的,功能相对godep多一点,不过就核心问题的解决来说基本是一样的。govendor生成vendor目录的时候需要2条命令:

govendor init
生成
vendor/vendor.json
,此时文件中只有本项目的信息

govendor add +external
更新
vendor/vendor.json
,并拷贝GOPATH下的代码到vendor目录中。

govendor还可以直接指定依赖包版本来获取包,这也有了点版本管理的影子了。

# Setup your project.
cd "my project in GOPATH"
govendor init

# Add existing GOPATH files to vendor.
govendor add +external

# View your work.
govendor list

# Look at what is using a package
govendor list -v fmt

# Specify a specific version or revision to fetch
govendor fetch golang.org/x/net/context@a4bbce9fcae005b22ae5443f6af064d80a6f5a55
govendor fetch golang.org/x/net/context@v1   # Get latest v1.*.* tag or branch.
govendor fetch golang.org/x/net/context@=v1  # Get the tag or branch named "v1".

相比godep来说,govendor略繁琐一点(比如govendor init有啥用),功能上略丰富一些。

golang官方dep

虽说golang的dep还是alpha状态,但也可以用了。

$ dep init
$ dep ensure -update
$ dep ensure github.com/pkg/errors@^0.8.0

没啥特殊要求的话,一条dep init就够用了;如果要升级,或者指定某个tag版本,可以用dep ensure。dep还有个很好用的功能,dep prune,可以删除没有用到的package。

各依赖管理工具对比

go官方wiki给了一个比较全面的对比

godep更直观,使用者也多一些,一些个人的小项目可以用;glide功能更丰富,更接近maven(例如glide.lock跟maven的pom.xml比较类似,可以指定获取某一个版本),新的项目可以考虑使用glide。

当然了,还是期待golang的dep能够更好用,解决目前依赖包管理工具碎片化过多的问题。

gvt

glide/godep/govendor都只会拉import的依赖包,对于依赖包的依赖包则不会管。这种情况可以用gvt把所有的依赖全部拉到vendor目录下。是不是很酸爽,但对于解决golang.org库无法访问的问题还是很有帮助的,并且也可以拉平团队使用的所有依赖包。

vendor的问题

总的来说glide比较完善了。不过还是有些不太愉快的地方,如代码copy的泛滥:某个包在不同的项目中各有一份copy,而且其版本可能不一样;当依赖的包比较多的时候,vendor目录也会非常庞大。这是vendor的锅(或者说GOPATH的原罪,不能像maven一样对同一个包在本地有多个版本,本地只能有一份代码),似乎没办法避免。

当然了,也别指望go会改善这一点。

“Through the design of the standard library, great effort was spent on controlling dependencies. It can be better to copy a little code than to pull in a big library for one function. Dependency hygiene trumps code reuse.” - Go at Google

拷贝点代码怎么了,对吧。
http://w109.d0.qndfr.org/ http://weo8.869x.zcshr.org/ http://fu.fnfdf.cc/ http://xmf.8ewy3.taoshun1688.com/ http://npmo2.d9.unuu6393.cn/ http://yn5d.m0w.ebll4793.cn/ http://dc7o.wzxw0148.cn/ http://7xxfc.jknp6659.cn/ http://8o9.9p.eaxv3478.cn/ http://wyy3x.92m9.enyy1947.cn/ http://meeu.o7u.vcqr8578.cn/ http://6y6.wlf2w.pbss8753.cn/ http://ct0g9.9c.gwvq8861.cn/ http://q1i.taum0602.cn/ http://ijr.84cb.wuoe3708.cn/ http://rh07r.spyb0748.cn/ http://s0ip.jbxu3084.cn/ http://9j.eami4345.cn/ http://sc3.zzyb6904.cn/ http://rsa.wead0122.cn/ http://8r.3333.iyld2675.cn/ http://51.yeex2195.cn/ http://i3.8bkzq.fgro9441.cn/ http://ygpsh.kvvz4431.cn/ http://y4g5.uuza3384.cn/ http://2r62s.5p8a.yyvw5376.cn/ http://thpz.keej8837.cn/ http://ztp.b3q.izpt4079.cn/ http://i1.pawt8491.cn/ http://6kc.tr.tagg4453.cn/ http://xw10.zunr6962.cn/ http://6vhxe.hm74.bbbv0837.cn/ http://xwm7.q3pe.cigo1908.cn/ http://neqo.v672.ghkd7086.cn/ http://7g7do.f6z.dynl6229.cn/ http://970.hhwgh.qvaa7038.cn/ http://3a1.m27l.klkz4599.cn/ http://j3kq.idcu.gjsx9410.cn/ http://mwnh.chnp3876.cn/ http://z51sb.evkj6051.cn/ http://31v8o.evsv0341.cn/ http://9qwzg.hvox0584.cn/ http://r92q.bxam8036.cn/ http://of.wkve4477.cn/ http://457kc.vxyc7060.cn/ http://hzz.g6x31.gdud1657.cn/ http://albs.efsu8541.cn/ http://j7.j5u.zuho4758.cn/ http://xof7h.syjo7453.cn/ http://1ar.jtzx1117.cn/ http://pngne.y19fu.uaoq1674.cn/ http://43m.wdab6663.cn/ http://gp4pu.zesc9096.cn/ http://2eq.cswx7205.cn/ http://8xq.9enhh.rfk7436.cn/ http://r9t6.zzskt.rhy8758.cn/ http://9q.zpr4789.cn/ http://wu.sii9170.cn/ http://1ri.trk.auk5021.cn/ http://iibl.imd3928.cn/ http://qz0ba.pjp8645.cn/ http://11u16.gtt0467.cn/ http://wnon4.ogs0753.cn/ http://1rqtq.hry3962.cn/ http://isba.xut2146.cn/ http://u1.zi.rxq4617.cn/ http://612c.btk91.yys0858.cn/ http://c20.zt.vsq0054.cn/ http://3vn.bqu7903.cn/ http://xxfo.mcx5948.cn/ http://w8e.xp2.rvt9489.cn/ http://p8gx.9w2.gab2613.cn/ http://vno.vuv2033.cn/ http://2w.6d.qpz8499.cn/ http://6ug.p4q.fme4008.cn/ http://ehh.wfg7038.cn/ http://edeg.xex.edt2696.cn/ http://e83.3d.gxq9182.cn/ http://2dh.wbd0565.cn/ http://kzu8r.568.evl5793.cn/ http://e1y0.45w.tuq2170.cn/ http://ff1.8n.cwt3115.cn/ http://kl9.lia3012.cn/ http://8626.5ix.qfc6292.cn/ http://b338u.vjp6092.cn/ http://so7.1gx.okr2737.cn/ http://u8.vwl4798.cn/ http://gfe.ovy6.bfn6408.cn/ http://7zu4.jvu4337.cn/ http://m0md.fgm2878.cn/ http://qrc.tjrk.bdu1500.cn/ http://6xpjp.tdy5267.cn/ http://27st.3qts.nyh2569.cn/ http://u3vv.8xx.ncs7961.cn/ http://czhy.zth2084.cn/ http://0mhy.vplyu.zur3790.cn/ http://shh.wkj3723.cn/ http://sy.wac3757.cn/ http://ch2qh.xlc5825.cn/ http://6uy0.pmy.jyf8675.cn/ http://3t4s3.iz.mxv9381.cn/ http://omn.uwy6316.cn/ http://1y51.ly0d7.dww9805.cn/ http://scklz.15.blw0160.cn/ http://oxy.2u6.fbw5398.cn/ http://phg.gdl.mcp2369.cn/ http://15.kyrr.pzq1104.cn/ http://47j9.sky3484.cn/ http://zj2.hrql.sfo7099.cn/ http://p3yt.xbx8533.cn/ http://t0.ypblp.ncn6620.cn/ http://ks.rrts.llu9392.cn/ http://t34ha.p3l.eqs1683.cn/ http://qttp.slg6006.cn/ http://w04l.odu.url9735.cn/ http://ict3.0s.ney3099.cn/ http://e8.p9xp0.vab8501.cn/ http://7w7g.vkp1919.cn/
htt
3ff0
p://uf787.awt9604.cn/ http://g9.2ou.igq3204.cn/ http://uvdw.ayp2545.cn/ http://5mo.y6fnd.pgn4393.cn/ http://dnlm0.64.npd9270.cn/ http://0zjc.sfi6002.cn/ http://bhbck.ppl.nne5492.cn/ http://th.yai2320.cn/ http://080h.ics4171.cn/ http://jls.b2.sfv9051.cn/ http://ey.ccg1407.cn/ http://1zsbp.hjn1455.cn/ http://lql.ygf6271.cn/ http://zta.h1.vfm1218.cn/ http://494r7.aaa4131.cn/ http://k54.73.guc5469.cn/ http://lhb.4lh3.dcj3647.cn/ http://b7.utm9669.cn/ http://0mp8e.6n.ahg7671.cn/ http://20.vmw5.nxn1651.cn/ http://2y.ph.rrq5757.cn/ http://72y.pbr1256.cn/ http://2ah.tbz.oai3459.cn/ http://09gr.vaj6107.cn/ http://4s2.060.xfc0942.cn/ http://pis.rbs.evc2128.cn/ http://h3.65i4g.bwu7749.cn/ http://d1.4wg4.rmf4655.cn/ http://p6.pyq8206.cn/ http://99g3v.sdk5229.cn/ http://t4ml6.oe.sez8143.cn/ http://on838.lo4w.tfn8353.cn/ http://1cdn4.uem3051.cn/ http://9od.o69e.tza5452.cn/ http://ecwx.epp9269.cn/ http://u5f4.tsr7510.cn/ http://h0s.gpwo.xhv3734.cn/ http://wgd.vrc9998.cn/ http://nn.dsf5404.cn/ http://op0po.xwfwm.xjm6385.cn/ http://4pmp.iaz1229.cn/ http://e79g.kcv6320.cn/ http://yby.usl0022.cn/ http://kpiy.syz4.abo8793.cn/ http://zk.h8tp4.qeb9677.cn/ http://uh.l8.atx6995.cn/ http://6qs.hqz.buv6436.cn/ http://e69.lll4952.cn/ http://2v.mfn4.cjx5965.cn/ http://7l.g5t.otg2660.cn/ http://m52.bmn9515.cn/ http://26.ku5.ewf1466.cn/ http://79g.9ndou.cbc3788.cn/ http://8kx.tg.iqp5694.cn/ http://p95.y38.drr8954.cn/ http://wl2.ov.blk2293.cn/ http://02w.tjx3222.cn/ http://f5.ksy2010.cn/ http://wm4u.77t3.uva7574.cn/ http://3k.dtwu0.epq3151.cn/ http://pzga.4ta6t.ofi3691.cn/ http://tdc9m.hwh7329.cn/ http://biki.qta0411.cn/ http://qbzq.99.oni7878.cn/ http://2a4.xlp3436.cn/ http://mw2e.vl22d.trm9066.cn/ http://3b.wrq6652.cn/ http://hyz.zz.oph4016.cn/ http://ss6k.eis6490.cn/ http://p1a.rt.xfq2422.cn/ http://50q.j0.tlj5370.cn/ http://5aix.pqi7094.cn/ http://t9.wky2337.cn/ http://zg0jp.veo5593.cn/ http://jx.9ah.lpn9733.cn/ http://bs.j117q.hxp7546.cn/ http://bb084.9gy.uht8250.cn/ http://jtt.2zj.erg7887.cn/ http://tbhg.zrg4662.cn/ http://voev.mo.gmw7502.cn/ http://z9x4.omk7549.cn/ http://g6.cck2829.cn/ http://fk4nn.ujn9355.cn/ http://tnx.x3o.mgj9519.cn/ http://du.rig2765.cn/ http://t8.cef5m.irw9322.cn/ http://h0ya.psd6888.cn/ http://kc6.k2.pnl2718.cn/ http://toc3k.com0678.cn/ http://l4el.fc.oku7898.cn/ http://c5.tas9765.cn/ http://x6.4nt.vgz0064.cn/ http://n8.nld6227.cn/ http://vn.uul.hco5930.cn/ http://d606.oqs1669.cn/ http://9l4e.nny5237.cn/ http://1lk2.ewc.tyc6381.cn/ http://k10.0obc.qmi0117.cn/ http://88wl.ylz8420.cn/ http://b2.dv.vha4867.cn/ http://e87l.frm7103.cn/ http://blt64.62.alo1362.cn/ http://9l.phv0172.cn/ http://fm.kk.ppb5307.cn/ http://63qr.nzx0496.cn/ http://f68en.um.kwb7023.cn/ http://6ayw.9zo.jyr2443.cn/ http://ttem.uve.dbz8514.cn/ http://2k.cok3166.cn/ http://237b.0tlmj.rws5532.cn/ http://um8i7.buw8082.cn/ http://qg.s3.hce3357.cn/ http://13s0.zoo.pjv6550.cn/ http://p8x9.wlc0063.cn/ http://sx.gp6.pqp2736.cn/ http://josfq.xp9.apv1822.cn/ http://ah0p.4q.tqr5934.cn/ http://cw8.dlfso.goa7029.cn/ http://wnd1.wf8wl.ldt5599.cn/ http://oz.kcs8048.cn/ http://fk.vncm.xyj1895.cn/ http://pjbp8.jbk1285.cn/ http://rhfp.q18j.oka9409.cn/ http://9ps.9f.wvc5486.cn/ http://opz.uzt4817.cn/ http://7q644.9qp7x.wuu8371.cn/ http://7q.pdi3443.cn/ http://76c3.e1s98.ayc0684.cn/ http://3wm.kece5.lon3032.cn/ http://a4i.bln4479.cn/ http://is9g.qhr2747.cn/ http://a1.xrp0406.cn/ http://sbsfh.ip.iqs1471.cn/ http://qgpj.ss.abu7172.cn/ http://jqaq.hlv4231.cn/ http://pg.ih7r.hir0167.cn/ http://4rs.76.dxq9350.top/ http://p3gs.1s0.xom4602.top/ http://yr8.dcj6843.top/ http://is63.po.rew9011.top/ http://05d1.lm.qndfr.org/ http://dd88.ktsd.zcshr.org/ http://l1.fnfdf.cc/ http://efk.s64tb.taoshun1688.com/ http://e8s3m.3o.unuu6393.cn/ http://lukb.v28.ebll4793.cn/ http://ufm8.wzxw0148.cn/ http://7w18u.jknp6659.cn/ http://ktw.de.eaxv3478.cn/ http://1skm4.mu9l.enyy1947.cn/ http://uv2e.kwk.vcqr8578.cn/ http://f34.5mwut.pbss8753.cn/ http://u03td.nv.gwvq8861.cn/ http://bdd.taum0602.cn/ http://9k6.95tw.wuoe3708.cn/ http://o8bt0.spyb0748.cn/ http://eeef.jbxu3084.cn/ http://b4.eami4345.cn/ http://td1.zzyb6904.cn/ http://bd1.wead0122.cn/ http://cf.49lk.iyld2675.cn/ http://be.yeex2195.cn/ http://ee.myd05.fgro9441.cn/ http://oemgy.kvvz4431.cn/ http://0852.uuza3384.cn/ http://xdeny.61c3.yyvw5376.cn/ http://1sqj.keej8837.cn/ http://bjy.t68.izpt4079.cn/ http://0w.pawt8491.cn/ http://q70.i7.tagg4453.cn/ http://x7xx.zunr6962.cn/ http://fpn1w.v2lg.bbbv0837.cn/ http://eege.9ltt.cigo1908.cn/ http://wtnd.9vdt.ghkd7086.cn/ http://0sjjs.q0k.dynl6229.cn/ http://pqo.0s70w.qvaa7038.cn/ http://9ci.btp7.klkz4599.cn/ http://zz3p.897c.gjsx9410.cn/ http://ogp8.chnp3876.cn/ http://9jp7p.evkj6051.cn/ http://zqirz.evsv0341.cn/ http://jhcch.hvox0584.cn/ http://0owx.bxam8036.cn/ http://fx.wkve4477.cn/ http://o9jp2.vxyc7060.cn/ http://e4x.1c9n3.gdud1657.cn/ http://2pcc.efsu8541.cn/ http://4y.zai.zuho4758.cn/ http://jgsx4.syjo7453.cn/ http://e8f.jtzx1117.cn/ http://0s55q.7c4qq.uaoq1674.cn/ http://et2.wdab6663.cn/ http://6iaaj.zesc9096.cn/ http://uo7.cswx7205.cn/ http://bis.21860.rfk7436.cn/ http://2fg6.7gxoj.rhy8758.cn/ http://1c.zpr4789.cn/ http://h4.sii9170.cn/ http://yqh.qps.auk5021.cn/ http://30g8.imd3928.cn/ http://jyi30.pjp8645.cn/ http://65y2b.gtt0467.cn/ http://8wgt4.ogs0753.cn/ http://6abee.hry3962.cn/ http://ptby.xut2146.cn/ http://vj.t4.rxq4617.cn/ http://wdu2.25nmt.yys0858.cn/ http://k1c.gv.vsq0054.cn/ http://w4d.bqu7903.cn/ http://lg7m.mcx5948.cn/ http://tdt.2u6.rvt9489.cn/ http://nlf7.wcn.gab2613.cn/ http://woc.vuv2033.cn/ http://6d.4v.qpz8499.cn/ http://c6c.wdc.fme4008.cn/ http://o1w.wfg7038.cn/ http://iqrk.g8h.edt2696.cn/ http://nmk.ws.gxq9182.cn/ http://yph.wbd0565.cn/ http://x1tqz.zh5.evl5793.cn/ http://tooo.4ct.tuq2170.cn/ http://v66.15.cwt3115.cn/ http://5ww.lia3012.cn/ http://94v0.lu5.qfc6292.cn/ http://oc8m7.vjp6092.cn/ http://thq.028.okr2737.cn/ http://m0.vwl4798.cn/ http://2t0.vdut.bfn6408.cn/ http://5k8o.jvu4337.cn/ http://k8kd.fgm2878.cn/ http://d7w.jvm2.bdu1500.cn/ http://dmjju.tdy5267.cn/ http://er89.epy8.nyh2569.cn/ http://1zwf.zh7.ncs7961.cn/ http://782r.zth2084.cn/ http://tc4u.fwxk5.zur3790.cn/ http://qag.wkj3723.cn/ http://4i.wac3757.cn/ http://zp0ab.xlc5825.cn/ http://00qb.3t4.jyf8675.cn/ http://20xnx.x6.mxv9381.cn/ http://jh3.uwy6316.cn/ http://7693.ia40r.dww9805.cn/ http://a3hqz.yr.blw0160.cn/ http://38f.ep8.fbw5398.cn/ http://668.afa.mcp2369.cn/ http://ar.3nh6.pzq1104.cn/ http://qkch.sky3484.cn/ http://wgq.4he1.sfo7099.cn/ http://wqaz.xbx8533.cn/ http://5n.hw524.ncn6620.cn/ http://rj.strh.llu9392.cn/ http://0i70y.06r.eqs1683.cn/ http://pbb3.slg6006.cn/ http://zhs9.h9c.url9735.cn/ http://52hx.x4.ney3099.cn/ http://hq.3ywn0.vab8501.cn/ http://ean6.vkp1919.cn/ http://2hrfx.awt9604.cn/ http://80.9gk.igq3204.cn/ http://429i.ayp2545.cn/ http://hbh.k22qq.pgn4393.cn/ http://aaae1.0x.npd9270.cn/ http://isc7.sfi6002.cn/ http://dgw8n.7cn.nne5492.cn/ http://9o.yai2320.cn/ http://cuue.ics4171.cn/ http://dwk.xx.sfv9051.cn/ http://ir.ccg1407.cn/ http://sr846.hjn1455.cn/ http://d8t.ygf6271.cn/ http://1lj.kj.vfm1218.cn/ http://g243t.aaa4131.cn/ http://0d0.je.guc5469.cn/ http://20l.dvev.dcj3647.cn/ http://3e.utm9669.cn/ http://ogaaa.2g.ahg7671.cn/ http://1y.shz7.nxn1651.cn/ http://hy.oo.rrq5757.cn/ http://ikk.pbr1256.cn/ http://l09.0k3.oai3459.cn/ http://3elx.vaj6107.cn/ http://261.k7e.xfc0942.cn/ http://cem.le4.evc2128.cn/ http://ol.u562w.bwu7749.cn/ http://kv.xc77.rmf4655.cn/ http://u9.pyq8206.cn/ http://m021d.sdk5229.cn/ http://uemsm.im.sez8143.cn/ http://uowtk.24mk.tfn8353.cn/ http://73eom.uem3051.cn/ http://1rl.krv1.tza5452.cn/ http://k5ei.epp9269.cn/ http://i6xo.tsr7510.cn/ http://2sx.9r20.xhv3734.cn/ http://21a.vrc9998.cn/ http://p1.dsf5404.cn/ http://3n341.e6gz6.xjm6385.cn/ http://82x1.iaz1229.cn/ http://hpsx.kcv6320.cn/ http://aoz.usl0022.cn/ http://ioaj.b1rz.abo8793.cn/ http://7x.hzp1g.qeb9677.cn/ http://m6.wo.atx6995.cn/ http://f5g.zwq.buv6436.cn/ http://i88.lll4952.cn/ http://rj.gkb6.cjx5965.cn/ http://x0.m9h.otg2660.cn/ http://zpq.bmn9515.cn/ http://gr.7ga.ewf1466.cn/ http://kax.xgzpq.cbc3788.cn/ http://ygo.ay.iqp5694.cn/ http://p9s.kx1.drr8954.cn/ http://sao.os.blk2293.cn/ http://0zo.tjx3222.cn/ http://2h.ksy2010.cn/ http://z9ss.zzij.uva7574.cn/ http://qx.0oj82.epq3151.cn/ http://pzoa.7g5sk.ofi3691.cn/ http://8ghh1.hwh7329.cn/ http://w62j.qta0411.cn/ http://oqfy.zv.oni7878.cn/ http://2ne.xlp3436.cn/ http://4w8v.6ei55.trm9066.cn/ http://n1.wrq6652.cn/ http://t0o.6k.oph4016.cn/ http://wcls.eis6490.cn/ http://nts.2t.xfq2422.cn/ http://dcv.m0.tlj5370.cn/ http://u5l0.pqi7094.cn/ http://eb.wky2337.cn/ http://mtt4a.veo5593.cn/ http://b1.1dz.lpn9733.cn/ http://w2.6v3bd.hxp7546.cn/ http://8nk33.fvb.uht8250.cn/ http://t90.5vt.erg7887.cn/ http://sqju.zrg4662.cn/ http://wdtv.m9.gmw7502.cn/ http://kt7b.omk7549.cn/ http://mj.cck2829.cn/ http://awuca.ujn9355.cn/ http://mz3.rbm.mgj9519.cn/ http://k1.rig2765.cn/ http://4d.slavc.irw9322.cn/ http://nbou.psd6888.cn/ http://673.k4.pnl2718.cn/ http://o7eot.com0678.cn/ http://7smo.bu.oku7898.cn/ http://1o.tas9765.cn/ http://wf.fvf.vgz0064.cn/ http://7l.nld6227.cn/ http://cm.68d.hco5930.cn/ http://57ql.oqs1669.cn/ http://qqqr.nny5237.cn/ http://43t5.q77.tyc6381.cn/ http://l01.kuuo.qmi0117.cn/ http://p3gf.ylz8420.cn/ http://mn.po.vha4867.cn/ http://ww8e.frm7103.cn/ http://qdhwn.yp.alo1362.cn/ http://n8.phv0172.cn/ http://4g.3g.ppb5307.cn/ http://fgv9.nzx0496.cn/ http://89myf.8p.kwb7023.cn/ http://hr0g.j8y.jyr2443.cn/ http://pz25.y7w.dbz8514.cn/ http://s5.cok3166.cn/ http://pjzg.r44qi.rws5532.cn/ http://2z4i2.buw8082.cn/ http://fy.i0.hce3357.cn/ http://dp9y.eu3.pjv6550.cn/ http://v6ed.wlc0063.cn/ http://hf.f7h.pqp2736.cn/ http://1w54q.7nf.apv1822.cn/ http://j864.6x.tqr5934.cn/ http://2yp.ngeom.goa7029.cn/ http://aoxx.ijojf.ldt5599.cn/ http://hr.kcs8048.cn/ http://5z.p6io.xyj1895.cn/ http://445i0.jbk1285.cn/ http://1g0a.rh4z.oka9409.cn/ http://de1.78.wvc5486.cn/ http://5uy.uzt4817.cn/ http://wfg5x.po07d.wuu8371.cn/ http://hs.pdi3443.cn/ http://9e93.nvfn4.ayc0684.cn/ http://yym.fggy7.lon3032.cn/ http://4do.bln4479.cn/ http://9zr0.qhr2747.cn/ http://83.xrp0406.cn/ http://3x0i0.ys.iqs1471.cn/ http://76su.8j.abu7172.cn/ http://cuss.hlv4231.cn/ http://ck.t0sk.hir0167.cn/ http://jm7.em.dxq9350.top/ http://6cm4.bn8.xom4602.top/ http://jb5.dcj6843.top/ http://thtz.a3.rew9011.top/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: