How to use custom packages

ImportPackageGo

Import Problem Overview


I'm trying to create and use a custom package in Go. It's probably something very obvious but I cannot find much information about this. Basically, I have these two files in the same folder:

mylib.go

package mylib

type SomeType struct {
	
}

main.go

package main

import (
	"mylib"
)

func main() {
	
}

When I try to go run main.go, I get this error:

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

I've tried to run go build mylib.go first but it doesn't seem to be doing anything (no file generated, no error message). So any idea how I could do this?

Import Solutions


Solution 1 - Import

First, be sure to read and understand the "How to write Go code" document.

The actual answer depends on the nature of your "custom package".

If it's intended to be of general use, consider employing the so-called "Github code layout". Basically, you make your library a separate go get-table project.

If your library is for internal use, you could go like this:

  1. Place the directory with library files under the directory of your project.
  2. In the rest of your project, refer to the library using its path relative to the root of your workspace containing the project.

To demonstrate:

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

Now, in the top-level main.go, you could import "myproject/mylib" and it would work OK.

Solution 2 - Import

For this kind of folder structure:

main.go
mylib/
  mylib.go

The simplest way is to use this:

import (
    "./mylib"
)

Solution 3 - Import

I am an experienced programmer, but, quite new into Go world ! And I confess I've faced few difficulties to understand Go... I faced this same problem when trying to organize my go files in sub-folders. The way I did it :

GO_Directory ( the one assigned to $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

On File MyProject\Entities\Fiboo\Client.go

package Fiboo
 
type Client struct{
    ID int
    name string
}

on file 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
}

( I am running Go 1.9 on Ubuntu 16.04 )

And remember guys, I am newbie on Go. If what I am doing is bad practice, let me know !

Solution 4 - Import

For a project hosted on GitHub, here's what people usually do:

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

mylib.go

package mylib

...

main.go

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

...

Solution 5 - Import

another solution:
add src/myproject to $GOPATH.

Then import "mylib" will compile.

Solution 6 - Import

I try so many ways but the best I use go.mod and put

module nameofProject.com

and then i import from same project I use

import("nameofProject.com/folder")

It's very useful to create project in any place

Solution 7 - Import

For those who face this problem, you need to first initialize the go module before you can use custom package.

For example your code directory is: ../mycode/main.go. Now you want to create diffcode custom package and import it into main. You will first need to run the command go mod init mycode (make sure you are under ../mycode directory). Now you create package diffcode and it has some files. To import this package, you need to put this into main.go: module/package. In this case, mycode/diffcode.

Solution 8 - Import

The essential question here is to tailor the idea of compiling the package as library binary, and then import the binary code as third party library like "net/http" or "fmt" in some new go project, instead using the original go code. I am wondering if this is possible or not for go programming.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionlaurentView Question on Stackoverflow
Solution 1 - ImportkostixView Answer on Stackoverflow
Solution 2 - ImportlaurentView Answer on Stackoverflow
Solution 3 - ImportDiego FaveroView Answer on Stackoverflow
Solution 4 - Importlaike9mView Answer on Stackoverflow
Solution 5 - ImportHelin WangView Answer on Stackoverflow
Solution 6 - ImportLucas Pereira de SouzaView Answer on Stackoverflow
Solution 7 - ImportHelping HandView Answer on Stackoverflow
Solution 8 - Importuser16934160View Answer on Stackoverflow