我有这样的结构:
├── app
│ ├── app.go
│ ├── handler
│ │ ├── common.go
│ │ └── users.go
│ ├── model
│ │ └── model.go
│ └── queries
│ └── queries.go
├── config
│ └── config.go
└── main.go
我所有的查询(SQL 查询)都在queries.go:
查询.go:
package queries
const (
QueryFindUser = `SELECT * FROM users WHERE id=$1` // <------ HERE
)
用户去:
package handler
import (
"GO_APP/app/model"
"GO_APP/app/queries"
"fmt"
"net/http"
"strconv"
"github.com/julienschmidt/httprouter"
_ "github.com/jinzhu/gorm/dialects/postgres"
"github.com/jmoiron/sqlx"
)
var db *sqlx.DB
// getUserOr404 gets a User instance if exists, or respond the 404 error otherwise
func getUserOr404(db *sqlx.DB, id int, w http.ResponseWriter, r *http.Request) (*model.User, error) {
user := model.User{}
err := db.Get(&user, queries.QueryFindUser, id) // <----- Here
return &user, err
}
如果我使用QueryFindUser(首字母大写),那么它将可以导出到所有其他包。但我不希望通过 say 访问它config/config.go
我希望它仅限于handler仅排除model/model.go.
如果我声明queryFindUser这将仅限于包queries,那么我将无法在任何地方使用它。
这个东西怎么解决?无需将其导出到所有其他包。我对 golang/java 很陌生,这个问题在 java 中也一样。那么在这种情况下该怎么办?如果你能提供对我也有帮助的资源。
慕运维8079593
相关分类