импорт пользовательского пакета в Go - PullRequest
0 голосов
/ 21 декабря 2018

Я проверил этот ответ и по какой-то причине либо я не смог правильно понять, либо он не работал

Кроме того, перед тем как начать, я понял, как мы можем это сделатьэто с github, но я хочу попробовать это без github

Для начала, скажем, у меня есть файл main.go

package main

import (
    "fmt"
    "math"
    "subpack"
)

//You Import packages without using comma in Go, rather space or new line
//In VS Code, if you use aren't using the package and run then it will automatically removie it

func main() {
    fmt.Println("hello world")
    //We use math.Floor to round the nunmber
    fmt.Println(math.Floor(2.7))
    fmt.Println(math.Sqrt(16))
    fmt.Println(subpack.Reverse)
}

Обратите внимание subpack здесь, это пользовательский пакет, который я сделал,Этот субпакет существует следующим образом

enter image description here

и содержит следующий код

package subpack

//If we make this in the same root level of our main it will throw an error

func Reverse(s string) string {
    runes := []rune(s)
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    return string(runes)
}

, когда мы выполняем наш запрос, выдается следующая ошибка

cannot find package "subpack" in any of:
        /usr/local/go/src/subpack (from $GOROOT)
        /Users/anilbhatia/go/src/subpack (from $GOPATH)

Вопрос: Возможно ли и если да, как использовать пользовательский пакет без github и не помещая его в основную папку GO, а просто путем ссылки на папку, содержащую наш файл go изкаталог, с которым мы работаем.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Начальная точка - $ GOPATH / src, а не папка вашего проекта.
Поэтому вам следует использовать

import "myproject/subpack"

вместо:

import "subpack"
0 голосов
/ 21 декабря 2018

Как показывает ошибка, компилятор не может найти subpack из

/ usr / local / go / src / subpack (из $ GOROOT)

где находятся стандартные библиотечные пакеты (например, fmt, strings) или

/ Users / anilbhatia / go / src / subpack (из $ GOPATH)

там, где установлены / определены пользователем пакеты.

Чтобы импортирование работало, вам просто нужно включить относительный путь пакета subpack (относительно $GOPATH/src) в main.go

Предположим, ваш main.go находится в /Users/anilbhatia/go/src/parentpack, тогда его импорт должен быть

import "parentpack/subpack"

Если я вас правильно понял, вы хотите, чтобы абонент subpack (скажем main.go)быть в несвязанном месте subpack.Это на самом деле работает из коробки.Ваш main.go может быть расположен где угодно.Когда вы его компилируете, компилятор видит путь импорта parentpack/subpack и переходит к $GOPATH/src и $GOROOT/src, чтобы найти его.

Для получения дополнительной информации об организации исходного кода и некоторых типичных примерах выможет запустить

 go help gopath

в вашей оболочке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...