如何在Golang中使用自定义包?

时间:2013-02-24 08:15:48

标签: import package go

我正在尝试在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但它似乎没有做任何事情(没有生成文件,没有错误信息)。所以我知道如何做到这一点?

8 个答案:

答案 0 :(得分:157)

首先,请务必阅读并理解"How to write Go code"文档。

实际答案取决于“自定义套餐”的性质。

如果它是一般用途,请考虑使用所谓的"Github code layout"。基本上,您将库设为单独的go get - 表项目。

如果您的图书馆供内部使用,您可以这样:

  1. 将包含库文件的目录放在项目目录下。
  2. 在项目的其余部分中,使用相对于包含项目的工作区根目录的路径来引用库。
  3. 演示:

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

    现在,在顶级main.go,您可以import "myproject/mylib",它可以正常运作。

答案 1 :(得分:58)

对于这种文件夹结构:

main.go
mylib/
  mylib.go

最简单的方法是使用它:

import (
    "./mylib"
)

答案 2 :(得分:6)

对于在GitHub上托管的项目,以下是人们通常做的事情:

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

mylib.go

package mylib

...

main.go

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

...

答案 3 :(得分:4)

我是一名经验丰富的程序员,但对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
}

(我在Ubuntu 16.04上运行Go 1.9)

记得伙计们,我是Go的新手。如果我正在做的是不好的做法,请告诉我!

答案 4 :(得分:3)

另一种解决方案:
src/myproject添加到$ GOPATH。

然后import "mylib"将编译。

答案 5 :(得分:1)

我尝试了很多方法,但最好的方法是使用go.mod并放置

module nameofProject.com

然后从我使用的同一项目中导入

import("nameofProject.com/folder")

在任何地方创建项目非常有用

答案 6 :(得分:0)

包lexico

type Analizador struct {

}

func main() {

}

En la clase 包主要

import (

    "github.com/user/lexico
)

答案 7 :(得分:0)

遇到这个问题的人,需要先初始化go模块,然后才能使用自定义包。

例如您的代码目录是:../mycode/main.go。现在您要创建 diffcode 自定义包并将其导入主程序。您首先需要运行命令 go mod init mycode(确保您位于 ../mycode 目录下)。现在您创建包 diffcode 并且它有一些文件。要导入此包,您需要将其放入 main.go: module/package。在这种情况下,mycode/diffcode