ゴー

2016-07-22 6 views
1

のインターフェイスを実装する私のプロジェクトが組織されて、私は(poke.goに)私のメインのパッケージでこれを呼び出すようにしようとしています今ゴー

# cat scanner.go 
package poke 

type Scanner interface { 
    Scan() *ScanResult 
} 

# cat txt_scanner.go 
package poke 

type txtScanner struct { 
    txt string 
} 

func newTxtScanner(host string) Scanner { 
    return txtScanner{txt} 
} 

func (tcpcs txtScanner) Scan() *ScanResult { 
    // do stuff 
    return &result 
} 

を以下のようにファイルがありますこの

package main 

import "github.com/achanda/poke" 

func main() { 
    var sr poke.Scanner 
    sr = poke.txtScanner{txt} 
    sr.Scan() 
} 

のようにこれは

で実行に失敗します3210
# command-line-arguments 
./poke.go:111: cannot refer to unexported name poke.txtScanner 
./poke.go:111: undefined: portscan.txtScanner 

私は間違っていますか?

答えて

2

あなたがタイプまたはフィールド外パッケージにアクセスする必要があるので、あなたが最初の文字大文字使用してそれらをエクスポートする必要があります:最初のあなたがそうでなければ、これが表示されます、最初の大文字でごtxtScannertxt stringを定義する必要があります

をあまりにもエラー:このような

.\poke.go:8: implicit assignment of unexported field 'txt' in poke.TxtScanner literal 

また、このワーキングサンプルコードでnewTxtScanner(host string)機能を参照してください。
poke.go:

package main 

import "github.com/achanda/poke" 

func main() { 
    s := "test" 
    var sr poke.Scanner 
    sr = poke.TxtScanner{s} 
    sr.Scan() 
} 

txt_scanner.go:

package poke 

type TxtScanner struct { 
    Txt string 
} 

func newTxtScanner(host string) Scanner { 
    return TxtScanner{host} 
} 

func (tcpcs TxtScanner) Scan() *ScanResult { 
    // do stuff 
    result := ScanResult{} 
    return &result 
} 

types.go:

package poke 

type ScanResult struct { 
} 

scanner.go:

package poke 

type Scanner interface { 
    Scan() *ScanResult 
} 
+0

ありがとう、それは働いた。エラーメッセージは謎です! –