gpt4 book ai didi

go - 在 Go 中实现一个接口(interface)

转载 作者:IT王子 更新时间:2023-10-29 02:04:13 24 4
gpt4 key购买 nike

我的项目组织如下

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()
}

运行失败

# command-line-arguments
./poke.go:111: cannot refer to unexported name poke.txtScanner
./poke.go:111: undefined: portscan.txtScanner

我做错了什么?

最佳答案

您需要访问包外的类型或字段,因此您应该使用首字母大写导出它们:

首先你应该用第一个大写字母定义你的txtScannertxt string,否则你也会看到这个错误:

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

像这样:

type TxtScanner struct {
Txt string
}

另请参阅此工作示例代码中的 newTxtScanner(host string) 函数:
捅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
}

类型.go:

package poke

type ScanResult struct {
}

扫描仪.go:

package poke

type Scanner interface {
Scan() *ScanResult
}

关于go - 在 Go 中实现一个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38517602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com