私はGolangの初心者であり、この言語のいくつかの概念を理解することはできません。私はそれが大好きですが、ウェブではすべての例が非常に単純で、正しい開発方法を説明していません。 これで、MySQLとのdb接続を設定したいと思います。 dbconfig.goファイルでパッケージdbconfigを作成し、interfacesファイルでパッケージdastructureを作成し、エンティティファイルで別のパッケージinitエンティティを作成します。 Goの別のパッケージから受信者を定義できません
main.go:
import (
y "github.com/danyalov/shebeke/dbconfig"
"github.com/danyalov/shebeke/routes"
_ "github.com/go-sql-driver/mysql"
"github.com/labstack/gommon/log"
)
func main() {
db, err := y.InitDB("mysql", "root:[email protected](localhost:3306)/dbtest?parseTime=true")
if err != nil {
log.Fatal(err)
}
e := routes.NewConnection(db)
e.Logger.Fatal(e.Start(":9898"))
}
routes.go:
import (
"github.com/danyalov/shebeke/datastructure"
y "github.com/danyalov/shebeke/dbconfig"
"github.com/labstack/echo"
"github.com/labstack/echo/middleware"
)
func NewConnection(db *y.DB) *echo.Echo {
e := echo.New()
env := Env{db}
e.Use(middleware.Logger())
e.Use(middleware.Recover())
e.GET("/contracts", env.GetContracts)
e.GET("/contract/:id", env.GetContractByID)
return e
}
type Env struct {
contract datastructure.Contract
}
services.go:
これは構造であります210dbconfig.go:
import (
"database/sql"
"fmt"
"github.com/labstack/gommon/log"
)
type DB struct {
*sql.DB
}
//InitDB initialize mysql database
func InitDB(driver, path string) (*DB, error) {
db, err := sql.Open(driver, path)
if err != nil {
log.Fatal(err)
}
err = db.Ping()
if err != nil {
log.Fatal(err)
} else {
fmt.Println("Connected to DB")
}
return &DB{db}, err
}
データ構造/ contract.go:
import y "github.com/danyalov/shebeke/datastructure/entity"
type Contract interface {
GetContracts() (y.Contracts, error)
GetContractByID(id int) (y.Contract, error)
}
データ構造/エンティティ/ contract.go:
import (
"github.com/labstack/gommon/log"
"time"
)
type Contract struct {
ID int `json:"id"`
State string `json:"state"`
StartDate time.Time `json:"start_date"`
FinishDate time.Time `json:"finish_date"`
}
type Contracts []Contract
func (db *DB) GetContracts() (c Contracts, err error) {
rows, err := db.Query("select * from contract")
if err != nil {
log.Fatal(err)
}
contract := Contract{}
for rows.Next() {
err = rows.Scan(&contract.ID, &contract.State, &contract.StartDate, &contract.FinishDate)
c = append(c, contract)
}
return c, err
}
理由私はcaメソッドの受信者としてdbconfigパッケージからエンティティパッケージにDBタイプをインポートしないでください。私はUnresolved type 'DB'
このプロジェクトのmy working copy(Git)です。私はdbconfig.goをエンティティの中に入れましたが、私はそれが気に入らない、dbconfigファイルの場所が間違っていると思います。
GOでdbを構成するための正しいファイル構造は何ですか? Gitやチュートリアルで独自の例があるかもしれませんか?
あなたは本当にあなたの問題を示す最小限の例を考え出すべきです。問題に関係のない複雑なコードをたくさん表示します。 – Volker