yk某医院网站源码分享?医院小程序源码

大家好,感谢邀请,今天来为大家分享一下yk某医院网站源码分享的问题,以及和医院小程序源码的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

原文转载于:https://segmentfault.com/a/1190000018536993

gomodules是golang1.11新加的特性。现在1.12已经发布了,是时候用起来了。Modules官方定义为:

模块是相关Go包的集合。modules是源代码交换和版本控制的单元。go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。

如何使用Modules?

把golang升级到1.11(现在1.12已经发布了,建议使用1.12)设置GO111MODULE

GO111MODULE

GO111MODULE有三个值:off,on和auto(默认值)。

GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:当前目录在GOPATH/src之外且该目录包含go.mod文件当前文件在包含go.mod文件的目录下面。

当modules功能启用时,依赖包的存放位置变更为$GOPATH/pkg,允许同一个package多个版本并存,且多个项目可以共享缓存的module。

gomod

golang提供了gomod命令来管理包。

gomod有以下命令:

如何在项目中使用

示例一:创建一个新项目

在GOPATH目录之外新建一个目录,并使用gomodinit初始化生成go.mod文件

?~mkdirhello\n?~cdhello\n?hellogomodinithello\ngo:creatingnewgo.mod:modulehello\n?hellols\ngo.mod\n?hellocatgo.mod\nmodulehello\n\ngo1.12

go.mod文件一旦创建后,它的内容将会被gotoolchain全面掌控。gotoolchain会在各类命令执行时,比如goget、gobuild、gomod等修改和维护go.mod文件。

go.mod提供了module,require、replace和exclude四个命令

module语句指定包的名字(路径)require语句指定的依赖项模块replace语句可以替换依赖项模块exclude语句可以忽略依赖项模块添加依赖

新建一个server.go文件,写入以下代码:

packagemain\n\nimport(\n”net/http”\n\n”github.com/labstack/echo”\n)\n\nfuncmain(){\ne:=echo.New()\ne.GET(“/”,func(cecho.Context)error{\nreturnc.String(http.StatusOK,”Hello,World!”)\n})\ne.Logger.Fatal(e.Start(“:1323”))\n}

执行gorunserver.go运行代码会发现gomod会自动查找依赖自动下载:

$gorunserver.go\ngo:findinggithub.com/labstack/echov3.3.10+incompatible\ngo:downloadinggithub.com/labstack/echov3.3.10+incompatible\ngo:extractinggithub.com/labstack/echov3.3.10+incompatible\ngo:findinggithub.com/labstack/gommon/colorlatest\ngo:findinggithub.com/labstack/gommon/loglatest\ngo:findinggithub.com/labstack/gommonv0.2.8\n#此处省略很多行\n…\n\n______\n/__/___//___\n/_//__/_\\/_\\\n/___/\\__/_//_/\\___/v3.3.10-dev\nHighperformance,minimalistGowebframework\nhttps://echo.labstack.com\n____________________________________O/_______\nO\\\n?httpserverstartedon[::]:1323

现在查看go.mod内容:

$catgo.mod\n\nmodulehello\n\ngo1.12\n\nrequire(\ngithub.com/labstack/echov3.3.10+incompatible//indirect\ngithub.com/labstack/gommonv0.2.8//indirect\ngithub.com/mattn/go-colorablev0.1.1//indirect\ngithub.com/mattn/go-isattyv0.0.7//indirect\ngithub.com/valyala/fasttemplatev1.0.0//indirect\ngolang.org/x/cryptov0.0.0-20190313024323-a1f597ede03a//indirect\n)

gomodule安装package的原則是先拉最新的releasetag,若无tag则拉最新的commit,详见Modules官方介绍。go会自动生成一个go.sum文件来记录dependencytree:

$catgo.sum\ngithub.com/labstack/echov3.3.10+incompatibleh1:pGRcYk231ExFAyoAjAfD85kQzRJCRI8bbnE7CX5OEgg=\ngithub.com/labstack/echov3.3.10+incompatible/go.modh1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s=\ngithub.com/labstack/gommonv0.2.8h1:JvRqmeZcfrHC5u6uVleB4NxxNbzx6gpbJiQknDbKQu0=\ngithub.com/labstack/gommonv0.2.8/go.modh1:/tj9csK2iPSBvn+3NLM9e52usepMtrd5ilFYA+wQNJ4=\ngithub.com/mattn/go-colorablev0.1.1h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg=\ngithub.com/mattn/go-colorablev0.1.1/go.modh1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=\n…省略很多行

再次执行脚本gorunserver.go发现跳过了检查并安装依赖的步骤。可以使用命令golist-m-uall来检查可以升级的package,使用goget-uneed-upgrade-package升级后会将新的依赖版本更新到go.mod也可以使用goget-u升级所有依赖

goget升级

运行goget-u将会升级到最新的次要版本或者修订版本(x.y.z,z是修订版本号,y是次要版本号)运行goget-u=patch将会升级到最新的修订版本运行gogetpackage@version将会升级到指定的版本号version运行goget如果有版本的更改,那么go.mod文件也会更改

示例二:改造现有项目(helloword)

项目目录为:

$tree\n.\n├──api\n│└──apis.go\n└──server.go\n\n1directory,2files

server.go源码为:

packagemain\n\nimport(\napi”./api”//这里使用的是相对路径\n”github.com/labstack/echo”\n)\n\nfuncmain(){\ne:=echo.New()\ne.GET(“/”,api.HelloWorld)\ne.Logger.Fatal(e.Start(“:1323”))\n}

api/apis.go源码为:

packageapi\n\nimport(\n”net/http”\n\n”github.com/labstack/echo”\n)\n\nfuncHelloWorld(cecho.Context)error{\nreturnc.JSON(http.StatusOK,”helloworld”)\n}

使用gomodinit***初始化go.mod

$gomodinithelloworld\ngo:creatingnewgo.mod:modulehelloworld

运行gorunserver.go

go:findinggithub.com/labstack/gommon/colorlatest\ngo:findinggithub.com/labstack/gommon/loglatest\ngo:findinggolang.org/x/crypto/acme/autocertlatest\ngo:findinggolang.org/x/crypto/acmelatest\ngo:findinggolang.org/x/cryptolatest\nbuildcommand-line-arguments:cannotfindmoduleforpath_/home/gs/helloworld/api

首先还是会查找并下载安装依赖,然后运行脚本server.go,这里会抛出一个错误:

buildcommand-line-arguments:cannotfindmoduleforpath_/home/gs/helloworld/api

但是go.mod已经更新:

$catgo.mod\nmodulehelloworld\n\ngo1.12\n\nrequire(\ngithub.com/labstack/echov3.3.10+incompatible//indirect\ngithub.com/labstack/gommonv0.2.8//indirect\ngithub.com/mattn/go-colorablev0.1.1//indirect\ngithub.com/mattn/go-isattyv0.0.7//indirect\ngithub.com/valyala/fasttemplatev1.0.0//indirect\ngolang.org/x/cryptov0.0.0-20190313024323-a1f597ede03a//indirect\n)

那为什么会抛出这个错误呢?

这是因为server.go中使用internalpackage的方法跟以前已经不同了,由于go.mod会扫描同工作目录下所有package并且变更引入方法,必须将helloworld当成路径的前缀,也就是需要写成importhelloworld/api,以往GOPATH/dep模式允许的import./api已经失效,详情可以查看这个issue。

更新旧的packageimport方式

所以server.go需要改写成:

packagemain\n\nimport(\napi”helloworld/api”//这是更新后的引入方法\n”github.com/labstack/echo”\n)\n\nfuncmain(){\ne:=echo.New()\ne.GET(“/”,api.HelloWorld)\ne.Logger.Fatal(e.Start(“:1323”))\n}

一个小坑:开始在golang1.11下使用gomod遇到过gobuildgithub.com/valyala/fasttemplate:modulerequiresgo1.12这种错误,遇到类似这种需要升级到1.12的问题,直接升级golang1.12就好了。幸亏是在1.12发布后才尝试的gomod?♂?

到这里就和新创建一个项目没什么区别了

使用replace替换无法直接获取的package

由于某些已知的原因,并不是所有的package都能成功下载,比如:golang.org下的包。

modules可以通过在go.mod文件中使用replace指令替换成github上对应的库,比如:

replace(\ngolang.org/x/cryptov0.0.0-20190313024323-a1f597ede03a=>github.com/golang/cryptov0.0.0-20190313024323-a1f597ede03a\n)

或者

replacegolang.org/x/cryptov0.0.0-20190313024323-a1f597ede03a=>github.com/golang/cryptov0.0.0-20190313024323-a1f597ede03a

GO语言作为当下的流行语言,或多或少也是需要了解学习的。

关注私信【go】获取更多go语言学习视频文档资料。

文章到此结束,如果本次分享的yk某医院网站源码分享和医院小程序源码的问题解决了您的问题,那么我们由衷的感到高兴!

Published by

风君子

独自遨游何稽首 揭天掀地慰生平