Debian 10 开发一个go语言接口

Ws2年前分什么类7323

首先是安装go环境 

# 1、预备工作
sudo apt-get update
sudo apt-get -y install wget gcc make

# 2、下载go安装包
wget https://dl.google.com/go/go1.16.2.linux-amd64.tar.gz

# 3、解压
sudo tar -C /usr/local -xzf go1.16.2.linux-amd64.tar.gz

# 4、环境配置
nano /etc/profile
# 添加到末尾
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go

# 5、使配置生效
source /etc/profile

# 验证 / 打印 go 版本
 go version


go环境配置结束,进入正题,很多coder喜欢golang的高并发,但是我们这种小项目真的是~ 有些多余,纯体验下

1、go安装sql库,我用的MariaDB,就是Mysql的分支,用mysql的库就行

go get -u github.com/go-sql-driver/mysql
# 一般情况下,都是要设置代理的 github得翻一翻

2、直接代码展示了

package main

import (
    "database/sql"
    "encoding/json"
    "fmt"
    "net/http"
    "strconv"

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

func main() {
    http.HandleFunc("/search", ocrHandler)
    http.ListenAndServe(":8080", nil)
}

func ocrHandler(w http.ResponseWriter, r *http.Request) {
    // 参数处理
    keyword := r.FormValue("keyword")
    page := 1
    pageParam := r.FormValue("page")
    if pageParam != "" {
        pageInt, err := strconv.Atoi(pageParam)
        if err == nil {
            page = pageInt
        }
    }


    // 连接数据库
    db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/VIVA")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer db.Close()

    // 总数量
    var count int
    rowscount, err := db.Query("SELECT count(1) FROM ocr WHERE path LIKE ? or content LIKE ? ", "%"+keyword+"%",  "%"+keyword+"%")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer rowscount.Close()

    for rowscount.Next() {
      if err := rowscount.Scan(&count); err != nil {
          // 处理错误
          fmt.Println(err)
          return
      }
    }

    if err := rowscount.Err(); err != nil {
        // 处理错误
        fmt.Println(err)
        return
    }

    // 查询数据
    offset := (page - 1) * 20
    rows, err := db.Query("SELECT id,title,path FROM ocr WHERE path LIKE ? or content LIKE ? ORDER BY id DESC LIMIT ?, 20", "%"+keyword+"%",  "%"+keyword+"%", offset)

    if err != nil {
        fmt.Println(err)
        return
    }
    defer rows.Close()

    // 解析结果
    var ocrs []map[string]interface{}
    for rows.Next() {
        var id int
        var path string
        var title string
        err := rows.Scan(&id,&path,&title)
        if err != nil {
            fmt.Println(err)
            continue
        }

        ocr := map[string]interface{}{
            "id":id,
            "path":path,
        }


        ocrs = append(ocrs, ocr)
    }

    // 输出结果
    data := map[string]interface{}{
        "code": 200,
        "msg":  "success",
        "data":map[string]interface{}{
          "total" : count,
          "lists" : ocrs,
        },
    }
    json.NewEncoder(w).Encode(data)
}

3、接着编译下,就可以执行了

go build main.go
./main

4、配置api接口自动启动

# /etc/systemd/system/main.service
[Unit]
Description=Search API for OCR
After=network.target

[Service]
Type=simple
WorkingDirectory=/usr/bin/goLang
ExecStart=/usr/bin/goLang/main
Restart=on-failure
User=root

[Install]
WantedBy=multi-user.target

5、对应服务命令

# 启动服务
sudo systemctl start main.service

# 停止服务
sudo systemctl stop main.service

# 重启服务
sudo systemctl restart main.service

# 查看服务状态
sudo systemctl status main.service

# 开机启动服务
sudo systemctl enable main.service

# 禁用开机启动服务
sudo systemctl disable main.service


标签: go lang

相关文章

利用树莓派设置局域网代理

还有更方便的软路由就不介绍了,自己Google。正好有个闲置的树莓派,国外有个正在用的服务器。就给同事提供福利咯思路:在树莓派上安装v2ray客户端,然后同事们连接树莓派的代理就行了。1、树莓派安装v...

UNTITLED

随便发发,域名 服务器 闲着也是闲着,偶尔也有干货互联网从业20年,总归有点儿东西...

predis 配合 supervisord 做消息队列

不是完整的代码,了解大概用。我的测试服务器比较老。centos 6.5yum install supervisord  // 直接安装安装解释后,配置...

mpvue vant 做个简单的核销小程序

我们公司业务一般偏营销,小程序的属性在营销这块没有那么明显,所以很少会有小程序的业务,这次也是帮朋友的忙,用mpvue+vant做了个简单的应用。应用不复杂,但是大部分的功能也都用到了,比如生成/扫描...

换种思路训练gpt3.5

换种思路训练gpt3.5

问题一我用的是aws的免费服务器,centos,版本比较老旧,想在python3基础上运行openai,可惜怎么都装不了,openai提供的方法,使用pyenv来装,顺利解决。curl ht...

微信群聊机器人介入AI

微信群聊机器人介入AI

16年那时候我们的工作群就加入了机器人,那时候用的是web版的接口,后来微信封锁了,又改称了目前的PC端软件hook方式。只是最近把我们机器人拉入了客户群,充当客服,给他们解答订单进度问题。客户领导感...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。