go依赖包管理工具对比
go依赖包管理工具对比
小小怪1688 发表于4个月前
go依赖包管理工具对比
  • 发表于 4个月前
  • 阅读 14
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

当开始真正用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在编译的时候怎么查找这个包呢?

这就是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基础上开发了多个管理工具,比较常用的有godepgovendorglide。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"
        }   
    ]   
}

如果要增加新的依赖包:

  1. Run go get foo/bar
  2. Edit your code to import foo/bar.
  3. Run godep save (or godep save ./…).

如果要更新依赖包:

  1. Run go get -u foo/bar
  2. 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/
http://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/

共有 人打赏支持
粉丝 0
博文 14
码字总数 61168
×
小小怪1688
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: