目錄
2.再次執行 go get github.com/kataras/iris 也可以加 -v -u ,如下
8、訪問 http://localhost:8080/hello
一、go mod介紹
1、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。
2、go mod
golang 提供了 go mod
命令來管理包。
go mod 有以下命令:
命令 | 說明 |
---|---|
download | download modules to local cache(下載依賴包) |
edit | edit go.mod from tools or scripts(編輯go.mod |
graph | print module requirement graph (打印模塊依賴圖) |
init | initialize new module in current directory(在當前目錄初始化mod) |
tidy | add missing and remove unused modules(拉取缺少的模塊,移除不用的模塊) |
vendor | make vendored copy of dependencies(將依賴複製到vendor下) |
verify | verify dependencies have expected content (驗證依賴是否正確) |
why | explain why packages or modules are needed(解釋爲什麼需要依賴) |
二、下載安裝web框架iris
1.打開CMD命令提示框,設置臨時環境變量
- set GO111MODULE=on
- set GOPROXY=https://goproxy.io
注意 https://goproxy.io 也可替換成阿里雲的 https://mirrors.aliyun.com/goproxy
2.再次執行 go get github.com/kataras/iris 也可以加 -v -u ,如下
- go get -v -u github.com/kataras/iris
這時候就把所有的依賴都下載下來了。
值得注意的是,這些包並沒有下載到 GOPATH/src 目錄下,而是在 GOPATH/pkg/mod 目錄中
三、快速搭建一個MVC模式的web項目
1、創建一個新項目【iris】並完成相關代碼
2、在iris目錄下使用初始化生成go.mod
文件
go mod init
初始化生成go.mod文件
go.mod文件一旦創建後,它的內容將會被go toolchain全面掌控。go toolchain會在各類命令執行時,比如go get、go build、go mod等修改和維護go.mod文件。
go.mod 提供了module
, require
、replace
和exclude
四個命令
module
語句指定包的名字(路徑)require
語句指定的依賴項模塊replace
語句可以替換依賴項模塊exclude
語句可以忽略依賴項模塊
3、添加依賴運行main函數
- 執行
go run main.go
運行代碼會發現 go mod 會自動查找依賴自動下載:
現在查看go.mod 內容:
go module 安裝 package 的原則是先拉最新的 release tag,若無tag則拉最新的commit。 go 會自動生成一個 go.sum 文件來記錄 dependency tree
注意:在由於 go.mod會掃描同工作目錄下所有 package 並且變更引入方法
,必須將 iris 當成路徑的前綴,也就是需要寫成"iris/web/controllers",以往 GOPATH/dep 模式允許的 import “"./web/controllers" 已經失效
四、項目完整代碼
1、movie.go
package datamodels
type Movie struct {
Name string
}
2、movie_repository.go
package repositories
type MovieRepository interface {
GetMovieName() string
}
type MovieManager struct {
}
func NewMovieManager() MovieRepository {
return &MovieManager{}
}
func (m *MovieManager)GetMovieName() string{
//模擬賦值給模型
//movie := &datamodels.Movie{Name:"慕課網視頻"}
//return movie.Name
return "慕課網視頻"
}
3、movie_service.go
package service
import (
"iris/repositories"
"fmt"
)
type MovieService interface {
ShowMovieName() string
}
type MovieServiceManager struct {
repo repositories.MovieRepository
}
func NewMovieServiceManager(repo repositories.MovieRepository)MovieService {
return &MovieServiceManager{repo:repo}
}
func (m * MovieServiceManager)ShowMovieName() string{
fmt.Println("我們獲取到的視頻名稱爲:"+m.repo.GetMovieName())
return "我們獲取到的視頻名稱爲:"+m.repo.GetMovieName()
}
4、movie_controller.go
package controllers
import (
"iris/repositories"
"iris/service"
"github.com/kataras/iris/mvc"
)
type MovieController struct {
}
func (c *MovieController) Get() mvc.View{
movieRepository := repositories.NewMovieManager()
movieService := service.NewMovieServiceManager(movieRepository)
MovieResult := movieService.ShowMovieName()
return mvc.View{
Name:"movie/index.html",
Data:MovieResult,
}
}
5、index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>{{.}}</h2>
</body>
</html>
6、main.go
package main
import (
"iris/web/controllers"
"github.com/kataras/iris"
"github.com/kataras/iris/mvc"
)
func main(){
app := iris.New()
app.Logger().SetLevel("debug")
app.RegisterView(iris.HTML("./web/views",".html"))
//註冊控制器
mvc.New(app.Party("/hello")).Handle(new(controllers.MovieController))
app.Run(
iris.Addr("localhost:8080"),
)
}
7、運行go run main.go
8、訪問 http://localhost:8080/hello
參考博客:
- Golang 解決 Iris 被牆的依賴包:https://www.cnblogs.com/ser0632/p/11374790.html
- go mod使用:https://www.cnblogs.com/dhcn/p/11321376.html
- GO111MODULE的設置(及GOPROXY):https://www.cnblogs.com/pu369/p/12068645.html
- Go語言Hello world(GOPATH和Go Module版):https://www.jianshu.com/p/2e19ba8ade18