Golang标准封装结构
我是一个新手,我正在尝试使用Ben Johnson网页的指导创建一个结构化的应用程序。不幸的是,他的示例不是一个完整的工作应用程序 他的网页是 我尝试过使用他的方法,但我一直没有定义:db error。它没有告诉我是哪一行导致了错误,只是文件MSSQL.go 有人能帮我解决这个错误吗 使用接受的解决方案编辑代码 语句打印机 梅因,加油 mssql.goGolang标准封装结构,go,Go,我是一个新手,我正在尝试使用Ben Johnson网页的指导创建一个结构化的应用程序。不幸的是,他的示例不是一个完整的工作应用程序 他的网页是 我尝试过使用他的方法,但我一直没有定义:db error。它没有告诉我是哪一行导致了错误,只是文件MSSQL.go 有人能帮我解决这个错误吗 使用接受的解决方案编辑代码 语句打印机 梅因,加油 mssql.go 这似乎只是一个打字错误。似乎方法中存在问题 func (s *StatementService) Statement(customer str
这似乎只是一个打字错误。似乎方法中存在问题
func (s *StatementService) Statement(customer string)
在mssql.go中
row := db.QueryRow(`Select Customer, CustomerName From AccountsReceivable.rptfARStatementHeader(?)`, customer)
QueryRow应该是db的一种方法,但db没有定义。但是,在结构中
type StatementService struct {
DB *sql.DB
}
有一个*sql.DB实例。您正在使用的方法有一个*StatementService参数s。因此,我猜其目的是像这样访问s中的sql.DB字段
然后,在main.go中调用该方法,并传递一个包含数据库的StatementService实例:
ss := &statementprinter.StatementService{DB: db}
我想你需要把这条线改成
ss := &mssql.StatementService{DB: db}
因为这是实际的接口实现。现在的代码行将StatementService接口视为不会编译的结构。
main.go中的全局数据库在应用程序的生命周期内有效。它只是一个指针,可以复制使用 哪个文件的哪一行触发了错误?它没有说明哪一行触发了错误。它只是告诉我mssql.go是触发它的文件。我看到它:row:=db.QueryRow。错误是正确的,没有定义db。它应该引用什么?根据Ben Johnson的解释,main.go应该创建一个服务,这就是mssql.go应该使用的。我只是不知道怎么做。网站对此并不清楚。我将把链接放在bit.main.go中定义一个db包变量,但它与mssql.go位于不同的包中,因此无法从该文件访问它,原因有三:它没有导出,它没有以大写字母开头;mssql.go不通过其包引用它;它位于主程序包中,无法从其他程序包导入。错误消息已更改。看起来db现在已定义,但我现在获取main.go39:10:无法将*statementprinter.Statement分配给多重分配中的s type statementprinter.Statement。这是因为Statementid字符串返回的是*statementprinter.Statement,而不是statementprinter.Statement非常感谢您的帮助。一旦我实施了你的建议,我仍然有一些拼写错误需要纠正。所以花了一点时间,但我让它工作了
type StatementService struct {
DB *sql.DB
}
func (s *StatementService) Statement(customer string) (*statementprinter.Statement, error) {
var err error
var t statementprinter.Statement
//CHANGED LINE:
row := s.DB.QueryRow(`Select Customer, CustomerName From AccountsReceivable.rptfARStatementHeader(?)`, customer)
if row.Scan(&t.CustomerId, &t.CustomerName); err != nil {
return nil, err
}
return &t, nil
ss := &statementprinter.StatementService{DB: db}
ss := &mssql.StatementService{DB: db}