Database 如何解决go编程语言中的数据库结构问题?
我正在尝试创建postgresql数据库结构,以自动化Golang中的系统 该代码正在运行Database 如何解决go编程语言中的数据库结构问题?,database,postgresql,go,struct,Database,Postgresql,Go,Struct,我正在尝试创建postgresql数据库结构,以自动化Golang中的系统 该代码正在运行 package main import ( "database/sql" "fmt" _ "github.com/lib/pq" ) func checkError(err error){ if err!=nil{ panic(err) } } const ( host = "localhost" port =
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
func checkError(err error){
if err!=nil{
panic(err)
}
}
const (
host = "localhost"
port = 5432
user = "postgres"
password = "123"
dbname = "DatabaseName"
)
func main() {
psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
"password=%s dbname=%s sslmode=disable",
host, port, user, password, dbname)
db, err := sql.Open("postgres", psqlInfo)
checkError(err)
err = db.Ping()
checkError(err)
defer db.Close()
fmt.Println("Successfully connected!")
}
结果:成功连接
但是当我试图创建一个结构时,系统给了我一个错误
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
func checkError(err error){
if err!=nil{
panic(err)
}
}
type Database struct{
host, port, user, password, dbname string
db *sql.DB
}
func(d *Database) Open(){
psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+"password=%s dbname=%s sslmode=disable", d.host, d.port, d.user, d.password, d.dbname)
db, err := sql.Open("postgres", psqlInfo)
checkError(err)
d.db = db
}
func(d *Database) IsOpened() {
checkError(d.db.Ping())
}
func main() {
a := Database{host: "localhost", port: "5432", user: "postgres", password: "123", dbname: "DatabaseName"}
a.Open()
a.IsOpened()
}
结果:死机:拨号tcp:lookup tcp/%!d(字符串=5432):getaddrinfow:
找不到指定的类
goroutine1[正在运行]:main.checkError(…)/main.go:11
main.(*数据库).IsOpened(…)/main.go:28
main.main()/main.go:34
+0xcc
发生这种情况是因为您使用了数据类型的mashup。您已将端口号声明为字符串,但在构建连接字符串时,您已将端口号指定为整数,这将生成
host=localhost port=%!d(string=5432)user=postgres password=123 dbname=DatabaseName sslmode=disable
错误的连接字符串。您的连接字符串应该是host=localhost port=5432 user=postgres password=123 dbname=DatabaseName sslmode=disable
。您可以在struct
中将端口号数据类型从string
更改为int
type Database struct {
host, user, password, dbname string
port int
db *sql.DB
}
或者,在构建连接字符串时,可以将端口号类型从%d
更改为%s
psqlInfo := fmt.Sprintf("host=%s port=%s user=%s "+"password=%s dbname=%s sslmode=disable", d.host, d.port, d.user, d.password, d.dbname)
端口
是一个字符串,您正试图使用%d
对其进行格式化。已保存我的一天!谢谢