在golang

时间:2016-05-09 05:47:18

标签: go

我有一个简单的golang例程,它使用database/sql打开与Postgres DB的连接并执行一些操作

package main

import (
  "fmt"
  "database/sql"
  _ "github.com/lib/pq"
  "log"
)

const (
    DB_USER = "my_user"
    DB_NAME = "my_postgres_db"
)

// The return type here is wrong - what should it be?
func establish_db_connection() sql.DB {
  dbinfo := fmt.Sprintf(
    "user=%s password=%s dbname=%s sslmode=disable", 
    DB_USER, nil, DB_NAME)

  db, err := sql.Open("postgres", dbinfo)
  if err != nil { log.Fatal(err) }

  return db
}

func main() {
  // Get a connection to the DB
  db := establish_db_connection()

  // Do other stuff
  // ...
  // ...
}

我在编写establish_db_connection函数的签名时遇到问题 -

func establish_db_connection() sql.DB {

documentation suggests它返回sql.DB个实例。那么这不应该是返回类型吗?

我是golang的新手,所以只是第一次搞清楚大部分内容。

谢谢!

1 个答案:

答案 0 :(得分:1)

Open返回一个*sql.DB,一个指向sql.Db的指针。更改功能签名也返回*sql.DB

func establish_db_connection() *sql.DB {