doujing6436
2013-02-24 08:15 阅读 47
已采纳

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

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?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • 已采纳
    douhuigang9550 douhuigang9550 2013-02-24 11:14

    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.

    点赞 评论 复制链接分享
  • douche1936 douche1936 2013-08-13 05:27

    For this kind of folder structure:

    main.go
    mylib/
      mylib.go
    

    The simplest way is to use this:

    import (
        "./mylib"
    )
    
    点赞 评论 复制链接分享
  • duanhe8280 duanhe8280 2014-07-22 16:14

    another solution:
    add src/myproject to $GOPATH.

    Then import "mylib" will compile.

    点赞 评论 复制链接分享
  • duanqian2368 duanqian2368 2017-07-06 15:08

    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"
    
    ...
    
    点赞 评论 复制链接分享
  • duanliang9288 duanliang9288 2017-12-24 18:11

    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 !

    点赞 评论 复制链接分享

相关推荐