web-dev-qa-db-ja.com

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を実行しようとしましたが、何もしていないようです(ファイルは生成されず、エラーメッセージも表示されません)。だから私はこれを行うことができる方法のアイデアは?

160
laurent

まず、 "Goコードの書き方" ドキュメントを読んで理解してください。

実際の答えはあなたの "カスタムパッケージ"の性質によって異なります。

それが一般的な使用を意図しているのなら、いわゆる "Github code layout" を使うことを検討してください。基本的に、あなたはあなたのライブラリを別のgo get-tableプロジェクトにします。

あなたのライブラリが内部使用のためであるならば、あなたはこのようになるでしょう:

  1. プロジェクトのディレクトリの下にライブラリファイルのあるディレクトリを配置します。
  2. プロジェクトの残りの部分では、プロジェクトを含むワークスペースのルートに対する相対パスを使用してライブラリを参照します。

実証するために:

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

これで、最上位のmain.goでは、import "myproject/mylib"を作成でき、それで問題なく動作します。

158
kostix

このようなフォルダ構造の場合

main.go
mylib/
  mylib.go

最も簡単な方法はこれを使うことです:

import (
    "./mylib"
)
58
laurent

GitHubでホストされているプロジェクトのために、これが人々が通常することです:

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

mylib.go

package mylib

...

main.go

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

...
6
laike9m

私は経験豊富なプログラマーですが、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を実行しています)

覚えておいてください、私は囲碁の初心者です。私がしていることが悪い習慣であるなら、私に知らせてください!

4
Diego Favero

別の解決策:
$ GOPATHにsrc/myprojectを追加します。

それからimport "mylib"はコンパイルします。

3
Helin Wang

パッケージ辞書

type Analizador struct {

}

func main() {

}

En la claseパッケージメイン

import (

    "github.com/user/lexico
)
0
Hexagendedor