怎么配置golang项目module模块?


为什么要配置模块?

app.gob.gomodules/b.gomodulesimporta.go
app.gomain
go env GO111MODULEonautogo env -w GO111MODULE="on"

文件结构

.goapp/b/,modules/
go.modcd appgo mod init appgo mod init bgo mod init modules

实现模块引用

go mod init ...app.goapp/go.modreplace
module app

go 1.15

replace abc.com/b => ../b

注意这里的abc.com只要和app.go中import的内容一致就行,可以是任意网址。

../app/b/b/app/replace abc.com/b => ./b

被调用的函数

b.goc.gofunc Hello()...func hello()...
b.gopackage bc.gomodules/package modules

实战案例:创建web服务器

app.go.../api/Ksave
api/.goapp.goapi.Ksave
app/app.goapi/api/ksave.gogo.modcdgo mod init appgo mod init apigo.mod
webindex.htmlHello!!
app/go.mod
module app

go 1.15

replace ksite.10knet.com/api => ./api
app.go
package main

import (
    "fmt"
    "log"
    "net/http"
    "os"
    "path"
    "strconv"

    "ksite.10knet.com/api"
)

func main() {
    //获取当前程序运行的目录
    dir, _ := os.Getwd()
    webDir := path.Join(dir, "../web")

    //设置文件服务
    http.Handle("/", http.FileServer(http.Dir(webDir)))

    //设置API接口
    http.HandleFunc("/api/Ksave", api.Ksave)

    //启动服务
    port := 80
    fmt.Println("Server is running on port " + strconv.Itoa(port) + " ...")
    log.Fatal(http.ListenAndServe(":"+strconv.Itoa(port), nil))

}
ksave.go
package api

import "net/http"

// Ksave 只是返回一个问候语.
func Ksave(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Hello Ksave!"))
    return
}
cdapp/go run app.gohttp://localhosthttp://localhost/api/Ksave
Ctrl+C
go build app.goapp./app

欢迎批评指正,交流学习。