目錄
一、go mod介紹
1、GO111MODULE
2、go mod
二、下載下傳安裝web架構iris
1.打開CMD指令提示框,設定臨時環境變量
2.再次執行 go get github.com/kataras/iris 也可以加 -v -u ,如下
三、快速搭建一個MVC模式的web項目
1、建立一個新項目【iris】并完成相關代碼
2、在iris目錄下使用初始化生成go.mod 檔案
3、添加依賴運作main函數
四、項目完整代碼
1、movie.go
2、movie_repository.go
3、movie_service.go
4、movie_controller.go
5、index.html
6、main.go
7、運作go run main.go
8、通路 http://localhost:8080/hello
一、go mod介紹
1、GO111MODULE
GO111MODULE
有三個值:
off
,
on
和
auto(預設值)
。
-
,go指令行将不會支援module功能,尋找依賴包的方式将會沿用舊版本那種通過vendor目錄或者GOPATH模式來查找。GO111MODULE=off
-
,go指令行會使用modules,而一點也不會去GOPATH目錄下查找。GO111MODULE=on
-
,預設值,go指令行将會根據目前目錄來決定是否啟用module功能。這種情況下可以分為兩種情形:GO111MODULE=auto
- 目前目錄在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
-
初始化生成go.mod檔案go mod init
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 mod 會自動查找依賴自動下載下傳:go run main.go
現在檢視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 >
<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