Go初學者踩坑之go mod init與自定義包的使用詳解

roc_guo發表於2022-11-18
前言

入門很容易的 hello world, 到使用自定義包算一個小的進步,然而在使用上竟然浪費了不少時間,上網查了半天,才解決問題.

第一明確 是哪種方式,是go mod 方式 還是 go path 方式, 請自己查一下,本小文直說go mog 方式的小問題.

首先看一下 文件結構

Go初學者踩坑之go mod init與自定義包的使用詳解Go初學者踩坑之go mod init與自定義包的使用詳解

我自己寫了個 ToolKit.go, 內容大致如下:

問題是:怎麼引用它
//for all kind of tools
package Toolkit
 
import (
    "net/http"
    "strings"
)
 
 
func Left(str string, cnt int) string {
    l := strings.Count(str, "")
    if cnt >= l {
        cnt = l - 1
    } else if l < 0 {
        l = 0
    }
    return str[0:cnt]
}
...

引用方式各種出錯,舉例如下:

package main
import (
    "testing"
    "ToolKit"
)

或者:

package main
import (
    "testing"
    "./ToolKit"
)

或者

package main
import (
    "testing"
    "/usr/local/src/go/iot_watcher/ToolKit"
)

我能想到的方法都用到了,還是不行.

下面直接給出解決方案吧

檢視 go.mod,內容如下

module iot_watcher.com
 
go 1.17

OK, 把 module 後面那個東西考下來, 寫成這樣

ackage main
 
import (
    "testing"
    "iot_watcher.com/ToolKit"
)

就沒問題了.

為了方便,寫成別名引用方式

package main
 
import (
    "testing"
     
    ToolKit "iot_watcher.com/ToolKit"
)

補充: 終於明白 go mod init anyName.com

這個anyName.com 東西的用途了(一點兒用途)

說實話, 我最討厭這種幾乎一點兒含金量都沒有的系統配置了. 從微軟的MFC 到go , 真是無奈.浪費大量時間.

補充:go mod init出錯

go mod init出錯,錯誤提示如下:

go: cannot determine module path for source directory D:\workspace\go (outside GOPATH, no import comments)

解決辦法:新增模組名引數

go mod init module_name

例如,在test目錄下,即test模組,就用

go mod init test


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2923953/,如需轉載,請註明出處,否則將追究法律責任。

相關文章