models.go:声明为res,未使用

理查德·鲁布列夫(Richard Rublev):

尽管更改了数据库名称和密码,但无法重现此示例。

.
├── main.go
├── main_test.go
├── models
│   └── models.go
└── utils
    └── encodeutils.go

楷模

func InitDB() (*sql.DB, error) {
    var err error
    db, err := sql.Open("postgres", "postgres://miki:[email protected]/mydb?sslmode=disable")
    if err != nil {
        return nil, err
    } else {
        // Create model for our URL service
        stmt, err := db.Prepare("CREATE TABLE WEB_URL(ID SERIAL PRIMARY KEY, URL TEXT NOT NULL);")
        if err != nil {
            log.Println(err)
            return nil, err
        }
        res, err := stmt.Exec()
        if err != nil {
            log.Println(err)
            return nil, err
        }
        return db, nil
    }
}

main.go

import (
    "database/sql"
    "encoding/json"
    "io/ioutil"
    "log"
    "net/http"
    "time"

    "github.com/PacktPublishing/Building-RESTful-Web-Services-with-Go/Chapter07/urlshortener/models"
    base62 "github.com/PacktPublishing/Building-RESTful-Web-Services-with-Go/Chapter07/urlshortener/utils"
    "github.com/gorilla/mux"
    _ "github.com/lib/pq"
)

// DB stores the database session imformation. Needs to be initialized once
type DBClient struct {
    db *sql.DB
}

// Model the record struct
type Record struct {
    ID  int    `json:"id"`
    URL string `json:"url"`
}

// GetOriginalURL fetches the original URL for the given encoded(short) string
func (driver *DBClient) GetOriginalURL(w http.ResponseWriter, r *http.Request) {
    var url string
    vars := mux.Vars(r)
    // Get ID from base62 string
    id := base62.ToBase10(vars["encoded_string"])
    err := driver.db.QueryRow("SELECT url FROM web_url WHERE id = $1", id).Scan(&url)
    // Handle response details
    if err != nil {
        w.Write([]byte(err.Error()))
    } else {
        w.WriteHeader(http.StatusOK)
        w.Header().Set("Content-Type", "application/json")
        responseMap := map[string]interface{}{"url": url}
        response, _ := json.Marshal(responseMap)
        w.Write(response)
    }
}

// GenerateShortURL adds URL to DB and gives back shortened string
func (driver *DBClient) GenerateShortURL(w http.ResponseWriter, r *http.Request) {
    var id int
    var record Record
    postBody, _ := ioutil.ReadAll(r.Body)
    json.Unmarshal(postBody, &record)
    err := driver.db.QueryRow("INSERT INTO web_url(url) VALUES($1) RETURNING id", record.URL).Scan(&id)
    responseMap := map[string]interface{}{"encoded_string": base62.ToBase62(id)}
    if err != nil {
        w.Write([]byte(err.Error()))
    } else {
        w.Header().Set("Content-Type", "application/json")
        response, _ := json.Marshal(responseMap)
        w.Write(response)
    }
}

func main() {
    db, err := models.InitDB()
    if err != nil {
        panic(err)
    }
    dbclient := &DBClient{db: db}
    if err != nil {
        panic(err)
    }
    defer db.Close()
    // Create a new router
    r := mux.NewRouter()
    // Attach an elegant path with handler
    r.HandleFunc("/v1/short/{encoded_string:[a-zA-Z0-9]*}", dbclient.GetOriginalURL).Methods("GET")
    r.HandleFunc("/v1/short", dbclient.GenerateShortURL).Methods("POST")
    srv := &http.Server{
        Handler: r,
        Addr:    "127.0.0.1:8000",
        // Good practice: enforce timeouts for servers you create!
        WriteTimeout: 15 * time.Second,
        ReadTimeout:  15 * time.Second,
    }
    log.Fatal(srv.ListenAndServe())
}

当我跑步

go run /home/miki/go/src/github.com/PacktPublishing/Building-RESTful-Web-Services-with-Go/Chapter07/urlshortener/main.go

我有

go/src/github.com/PacktPublishing/Building-RESTful-Web-Services-with-Go/Chapter07/urlshortener/models/models.go:22:3: res declared and not used

为什么?模型在main中初始化。

只是为了显示postqresql mydb =#\ c mydb \ dt

You are now connected to database "mydb" as user "postgres".
        List of relations
 Schema |  Name   | Type  | Owner 
--------+---------+-------+-------
 public | web_url | table | miki

如果我尝试

_, err = stmt.Exec()
if err != nil {
    log.Println(err)
    return nil, err
}
return db, nil

然后

2019/04/09 09:35:58 pq: relation "web_url" already exists
panic: pq: relation "web_url" already exists
平移至:

错误消息是明确的,res,在模型中定义,请参见下文,已声明且未使用

res, err := stmt.Exec()
if err != nil {
  log.Println(err)
  return nil, err
}
return db, nil

如果您不在乎res,可以使用_忽略它

_, err = stmt.Exec()
if err != nil {
  log.Println(err)
  return nil, err
}
return db, nil

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

警告:请使用诸如tensorflow / models中的Official / mnist / dataset.py之类的替代方法

Django,如何使用django.contrib.auth.models.User通过ID获取用户

“使用”声明为SFINAE

Laravel 5.0,无法重新声明类App \ models \ Category

使用inspectdb时无法生成models.py

C#-使用List.Add时Class.models.modelname.list.get返回null

使用ABC,PolymorphicModel,django-models提供元类冲突

Django-使用MEDIA_ROOT实现models.FileField引发权限错误

我如何使用Django.db.models Q模块查询多行用户输入文本数据

不能将tf.keras.optimizer与tf.keras.models.sequential一起使用

如何使用:value复制v-models:value?

使用models.manager来计算票数

Laravel模型查询-可以使用“ Models:all()”,但“ where / whereRaw”不返回任何数据

如何从django.models导入数据以在javascript中使用?

我如何在Django中使用Models对象预填充表单字段

在models.py [Django]的另一个类中使用类对象

使用npm发行@ tensorflow-models / knn-classifier的问题

未安装模块“ QtQml.Models”

Django表单的行为。ModelForm.save():为什么无法通过父代使用models.save_instance?

使用Intent和Models Getter和Setters切换布局android

C#/ NHibernate:关联引用未映射的类:MvcApplication7.Models.Comments

导航属性Project.Models.Customer.SubCustomers的声明类型与指定导航的结果不兼容

如何使用django.models将“ BINARY”设置为MySQL的VARCHAR列定义?

Are these models equivalent?

使用 Django Models 通过 jQuery 分配 HTML div

在 django models.py 中使用 if else

声明为未绑定的实例变量

貓鼬模型未寫入 mongoose.models 對象。問題?

直接使用函数或将其声明为变量