Import 如何使用自定义软件包

Import 如何使用自定义软件包,import,package,go,Import,Package,Go,我正在尝试在Go中创建和使用自定义包。这可能是非常明显的事情,但我找不到太多关于这方面的信息。基本上,我将这两个文件放在同一个文件夹中: mylib.go package mylib type SomeType struct { } package main import ( "mylib" ) func main() { } main.go package mylib type SomeType struct { } package main import (

我正在尝试在Go中创建和使用自定义包。这可能是非常明显的事情,但我找不到太多关于这方面的信息。基本上,我将这两个文件放在同一个文件夹中:

mylib.go

package mylib

type SomeType struct {

}
package main

import (
    "mylib"
)

func main() {

}
main.go

package mylib

type SomeType struct {

}
package main

import (
    "mylib"
)

func main() {

}
当我尝试运行main.go时,出现以下错误:

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

我尝试先运行
go build mylib.go
,但它似乎什么都没做(没有生成文件,没有错误消息)。你知道我该怎么做吗?

首先,一定要阅读并理解文档

实际答案取决于“定制包”的性质

如果是一般用途,考虑采用所谓的。基本上,您可以将库作为一个单独的

go-get
-table项目

如果您的库供内部使用,您可以这样做:

  • 将包含库文件的目录放在项目目录下
  • 在项目的其余部分中,使用相对于包含项目的工作区根目录的路径引用库
  • 证明:

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

    现在,在顶级的
    main.go
    中,您可以
    导入“myproject/mylib”
    ,它将正常工作。

    对于这种文件夹结构:

    main.go
    mylib/
      mylib.go
    
    最简单的方法是使用:

    import (
        "./mylib"
    )
    
    另一种解决方案:
    src/myproject
    添加到$GOPATH


    然后,
    导入“mylib”
    将编译。

    对于GitHub上托管的项目,人们通常会这样做:

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

    package mylib
    
    ...
    
    梅因,加油

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

    我是一个有经验的程序员,但是,对围棋世界来说还是一个新手!我承认我在理解Go方面遇到了一些困难。。。 当我试图在子文件夹中组织我的go文件时,我遇到了同样的问题。 我的做法是:

    GO_目录(分配给$GOPATH的目录)

    在文件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.mod和put

    module nameofProject.com
    
    然后我从我使用的同一个项目导入

    import("nameofProject.com/folder")
    

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

    对于那些面临此问题的人,您需要先初始化go模块,然后才能使用自定义包


    例如,您的代码目录是:
    。/mycode/main.go
    。现在您需要创建
    diffcode
    自定义包并将其导入到main中。您首先需要运行命令
    go mod init mycode
    (确保您位于
    。/mycode
    目录下)。现在您创建了包
    diffcode
    ,其中包含一些文件。要导入此软件包,您需要将其放入
    main.go
    模块/软件包
    。在本例中,
    mycode/diffcode

    我没有设置GOPATH变量,只有GOROOT.run
    go install
    mylib
    目录下,请先运行,然后重试。另请参见。@Joe,在内部运行“go install”仍然无法工作。这在go的最新版本中不再起作用,因为找不到包。正确的导入应该是
    foo/mylib
    (假设包含main.go的文件夹是
    foo
    )。@nemo,在最新版本的go中,我总是使用“/mylib”,它可以工作。使用go 1.2,我同意@this.lau,请注意这会导致
    go安装
    中断。如果您正在构建一个独立的项目,希望人们下载并在其上运行
    go build
    ,这很好——但是,如果您希望获得完整的
    go install
    支持,我会使用上面提到的“Github代码布局”(即使是脱离bitbucket或类似的布局)。我建议不要使用这种方式。是威尔打破了戈迪夫。godef it不了解“.”导入如果我在src/下创建一个新项目(myproject2),我如何导入mylib?@Kiril,你的意思是,你如何在
    myproject2
    的代码中导入
    mylib
    ?然后答案是“通过使用
    import“myproject/mylib”
    ——其思想是Go在从
    GOPATH
    环境变量中提取的每个目录下搜索导入的路径(它们被称为“工作空间”),但这种搜索(幸运的是)不是递归的,因此这些路径被有效地“锚定”“在各自的工作区。另一个必须阅读:。@MatthiasSommer,通常通过将mylib提取到每个微服务使用的公共包中。“使用”的确切定义取决于您首选的工作流。在企业级开发中,通常使用,但在最近的
    go mod
    开发中,可能就是答案(并且
    go mod
    也支持模块的销售)。@LeiYang,“要导入的包”是一个包含一个或多个go源文件的目录。至于“如何将包构建为.lib文件”,则导入lib文件“-答案取决于你真正想要什么。如果您关心的是编译速度,那么就不用担心了:Go工具链会在每个包的基础上缓存所有构建结果。相反,如果您想询问是否可以编译和分发一个仅二进制编译的包,那么答案是。这对于github托管的包这样的可获取路径不起作用。