неожиданный тип, ожидаемое имя

#mysql #go

#mysql #Вперед

Вопрос:

я попытался использовать golang. я новичок в этом golang. когда я пытаюсь подключиться к mysql, я получаю некоторую ошибку, подобную этой :

./TestConnection.go:9:35: синтаксическая ошибка: неожиданный тип, ожидающее имя ./TestConnection.go:15:1: синтаксическая ошибка: оператор без объявления вне тела функции ./TestConnection.go:36:5: синтаксическая ошибка: оператор без объявления вне тела функции

я запустил с помощью root.

вот мой исходный код

основной пакет

 import "database/sql"
import "fmt"
import _"github.com/go-sql-driver/mysql"

type trade_history struct {
    id, final_meta_report_id, trading_account_id, lp, lp2, lp3             int
    symbol, price, price_type, time, type, status, created_at, updated_at  string
    qty, pegged_distance, price_limit                      double
}
var db *sql.DB
var err error

funct getTradingHistory (final_Meta_report_ID int) (err error){
    username := "lalala"
    password := "felixsiong"
    host := "trades.xawrs2.us-east-2.rds.amazonaws.com"
    port := 3306
    db := "trading_dashboard"

    //use Sprintf if you wanna parse a string with values
    conn := fmt.Sprintf("%s:%s@%s:%s/%s", username, password, host, port, db)
    db, err = sql.Open("mysql", conn)
    defer db.Close()
    if err != nil {
        fmt.Println(err.Error())
    }
    err = db.Ping()
    if err != nil {
        fmt.Println(err.Error())
    }
    var p trade_history

    //if you have multiple lines of texts use ` instead of "
    err = db.QueryRow(`select id, final_meta_report_id, 
    trading_account_id, symbol, qty, price, price_type, time, lp, 
    lp2, lp3, pegged_distance, price_limit, time_limit, type, status, created_at`).Scan(amp;p)
    if err != nil {
        fmt.Println(err.Error())
    }


    fmt.Printf("id: %dn Final_meta_report_id: %dn trading_account_id: %dn symbol: %sn qty: %.2fn price: %sn price_type: %sn time: %sn lp: %dn lp2: %dn lp3: %dn pegged_distance: %.2fn")

    return err
}

func main() {
    getTradingHistory(2074)
}
  

я обновил свой код, став таким

 package main

import (
    "database/sql"
    "fmt"

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

var db *sql.DB
var err error

type trade_history struct {
    id, final_meta_report_id, trading_account_id, lp, lp2, lp3             int
    symbol, price, price_type, time, types, status, created_at, updated_at string
    qty, pegged_distance, price_limit                                      float64
}

func getTradingHistory(final_Meta_report_ID int) error {
    username := "lalala"
        password := "felixsiong"
        host := "trades.xawrs2.us-east-2.rds.amazonaws.com"
        port := 3306
        db := "trading_dashboard"

    //use Sprintf if you wanna parse a string with values
    conn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", username, password, host, port, db)
    //conn := fmt.Sprintf("%s:%s@%s:%s/%s", username, password, host, port, db)
    db, err = sql.Open("mysql", conn)
    defer db.Close()
    if err != nil {
        fmt.Println(err.Error())
    }
    err = db.Ping()
    if err != nil {
        fmt.Println(err.Error())
    }
    var p trade_history

    //if you have multiple lines of texts use ` instead of "
    err := db.QueryRow("select id, final_meta_report_id, 
    trading_account_id, symbol, qty, price, price_type, time, lp, 
    lp2, lp3, pegged_distance, price_limit, time_limit, type, status, created_at From trade_history Where final_Meta_report_ID = ?", final_Meta_report_ID ).Scan(amp;p)
    if err != nil {
        fmt.Println(err.Error())
    }

    fmt.Printf("id: %dn Final_meta_report_id: %dn trading_account_id: %dn symbol: %sn qty: %.2fn price: %sn price_type: %sn time: %sn lp: %dn lp2: %dn lp3: %dn pegged_distance: %.2fn")

    return err
}

func main() {
    getTradingHistory(2074)
}
  

но я все еще получаю ошибку, подобную этой, если я запускаю с помощью терминала

 ./testCOnnection.go:41:55: newline in string
./testCOnnection.go:41:55: syntax error: unexpected newline, expecting comma or )
./testCOnnection.go:43:57: syntax error: unexpected type at end of statement
./testCOnnec
  

tion.go:43:109: недопустимый символ U 003F ‘?’
./TestConnection.go:43:144: новая строка в строке

и если я запускаю с использованием кода Visual Studio, я получаю ошибку, подобную этой

myConnectionMySql.go:5:8: не удается найти пакет «github.com/go-sql-driver/mysql » в любом из: /usr/local/go/src/github.com/go-sql-driver/mysql (из $GOROOT) /Users/fuad/go/src/github.com/go-sql-driver/mysql (из $ GOPATH) статус выхода 1

Завершающий процесс с кодом: 1 мой вопрос в том, как решить мою проблему здесь?

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

1. Установка IDE, такой как Jetbrains Goland или VSCode с плагином Go, поможет вам написать действительный код Go. Ошибки в приведенном выше коде были бы выделены еще до запуска кода.

2. У вас здесь много кода, и, предположительно, ошибка возникает в одной или двух строках. Ожидается, что хороший вопрос по stackoverflow сведет код к минимальной форме, которая все еще воспроизводит ошибку. Предположительно, это код в строке 41, где в вашей строке есть новая строка.

3. хорошо, я проверю сначала один за другим

Ответ №1:

Я переписал ваш код:

 package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

var myDB *sql.DB
var err error

type trade_history struct {
    id, final_meta_report_id, trading_account_id, lp, lp2, lp3             int
    symbol, price, price_type, time, types, status, created_at, updated_at string
    qty, pegged_distance, price_limit                                      float64
}

func getTradingHistory(final_Meta_report_ID int) error {
    username := "lalala"
    password := "felixsiong"
    host := "trades.xawrs2.us-east-2.rds.amazonaws.com"
    port := 3306
    db := "trading_dashboard"

    //use Sprintf if you wanna parse a string with values
    conn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", username, password, host, port, db)
    myDB, err = sql.Open("mysql", conn)
    defer myDB.Close()
    if err != nil {
        fmt.Println(err.Error())
    }
    err = myDB.Ping()
    if err != nil {
        fmt.Println(err.Error())
    }

    var p trade_history

    //if you have multiple lines of texts use ` instead of "
    err = myDB.QueryRow(`select id, final_meta_report_id,
    trading_account_id, symbol, qty, price, price_type, time, lp,
    lp2, lp3, pegged_distance, price_limit, time_limit, type, status, created_at`).Scan(amp;p)
    if err != nil {
        fmt.Println(err.Error())
    }

    fmt.Println("id: %dn Final_meta_report_id: %dn trading_account_id: %dn symbol: %sn qty: %.2fn price: %sn price_type: %sn time: %sn lp: %dn lp2: %dn lp3: %dn pegged_distance: %.2fn")

    return err
}

func main() {
    if getTradingHistory(2074) != nil {
        fmt.Println(err.Error())
    }
}
  

Существует множество проблем:

  • type является ключевым словом для go
  • funct должно быть func
  • myDB.QueryRow(....).Scan(amp;p) нужно переписать его. вы можете найти надлежащую форму примера здесь
  • fmt.Println("id: %dn Final_meta_report_id:....... необходимо переписать его правильным образом для go
  • double будет заменен на float32/float64

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

1. Уддин Аль Азад я обновил свой исходный код, но я все еще получаю ошибку здесь

Ответ №2:

Ошибка syntax error: unexpected type, expecting name связана с использованием зарезервированного ключевого слова type в качестве имени переменной в указанном номере строки. Ключевое слово type существует для создания новых типов в golang, не может использовать его в качестве имени переменной.

И есть тип при объявлении функции. Это должно было быть func не funct . Оставшиеся две ошибки касаются этого.

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

1. я все еще получаю ошибку, когда пытаюсь изменить свой исходный код, есть идеи здесь?

2. С какой ошибкой вы столкнулись сейчас? обновлен ли вопрос с последней ошибкой? Я бы посоветовал вам использовать VSCode с плагином Go, который будет очень полезен для обнаружения ошибок перед компиляцией

3. да, я использую VSCode с GoPlugin, но при запуске появляется сообщение об ошибке, если я использую go, только ошибка, подобная этой myConnectionMySql.go:5:8: не удается найти пакет «github.com/go-sql-driver/mysql » в любом из: /usr / local /go /src /github.com /go-sql-driver / mysql (из $ GOROOT) / Users /fuad /go /src/ github.com /go-sql-driver / mysql (из $ GOPATH) статус выхода 1 Процесс завершается с кодом: 1 если я запускаю с помощью терминала, я получаю другую ошибку

Ответ №3:

 funct getTradingHistory
  

Должно быть изменено как

 func getTradingHistory 
  

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

1. я обновил свой исходный код, но у меня все еще есть ошибка, как это исправить?

Ответ №4:

измените это:

 funct getTradingHistory (final_Meta_report_ID int) (err error){}
  

Для:

 func getTradingHistory (final_Meta_report_ID int) (err error){}
  

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

1. я все еще получаю ошибку здесь после того, как я изменил свой исходный код, есть идея исправить это?