天天看點

go下載下傳安裝使用web架構iris + go mod使用

目錄

一、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(預設值)

  • 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】并完成相關代碼

go下載下傳安裝使用web架構iris + go mod使用

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下載下傳安裝使用web架構iris + go mod使用

現在檢視go.mod 内容:

go下載下傳安裝使用web架構iris + 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

go下載下傳安裝使用web架構iris + go mod使用

8、通路 http://localhost:8080/hello

go下載下傳安裝使用web架構iris + go mod使用

參考部落格:

  • 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