目录

一、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 有三个值:offonauto(默认值)

  • 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 有以下命令:

命令说明
downloaddownload modules to local cache(下载依赖包)
editedit go.mod from tools or scripts(编辑go.mod
graphprint module requirement graph (打印模块依赖图)
initinitialize new module in current directory(在当前目录初始化mod)
tidyadd missing and remove unused modules(拉取缺少的模块,移除不用的模块)
vendormake vendored copy of dependencies(将依赖复制到vendor下)
verifyverify dependencies have expected content (验证依赖是否正确)
whyexplain 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 提供了modulerequirereplaceexclude 四个命令

  • 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

 

参考博客:

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐