Go не разрешается импорт пакетов GitHub - PullRequest
2 голосов
/ 19 апреля 2020

Новичок в Go / Golang, и я немного лучше разбираюсь в его системе управления пакетами / зависимостями.

Я клонировал этот простой репозиторий веб-службы с GitHub и попытался запустить его с go run main.go. В этом main.go файле:

package main

import (
    "log"
    "net/http"
    "strconv"

    "github.com/wpferg/services/httpHandlers"
    "github.com/wpferg/services/storage"
    "github.com/wpferg/services/structs"
)

const PORT = 8080

var messageId = 0

func createMessage(message string, sender string) structs.Message {
    messageId++
    return structs.Message{
        ID:      messageId,
        Sender:  sender,
        Message: message,
    }
}

func main() {
    log.Println("Creating dummy messages")

    storage.Add(createMessage("Testing", "1234"))
    storage.Add(createMessage("Testing Again", "5678"))
    storage.Add(createMessage("Testing A Third Time", "9012"))

    log.Println("Attempting to start HTTP Server.")

    http.HandleFunc("/", httpHandlers.HandleRequest)

    var err = http.ListenAndServe(":"+strconv.Itoa(PORT), nil)

    if err != nil {
        log.Panicln("Server failed starting. Error: %s", err)
    }
}

Когда я запускаю это (run go main.go), я получаю:

main.go:8:2: cannot find package "github.com/wpferg/services/httpHandlers" in any of:
    /usr/local/go/src/github.com/wpferg/services/httpHandlers (from $GOROOT)
    /Users/myuser/go/src/github.com/wpferg/services/httpHandlers (from $GOPATH)
main.go:9:2: cannot find package "github.com/wpferg/services/storage" in any of:
    /usr/local/go/src/github.com/wpferg/services/storage (from $GOROOT)
    /Users/myuser/go/src/github.com/wpferg/services/storage (from $GOPATH)
main.go:10:2: cannot find package "github.com/wpferg/services/structs" in any of:
    /usr/local/go/src/github.com/wpferg/services/structs (from $GOROOT)
    /Users/myuser/go/src/github.com/wpferg/services/structs (from $GOPATH)

Так что кажется Go поддерживает способ «извлечения» других пакетов из GitHub через HTTP, но по какой-то причине, когда я запускаю его локально, он ожидает, что пакеты будут локальными.

Что я могу сделать, чтобы исправить это, чтобы другие пакеты были разрешены ? Почему Go ищет их локально, а не выбирает их через URL?

1 Ответ

2 голосов
/ 19 апреля 2020

Проблема в том, что это репо относится к до go модулям эпохи и не использует какую-либо систему управления зависимостями. Самый простой способ исправить это - попытаться инициализировать его как модуль (если вы используете go <1.14, установите переменную среды <code>GO111MODULE=on):

go mod init github.com/wpferg/services

, а затем выполните:

go run main.go

он автоматически разрешит свои зависимости и попытается запустить программу.

PS Но, учитывая, что это более старый код, и неясно, с какой golang версией (и версиями пакетов) было написано, вероятно, что это не будет работать или, в некотором роде, будет сломано.

...