Назовите пакет имен

Как правильно ссылаться на пакеты проектов? У меня есть следующая структура папок:

/sbp
    /models.go
    /controllers.go
/main.go

В main.go Я хотел бы назвать свой контроллер действия от sbp.controllers, Я не могу найти способ правильно ссылаться на него

main.go

package main

import (
    "net/http"

    ...
    "github.com/pressly/chi"
)

var sess = session.Must(session.NewSession(&aws.Config{
    Region: aws.String("ap-southeast-1"),
}))
var dynamo = dynamodb.New(sess)

func main() {
    r := chi.NewRouter()
    r.Get("/", GetInvestments) // How do I call sbp.controller.GetInvestments?
    r.Post("/", AddInvestment)
    http.ListenAndServe(":8080", r)
}

sbp/controller.go

package sbp

import (
    "net/http"
    "time"

    "github.com/pressly/chi/render"
)

// AddInvestment Adds an investment
func AddInvestment(w http.ResponseWriter, r *http.Request) {
    ...
}

// GetInvestments Gets list of investments
func GetInvestments(w http.ResponseWriter, r *http.Request) {
    ...
}

Я попытался импортировать "sbp / controller" или даже "github.com/jiewmeng/finance/sbp/controller", но они, кажется, автоматически удаляют мой VSCode, так что я считаю его недействительным?

2 ответа

Похоже, ваш редактор работает автоматически goimports, что означает, что он удалит неиспользованный импорт. Так что просто добавив его в свой imports раздел не достаточно хорош; Вы также должны использовать импорт.

Похоже, ваш правильный путь импорта будет "github.com/jiewmeng/finance/sbp". Тогда вам также нужно сослаться на это:

package main

import (
    // other imports
    "github.com/jiewmeng/finance/bp"
)

func main() {
    // whatever
    http.Handle("/somepath", http.HandlerFunc(sbp.AddInvestment))
}

Прежде всего вам нужно определить местоположение вашего исходного кода.

Возможно, это дополнительный путь после $GOPATH/src/(path_to_your_project)

Так что в этом случае вы должны импортировать

import "path_to_your_project/sbp"

И окончательный код:

func main() {
    r := chi.NewRouter()
    r.Get("/", sbp.GetInvestments)
    r.Post("/", sbp.AddInvestment)
    http.ListenAndServe(":8080", r)
}
Другие вопросы по тегам