如何设置项目以使用ODBC和MSSQL驱动程序进行工作?

huangapple go评论129阅读模式
英文:

How to setup project to work with odbc and mssql drivers?

问题

我正在尝试使用ODBC驱动程序,但是遇到了错误:

  1. .\main.go:5: 导入但未使用:"code.google.com/p/odbc/api"
  2. .\main.go:72: 未定义:Driver
  3. .\main.go:76: 未定义:Driver

我尝试使用另一个驱动程序:go get github.com/denisenkom/go-mssqldb,但遇到了相同类型的问题。这就是为什么我怀疑我没有正确设置环境,但无法找到问题所在的原因。

我的环境如下:

  1. set GOARCH=amd64
  2. set GOBIN=
  3. set GOCHAR=6
  4. set GOEXE=.exe
  5. set GOHOSTARCH=amd64
  6. set GOHOSTOS=windows
  7. set GOOS=windows
  8. set GOPATH=C:\Go\Projects
  9. set GORACE=
  10. set GOROOT=C:\Go
  11. set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
  12. set TERM=dumb
  13. set CC=gcc
  14. set GOGCCFLAGS=-g -O2 -m64 -mthreads
  15. set CXX=g++
  16. set CGO_ENABLED=1

我使用go get code.google.com/p/odbc安装了ODBC。运行测试并成功完成:

C:\Go\Projects\src\code.google.com\p\odbc>go test -mssrv=.\sqlexp -v -run=MS ... --- PASS: TestMSSQLUTF16ToUTF8 (0.00 seconds) === RUN TestMSSQLExecStoredProcedure --- PASS: TestMSSQLExecStoredProcedure (0.01 seconds) PASS ok code.google.com/p/odbc 0.574s

我的代码如下(从mssql_test.go中复制):

  1. package main
  2. import (
  3. "code.google.com/p/odbc/api"
  4. "database/sql"
  5. "flag"
  6. "fmt"
  7. "os"
  8. "runtime"
  9. "testing"
  10. "time"
  11. )
  12. func mssqlConnect() (db *sql.DB, stmtCount int, err error) {
  13. .........
  14. return db, db.Driver().(*Driver).Stats.StmtCount, nil
  15. }
  16. func closeDB(t *testing.T, db *sql.DB, shouldStmtCount, ignoreIfStmtCount int) {
  17. s := db.Driver().(*Driver).Stats
  18. ......
  19. }

请注意,我只提供了翻译的部分,不包括代码部分。

英文:

I'm trying to use the odbc driver and I'm getting errors:

  1. .\main.go:5: imported and not used: "code.google.com/p/odbc/api"
  2. .\main.go:72: undefined: Driver
  3. .\main.go:76: undefined: Driver

I tried to work with another driver: go get github.com/denisenkom/go-mssqldb but ran unto the same type of problem.
That's why I suspect I didn't set up the environment right but unable to find the issue.


#My environment:#

  1. set GOARCH=amd64
  2. set GOBIN=
  3. set GOCHAR=6
  4. set GOEXE=.exe
  5. set GOHOSTARCH=amd64
  6. set GOHOSTOS=windows
  7. set GOOS=windows
  8. set GOPATH=C:\Go\Projects
  9. set GORACE=
  10. set GOROOT=C:\Go
  11. set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
  12. set TERM=dumb
  13. set CC=gcc
  14. set GOGCCFLAGS=-g -O2 -m64 -mthreads
  15. set CXX=g++
  16. set CGO_ENABLED=1

I installed odbc using go get code.google.com/p/odbc
Ran test and it finished fine:
C:\Go\Projects\src\code.google.com\p\odbc>go test -mssrv=.\sqlexp -v -run=MS
...
--- PASS: TestMSSQLUTF16ToUTF8 (0.00 seconds)
=== RUN TestMSSQLExecStoredProcedure
--- PASS: TestMSSQLExecStoredProcedure (0.01 seconds)
PASS
ok code.google.com/p/odbc 0.574s

My Code: (copied from mssql_test.go):

  1. package main
  2. import (
  3. "code.google.com/p/odbc/api"
  4. "database/sql"
  5. "flag"
  6. "fmt"
  7. "os"
  8. "runtime"
  9. "testing"
  10. "time"
  11. )
  12. func mssqlConnect() (db *sql.DB, stmtCount int, err error) {
  13. .........
  14. return db, db.Driver().(*Driver).Stats.StmtCount, nil
  15. }
  16. func closeDB(t *testing.T, db *sql.DB, shouldStmtCount, ignoreIfStmtCount int) {
  17. s := db.Driver().(*Driver).Stats
  18. ......

答案1

得分: 2

.\main.go:5: 导入但未使用: "code.google.com/p/odbc/api"
.\main.go:72: 未定义: Driver
.\main.go:76: 未定义: Driver

删除 import

  1. "code.google.com/p/odbc/api"

添加 import

  1. "code.google.com/p/odbc"

*Driver 替换为 *odbc.Driver。例如,

  1. return db, db.Driver().(*odbc.Driver).Stats.StmtCount, nil

  1. s := db.Driver().(*odbc.Driver).Stats

./main.go:5: 导入但未使用: "github.com/denisenkom/go-mssqldb" as mssql

import 改为

  1. _ "github.com/denisenkom/go-mssqldb"

例如,

  1. package main
  2. import (
  3. "database/sql"
  4. _ "github.com/denisenkom/go-mssqldb"
  5. )
  6. func main() {
  7. conn, err := sql.Open("mssql", makeConnStr())
  8. }

Go编程语言规范

导入声明

如果仅为了其副作用(初始化)而导入一个包,请使用空白标识符作为显式包名:

  1. import _ "lib/math"
英文:
  1. .\main.go:5: imported and not used: "code.google.com/p/odbc/api"
  2. .\main.go:72: undefined: Driver
  3. .\main.go:76: undefined: Driver

Delete import

  1. "code.google.com/p/odbc/api"

Add import

  1. "code.google.com/p/odbc"

Replace *Driver with *odbc.Driver. For example,

  1. return db, db.Driver().(*odbc.Driver).Stats.StmtCount, nil

and

  1. s := db.Driver().(*odbc.Driver).Stats

  1. ./main.go:5: imported and not used: "github.com/denisenkom/go-mssqldb" as mssql

Change import to

  1. _ "github.com/denisenkom/go-mssqldb"

For example,

  1. package main
  2. import (
  3. "database/sql"
  4. _ "github.com/denisenkom/go-mssqldb"
  5. )
  6. func main() {
  7. conn, err := sql.Open("mssql", makeConnStr())
  8. }

> The Go Programming Language Specification
>
> Import declarations
>
> To import a package solely for its side-effects (initialization), use
> the blank identifier as explicit package name:
>
> import _ "lib/math"

huangapple
  • 本文由 发表于 2014年6月24日 09:59:11
  • 转载请务必保留本文链接:https://go.coder-hub.com/24377250.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定