• Go——使用 go mod ——有依赖的Go工程


    一、依赖于github.com/kataras/iris/v12,写一个http服务, 返回Hello World

    test.go

    package main
    import (
        iris "github.com/kataras/iris/v12"
    )
    func main() {
        app := iris.New()
        app.Get("/", func(ctx iris.Context) {
            ctx.HTML("<h1>Hello World!</h1>")
        })
        app.Run(iris.Addr(":8080"))
    }

    代码中使用了 iris

    1、可手动下载  go get github.com/kataras/iris/v12

    2、使用 mod 管理依赖

    初始化mod, war为模块名,可自定义

            go mod init i.com/war

    go.mod:

    module i.com/war
    go 1.17
    require github.com/kataras/iris/v12 v12.1.8

    运行test.go,     

    go run test.go

    依赖包会自动下载到 GOPATH/pkg/mod 目录下

    运行成功,访问  http://localhost:8080/

    二、关于go.mod

    如果你的包引入的外部包不够好,你想重构怎么办?这个时候就靠replace命令出手了

    go.mod:

    module github.com/shgopher/short
    replace(
        github.com/shgoper/i v0.1.0 => github.com/shgopher/newShort v0.3.0
    )

    三、如何依赖本地包

    1、新建本地包 ../model/mymodel.go 

    package model
    func Say() string {
        return "hi..."
    }

    package关键字后的名字,model可理解为类名,因为之后调用它的方法是通过  model.Say() 来调用,

    当然,也可在使用方用  import  modelhh "i.com/model" 来定义别名,这样就可用modelhh.Say() 来调用。

    另外,注意方法名首字母大写。

    进入model目录执行 go mod init i.com/model

    生成go.mod文件

    module i.com/model
    go 1.17

    初始化go.mod时,须指定模块名(域名/路径/名字),否则会报错 outside GOPATH, module path must be specified

    这里的模块名一般为 域名/路径/名字, 最后的名字就用包名字,

    当然不强制,非要定义为 themodel,既无域名也不与包名字一致,也不会报错。

    但是若代码是github托管的,那模块名必然就是 github.com/xxinc/model 的形式,因为只有这样才能被mod管理。

    2、新建本地main包 ../demo/mydemo.go

    package main
    import (
        "fmt"
        "i.com/model"
    )
    func main(){
        fmt.Println("demo main, say:")
        fmt.Println(model.Say())
    }

    这里的 import  "i.com/model" ,要与自身go.mod中的模块名一样,

    若代码是github托管的,那模块名就是 github.com/xxinc/model 的形式

    进入demo目录执行 go mod init i.com/demo

    生成go.mod文件

    module demo/demo
    go 1.17
    require i.com/model v0.0.0
    replace i.com/model => ../model 

    由于i.com/model地址下并没有model的代码,需要用replace来替换成本地地址,

    接下就可以在mydemo.go里调用model.Say()方法。

    另,replace后面的两个地址,都用远程地址时,作用就是替换远程包地址,而不用修改源码中的import。

    3、执行 go run mydemo.go 

    bogon:demo chong$ go run mydemo.go 
    demo main, say:
    hi...
    bogon:demo chong$ 

    四、命令备份

    go env
    GOPROXY="https://proxy.golang.org,direct"

    go mod init war

    #添加需要用到但go.mod中查不到的模块
    #删除未使用的模块
    go mod tidy

    参考:

    https://blog.csdn.net/qq_38151401/article/details/105780251

  • 相关阅读:
    Java-1.2-上机
    java-1.2-homework
    java-1.1-上机
    java-1.1-hello world
    上菜!数据结构实验
    卡比兽Python类和对象
    Python最新答案
    关于专业任意选修课的看法——利用层次分析法教你做出最佳选课方案
    虎牙主播开始上线
    小破财App
  • 原文地址:https://www.cnblogs.com/xingchong/p/15788922.html
Copyright © 2020-2023  润新知