Как использовать пользовательские пакеты в Golang?

Я пытаюсь создать и использовать пользовательский пакет в Go. Это, вероятно, что-то очень очевидное, но я не могу найти много информации об этом. В принципе, у меня есть эти два файла в одной папке:

mylib.go

package mylib

type SomeType struct {

}

main.go

package main

import (
    "mylib"
)

func main() {

}

Когда я пытаюсь go run main.go, я получаю эту ошибку:

main.go:4:2: import "mylib": cannot find package

Сначала я попытался запустить go build mylib.go, но, похоже, ничего не делает (файл не генерируется, нет сообщения об ошибке). Итак, любая идея, как я могу это сделать?

Ответ 1

Во-первых, обязательно прочтите и поймите "Как написать код Go" .

Фактический ответ зависит от характера вашего "пользовательского пакета".

Если он предназначен для общего использования, рассмотрите использование так называемого "Github code layout" . В основном, вы делаете свою библиотеку отдельным go get -table проектом.

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

  • Поместите каталог с библиотечными файлами в каталог вашего проекта.
  • В остальной части вашего проекта обратитесь к библиотеке, используя ее путь относительно корня вашей рабочей области, содержащей проект.

Чтобы продемонстрировать:

src/
  myproject/
    mylib/
      mylib.go
      ...
    main.go

Теперь, на верхнем уровне main.go, вы могли бы import "myproject/mylib", и он будет работать нормально.

Ответ 2

Для такого типа структуры папок:

main.go
mylib/
  mylib.go

Самый простой способ - это:

import (
    "./mylib"
)

Ответ 3

Для проекта, размещенного на GitHub, здесь, что обычно делают люди:

github.com/
  laike9m/
    myproject/
      mylib/
        mylib.go
        ...
      main.go

mylib.go

package mylib

...

main.go

import "github.com/laike9m/myproject/mylib"

...

Ответ 4

другое решение:
добавьте src/myproject в $GOPATH.

Затем import "mylib" будет компилироваться.

Ответ 5

Я опытный программист, но совсем новый в мире Go! И я признаюсь, что столкнулся с несколькими трудностями в понимании Go... Я столкнулся с той же проблемой, когда пытался упорядочить свои файлы go в подпапках. Как я это сделал:

GO_Directory (тот, который назначен в $ GOPATH)

GO_Directory //the one assigned to $GOPATH
__MyProject
_____ main.go
_____ Entites
_____ Fiboo // in my case, fiboo is a database name
_________ Client.go // in my case, Client is a table name

В файле MyProject\Entities\Fiboo\Client.go

package Fiboo

type Client struct{
    ID int
    name string
}

в файле MyProject\main.go

package main

import(
    Fiboo "./Entity/Fiboo" 
)

var TableClient  Fiboo.Client

func main(){
    TableClient.ID = 1
    TableClient.name = 'Hugo'

    // do your things here
}

(Я использую Go 1.9 в Ubuntu 16.04)

И помните, ребята, я новичок на Go. Если то, что я делаю, - плохая практика, дайте мне знать!

Ответ 6

пакет лексико

type Analizador struct {

}

func main() {

}

En la clase основной пакет

import (

    "github.com/user/lexico
)