Golang Sql.Открыть неопределенный (тип string не имеет открытого поля или метода)

#go #golang-migrate

#Вперед #golang-миграция

Вопрос:

У меня ниже приведен код, который выдает неопределенную ошибку в sql.Open строке. не уверен, как исправить эту ошибку.

Любая помощь в устранении этой ошибки?

79:16 sql.Открыть неопределенный (тип string не имеет открытого поля или метода) Завершающий процесс с кодом: 2 сигнал: false

 package main

import (
    "database/sql"
    "fmt"
    "io/ioutil"
    "log"
    "os"
    "path/filepath"
    "runtime"
    "sort"
    "strings"

    _ "github.com/go-sql-driver/mysql"
)

const (
    username = ""
    password = ""
    hostname = ""
    dbname   = ""
)

type Server struct {
    ID          int
    Servername  string
    IP          sql.NullString `json:"ip"`
    OS          sql.NullString `json:"os"`
}

func dsn(dbName string) string {
    return fmt.Sprintf("%s:%s@tcp(%s)/%s", username, password, hostname, dbName)
}

func RemoveDuplicates(xs *[]string) {
    found := make(map[string]bool)
    j := 0
    for i, x := range *xs {
        if !found[x] {
            found[x] = true
            (*xs)[j] = (*xs)[i]
            j  
        }
    }
    *xs = (*xs)[:j]
}

func main() {
    var TEMPDIR = os.Getenv("HOME")
    if runtime.GOOS == "windows" {
        TEMPDIR = "c:\temp"
    }
    filename := filepath.FromSlash(TEMPDIR   "/a.txt")
    content, err := ioutil.ReadFile(filename)
    if err != nil {
        log.Fatal(err)
    }

    text := string(content)
    fmt.Println(text)

    w := strings.Fields(text)
    RemoveDuplicates(amp;w)
    sort.Strings(w)
    j := strings.Join(w, "','")
    result := "('"   j   "')"

    sql := "SELECT * FROM servers where servername in "   result
    fmt.Println("sql: ", sql)

    db, err := sql.Open("mysql", dbname)
    if err != nil {
        log.Printf("Error %s when opening DBn", err)
        return
    }
    defer db.Close()
    log.Printf("Connected to DBn")
}
  

Спасибо
SR

Комментарии:

1. Переменная sql := "select..." затеняет пакет sql . Используйте другое имя переменной.

Ответ №1:

Существует затеняющая переменная

 sql := "SELECT * FROM servers where servername in "   result
    fmt.Println("sql: ", sql)

db, err := sql.Open("mysql", dbname)
  

Вам нужно изменить имя переменной sql запроса