当前位置: 首页 > news >正文

双语网站建设定制开发百度企业推广怎么收费

双语网站建设定制开发,百度企业推广怎么收费,杭州做网站哪家好,江苏商城网站制作公司最近有项目要使用 Go 开发,作为一个. NET Core 选手,准备先撸一个包含 CRUD 的最小 MVP 项目练手。 要创建一个 TODO 应用,会创建下面这些接口: APIDescriptionRequest bodyResponse bodyGET /todoitemsGet all to-do itemsNone…

最近有项目要使用 Go 开发,作为一个. NET Core 选手,准备先撸一个包含 CRUD 的最小 MVP 项目练手。

要创建一个 TODO 应用,会创建下面这些接口:

APIDescriptionRequest bodyResponse body
GET /todoitemsGet all to-do itemsNoneArray of to-do items
GET /todoitems/completeGet completed to-do itemsNoneArray of to-do items
GET /todoitems/{id}Get an item by IDNoneTo-do item
POST /todoitemsAdd a new itemTo-do itemTo-do item
PUT /todoitems/{id}Update an existing itemTo-do itemNone
DELETE /todoitems/{id}Delete an itemNoneNone

我觉得,做这样一个 API 应用,不管是 Go 还是其他语言,思路是一样的,无外乎:SDK 版本、开发工具、服务容器、HTTP 请求和响应处理、数据库对应的语言驱动、实体定义和映射、JSON 处理等等。因此,其他语言怎么做,换成 Go 之后,找对应的工具和实现方案就可以了。

1 、快速搭建开发环境

  • 官方下载 SDK:Download and install - The Go Programming Language
  • 安装 VS Code:Download Visual Studio Code - Mac, Linux, Windows
  • 安装扩展:“Go”
  • 安装 Go 工具包: ctrl+shift+p ,输入 go install 回车后,选择全部工具安装

2、构建 API

2 .1、创建目录,初始化项目
go mod init todo-list-api

安装依赖包:

  • gorilla/mux 是一个强大的 HTTP 路由器和 URL 匹配器,用于构建 Go Web 服务器: gorilla/mux: Package gorilla/mux is a powerful HTTP router and URL matcher for building Go web servers with 🦍 (github.com)
go get -u github.com/gorilla/mux
  • Postgres 数据库的 Go 驱动包:lib/pq: Pure Go Postgres driver for database/sql (github.com)
go get github.com/lib/pq
2.2、入口函数

新增 main.go 文件,内容如下:

func main() {r := mux.NewRouter()r.HandleFunc("/api/todoitems", GetToDoItems).Methods("GET")r.HandleFunc("/api/todoitems/complete", GetToDoItemInCompleted).Methods("GET")r.HandleFunc("/api/todoitems/{id}", GetToDoItemById).Methods("GET")r.HandleFunc("/api/todoitems", CreateToDoItem).Methods("POST")r.HandleFunc("/api/todoitems/{id}", DeleteToDoItem).Methods("DELETE")r.HandleFunc("/api/todoitems/{id}", UpdateToDoItem).Methods("PUT")srv := &http.Server{Handler:      r,Addr:         ":3000",WriteTimeout: 15 * time.Second,ReadTimeout:  15 * time.Second,}log.Fatal(srv.ListenAndServe())
}

HandleFunc 函数第一个参数是路由路径,第二个参数是处理函数,然后链式调用 Methods 指定可以处理的 HTTP 请求类型。

2.3、实体和数据库

新增 db.go 文件,内容如下:

var DB *sql.DB
func ConnectToDatabase() {connStr := "user=postgres dbname=postgres password=Mysoft7789 sslmode=disable"db, err := sql.Open("postgres", connStr)if err != nil {log.Fatal(err)}DB = db
}

这个函数用来打开并获取数据库连接,放在 init 方法中调用

func init() {ConnectToDatabase()
}

定义结构类型 ToDo,内容如下:

type Todo struct {Id         int    `json:"id"`Name       string `json:"name"`IsComplete bool   `json:"is_complete"`
}

创建 postgres 数据表

create table public.t_todo_item  
(  id          integer generated by default as identity,  name        varchar(20),  is_complete boolean  
);
2 .4、实现 API

新增 todo-service.go 实现所有的 API

func GetToDoItems(w http.ResponseWriter, r *http.Request) {rows, err := DB.Query("select id,name,is_complete from t_todo_item")if err != nil {panic(err.Error())}var todos []Todofor rows.Next() {var todo Todoerr = rows.Scan(&todo.Id, &todo.Name, &todo.IsComplete)if err != nil {log.Printf("Error happened in scan row. Err: %s", err)w.WriteHeader(http.StatusInternalServerError)return}todos = append(todos, todo)}jsonResp, err := json.Marshal(todos)if err != nil {log.Fatalf("Error happened in JSON marshal. Err: %s", err)w.WriteHeader(http.StatusInternalServerError)return}w.Header().Set("Content-Type", "application/json")w.Write(jsonResp)
}func GetToDoItemInCompleted(w http.ResponseWriter, r *http.Request) {rows, err := DB.Query("select id,name,is_complete from t_todo_item where is_complete = true")if err != nil {panic(err.Error())}var todos []Todofor rows.Next() {var todo Todoerr = rows.Scan(&todo.Id, &todo.Name, &todo.IsComplete)if err != nil {log.Printf("Error happened in scan row. Err: %s", err)w.WriteHeader(http.StatusInternalServerError)return}todos = append(todos, todo)}jsonResp, err := json.Marshal(todos)if err != nil {log.Fatalf("Error happened in JSON marshal. Err: %s", err)w.WriteHeader(http.StatusInternalServerError)return}w.Header().Set("Content-Type", "application/json")w.Write(jsonResp)
}func CreateToDoItem(w http.ResponseWriter, r *http.Request) {// convert todo struct from bodyvar todo Todoerr := json.NewDecoder(r.Body).Decode(&todo)if err != nil {log.Printf("Error happened in JSON unmarshal. Err: %s", err)return}// insert into dberr = DB.QueryRow("insert into t_todo_item (name, is_complete) values ($1, $2) RETURNING id", todo.Name, false).Scan(&todo.Id)if err != nil {log.Printf("Error happened in insert into db. Err: %s", err)w.WriteHeader(http.StatusInternalServerError)return}// return created todojsonResp, _ := json.Marshal(todo)w.Header().Set("Content-Type", "application/json")w.Write(jsonResp)
}func GetToDoItemById(w http.ResponseWriter, r *http.Request) {vars := mux.Vars(r)id := vars["id"]row := DB.QueryRow("select id,name, is_complete from t_todo_item where id = $1", id)var todo Todorow.Scan(&todo.Id, &todo.Name, &todo.IsComplete)jsonResp, err := json.Marshal(todo)if err != nil {log.Fatalf("Error happened in JSON marshal. Err: %s", err)w.WriteHeader(http.StatusInternalServerError)return}w.Header().Set("Content-Type", "application/json")w.Write(jsonResp)
}func DeleteToDoItem(w http.ResponseWriter, r *http.Request) {// check id from urlvars := mux.Vars(r)// convert id to intid, err := strconv.Atoi(vars["id"])if err != nil {log.Printf("Error happened in convert id to int. Err: %s", err)w.WriteHeader(http.StatusBadRequest)return}// if id less then 0, return 400if condition := id < 0; condition {w.WriteHeader(http.StatusBadRequest)return}// delete from db_, err = DB.Exec("delete from t_todo_item where id = $1", id)if err != nil {log.Printf("Error happened in delete from db. Err: %s", err)w.WriteHeader(http.StatusInternalServerError)return}w.WriteHeader(http.StatusOK)
}func UpdateToDoItem(w http.ResponseWriter, r *http.Request) {// check id from urlvars := mux.Vars(r)// convert id to intid, err := strconv.Atoi(vars["id"])if err != nil {log.Printf("Error happened in convert id to int. Err: %s", err)w.WriteHeader(http.StatusBadRequest)return}// if id less then 0, return 400if condition := id < 0; condition {w.WriteHeader(http.StatusBadRequest)return}// convert todo struct from bodyvar todo Todoerr = json.NewDecoder(r.Body).Decode(&todo)if err != nil {log.Printf("Error happened in JSON unmarshal. Err: %s", err)}todo.Id = id// update db_, err = DB.Exec("update t_todo_item set name = $1, is_complete = $2 where id = $3", todo.Name, todo.IsComplete, id)if err != nil {log.Printf("Error happened in update db. Err: %s", err)w.WriteHeader(http.StatusInternalServerError)return}w.WriteHeader(http.StatusOK)
}
2.5、测试验证

新增一个 todo.http 文件,内容如下:

# GET request to retrieve all todo itemsGET http://localhost:3000/api/todoitems HTTP/1.1#### GET request to retrieve a specific todo item by idGET http://localhost:3000/api/todoitems/20 HTTP/1.1#### GET request to retrieve all completed todo itemsGET http://localhost:3000/api/todoitems/complete HTTP/1.1  #### POST request to create a new todo itemPOST http://localhost:3000/api/todoitems HTTP/1.1Content-Type: application/json  {"name": "Buy grocerie1"
}#### PUT request to update an existing todo itemPUT http://localhost:3000/api/todoitems/20 HTTP/1.1Content-Type: application/json{"name": "Buy groceries","is_complete": true
}#### DELETE request to delete a todo itemDELETE http://localhost:3000/api/todoitems/2 HTTP/1.1

完工了。

http://www.15wanjia.com/news/42026.html

相关文章:

  • 微信漫画网站模板轻松seo优化排名 快排
  • 代写网站h5下一页
  • 如何免费制作企业网站网络营销的概念是什么
  • 不用服务器做网站seo自学网app
  • 网站建设怎么样工作目前搜索引擎排名
  • 深圳专业做网站建设哈尔滨网站优化
  • 专业做网站价格韩国日本比分
  • 独立网站商城建设上海网站排名优化怎么做
  • 武汉高端网站制作公司站长工具搜索
  • 电商企业网站建设的一般要素有哪些6谷歌seo优化公司
  • 网站数据库5g株洲seo优化推荐
  • 工程造价询价网站搜索引擎快速排名推广
  • 黑龙江住房和城乡建设厅网站首页网店推广有哪些
  • 哪个网站做外贸零售比较好呢做一个app软件大概要多少钱
  • 国家市场监督管理总局级别企业seo优化
  • 兰州做网站的公司有哪些网站可以自己建立吗
  • 南宁公司的网站建设成都seo专家
  • 天天联盟广告网站如何做百度站长工具seo
  • 电子商务网站有哪些功能百度极速版app下载安装挣钱
  • html5网页设计案例如何提高seo关键词排名
  • 陕西网站建设厦门网站制作今日国际新闻10条
  • 东坑镇做网站seo优化是什么意思
  • 冷饮网站开发背景意义网络营销推广处点
  • 小企业一键做网站整站排名服务
  • 会HTML怎么做网站郑州网站建设哪家好
  • 旅游局网站建设方案站长工具ip地址查询域名
  • 雄安做网站福州seo网站管理
  • 网站布局策划百度信息流优化
  • 专门做二手手机的网站吗腾讯广告联盟
  • wordpress仿站教程微商推广哪家好