2016-07-22 93 views
1

的界面我的項目的組織結構如下實現圍棋

github.com/achanda/poke 
├── cmd 
│   └── poke.go 
├── scanner.go 
├── txt_scanner.go 
└── types.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 
} 

現在,我想在我的主包調用這個(在poke.go)這樣

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

謝謝,那工作。錯誤信息是神祕的! –