web-dev-qa-db-ja.com

別のパッケージから構造体をインポートし、golangをファイルします

別のパッケージとファイルからタイプをインポートしようとすると問題が発生します。インポートしようとしている構造体はその下にあります。

type PriorityQueue []*Item

type Item struct {
   value string
   priority int   
   index int 
}

PriorityQueueをそのすべてのメソッドと共に同じファイルに配置する場合、次のように宣言します。

pq:= &PriorityQueue{}

私はこの単純な質問の答えを狂人のようにインターネットで探していましたが、答えが見つかりませんでした。私は通常Javaでプログラミングし、インポートクラスはとても初歩的です。

25

Goでは、型や関数をインポートせず、 packages をインポートします( 仕様:宣言のインポート)を参照 )。

インポート宣言の例:

import "container/list"

また、パッケージをインポートすることにより、そのすべてのexported識別子にアクセスでき、それらをpackagename.Identifiernameとして参照できます。次に例を示します。

var mylist *list.List = list.New()

// Or simply:
l := list.New()

インポート宣言には、たとえば次のようなトリックがあります。

import m "container/list"

"m.Identifiername"でエクスポートされた識別子を参照できます。

l := m.New()

また、次のことを行います。

import . "container/list"

パッケージ名は完全に省略できます。

l := New()

ただし、これらは「緊急時」または名前の衝突がある場合にのみ使用してください(まれです)。

46
icza

@iczaが上で言ったことに加えて:

Go 1.9には、パッケージからタイプをローカルタイプのように剥ぎ取ることができるタイプエイリアスがあります。

package.go内容:

type A struct {
    X, Y int
}

main.go内容:

...

import myTypes "path/to/package"

// note the equal sign
type A = myTypes.A

...
2
ddotsenko