Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Golang标准封装结构_Go - Fatal编程技术网

Golang标准封装结构

Golang标准封装结构,go,Go,我是一个新手,我正在尝试使用Ben Johnson网页的指导创建一个结构化的应用程序。不幸的是,他的示例不是一个完整的工作应用程序 他的网页是 我尝试过使用他的方法,但我一直没有定义:db error。它没有告诉我是哪一行导致了错误,只是文件MSSQL.go 有人能帮我解决这个错误吗 使用接受的解决方案编辑代码 语句打印机 梅因,加油 mssql.go 这似乎只是一个打字错误。似乎方法中存在问题 func (s *StatementService) Statement(customer str

我是一个新手,我正在尝试使用Ben Johnson网页的指导创建一个结构化的应用程序。不幸的是,他的示例不是一个完整的工作应用程序

他的网页是

我尝试过使用他的方法,但我一直没有定义:db error。它没有告诉我是哪一行导致了错误,只是文件MSSQL.go

有人能帮我解决这个错误吗

使用接受的解决方案编辑代码

语句打印机 梅因,加油 mssql.go
这似乎只是一个打字错误。似乎方法中存在问题

 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}