go语言打造个人博客系统(二)


  在上篇文章go语言打造个人博客系统(一)中,我们了解了go语言的优点和go语言的数据库操作,本次我们会完成博客系统的后端开发。

博客系统后端接口开发

  • 路由测试
http.HandleFunc("/ping", Pong)
func Pong(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("pong"))
}
  • 上传博客

  博客上传正常需要传递很多文本,这个字符串存储不太理想,习惯上会把博客内容形成一个文件,将文件信息存储到后端服务器当中

http接口设计:

名称 说明
URL /upload
METHOD POST
请求数据 form文件中二进制数据
响应数据

请求示例:

curl --form "fileupload=@22.txt" http://localhost:8086/upload

代码处理:

http.HandleFunc("/upload", UploadFile)
//文件上传
func UploadFile(w http.ResponseWriter, r *http.Request) { f, h, err := r.FormFile("fileupload")
if err != nil {
panic(err)
}
dirname := "../file/" + h.Filename
file, err := os.Create(dirname)
if err != nil {
panic(err)
}
_, err = io.Copy(file, f)
if err != nil {
panic(err)
}
defer file.Close()
fmt.Println(h)
//w.Write([]byte("upload success"))
//写到 数据库 中
fmt.Println(h.Filename, dirname, h.Size)
MgSess.UploadFile(h.Filename, h.Filename, h.Size)
}
//mongo处理
func (m *MongoSessin) UploadFile(title, dir string, length int64) error {
fmt.Println("call UploadFile")
table := m.Session.DB("myblog").C("blogs")
return table.Insert(&BlogInfo{title, length, dir})
}
  • 查看博客列表

  对于发表的多篇博客,有一个列表的展示功能

http接口设计:

名称 说明
URL /lists
METHOD GET
请求数据
响应数据 [{title,length,filedir},{title,length,filedir}]

请求举例:

curl  http://localhost:8086/lists

响应示例:

[{"Title":"11.txt","Length":16,"FileDir":"11.txt"},{"Title":"22.txt","Length":21,"FileDir":"22.txt"}]
http.HandleFunc("/lists", Lists)
//路由函数
func Lists(w http.ResponseWriter, r *http.Request) { s, err := MgSess.Lists()
if err != nil {
panic(err)
}
fmt.Println(s)
data, err := json.Marshal(s)
fmt.Println(string(data))
w.Write(data)
}
//mongo处理
func (m *MongoSessin) Lists() ([]BlogInfo, error) {
fmt.Println("call Lists")
var blogInfos []BlogInfo
err := m.Session.DB("myblog").C("blogs").Find(nil).All(&blogInfos)
return blogInfos, err
}
  • 查看博客详细内容

  对于某一篇博文,可以查看详细内容,这个就要将之前的博客文件传递给前端。

http接口设计:

名称 说明
URL /:filename
METHOD GET
请求数据
响应数据 文件内容

请求举例:

curl  http://localhost:8086/22.txt

文件服务

http.Handle("/", http.FileServer(http.Dir("../file/")))

全部代码

/*
main.go
yekai
pdj
*/
package main import (
"fmt"
"net/http"
//"gopkg.in/mgo.v2/bson"
) func main() {
fmt.Println("blog begin ...")
MgSess = &MongoSessin{}
MgSess.Connect("localhost:27017")
http.HandleFunc("/ping", Pong)
http.HandleFunc("/upload", UploadFile)
http.HandleFunc("/lists", Lists)
http.Handle("/", http.FileServer(http.Dir("../file/")))
http.ListenAndServe(":8086", nil)
}
/*
router.go
yekai
pdj
*/
package main import (
"encoding/json"
"fmt"
"io"
"net/http"
"os"
) func Pong(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("pong"))
} func UploadFile(w http.ResponseWriter, r *http.Request) { f, h, err := r.FormFile("fileupload")
if err != nil {
panic(err)
}
dirname := "../file/" + h.Filename
file, err := os.Create(dirname)
if err != nil {
panic(err)
}
_, err = io.Copy(file, f)
if err != nil {
panic(err)
}
defer file.Close()
fmt.Println(h)
//w.Write([]byte("upload success"))
//写到 数据库 中
fmt.Println(h.Filename, dirname, h.Size)
MgSess.UploadFile(h.Filename, h.Filename, h.Size)
} func Lists(w http.ResponseWriter, r *http.Request) { s, err := MgSess.Lists()
if err != nil {
panic(err)
}
fmt.Println(s)
data, err := json.Marshal(s)
fmt.Println(string(data))
w.Write(data)
} /*
blog.go
yekai
pdj
*/
package main import (
"fmt" "gopkg.in/mgo.v2"
) type MongoSessin struct {
Session *mgo.Session
} var MgSess *MongoSessin type BlogInfo struct {
Title string
Length int64
FileDir string
} func (m *MongoSessin) Connect(url string) {
session, err := mgo.Dial(url)
if err != nil {
panic(err)
}
m.Session = session
} func (m *MongoSessin) UploadFile(title, dir string, length int64) error {
fmt.Println("call UploadFile")
table := m.Session.DB("myblog").C("blogs")
return table.Insert(&BlogInfo{title, length, dir})
} func (m *MongoSessin) Lists() ([]BlogInfo, error) {
fmt.Println("call Lists")
var blogInfos []BlogInfo
err := m.Session.DB("myblog").C("blogs").Find(nil).All(&blogInfos)
return blogInfos, err
}

  以上就是博客系统后端接口的全部内容,再搭配上一套好看的前端界面就可以使用啦。亲自写过golang代码,才会真正的体会到go语言的优点,快来学习吧。


go语言打造个人博客系统(二)的更多相关文章

  1. go语言打造个人博客系统(一)

    go语言打造个人博客系统(一) 为什么选择go语言?   听说go语言是在几年前,但真正深入了解他却是在2017年,因为当时作为讲师 ,需要准备go语言的课程,结果稍一接触立刻就喜欢上这门语言了,作为 ...

  2. django初探-创建简单的博客系统(二)

    上篇django初探-创建简单的博客系统(一)已经记录了Django实现博客的发布的整个过程,接下来继续说明博客标题和内容的显示. 显示博客详细 将博客内容保存到数据库还不是发布博客的终极目的,博客一 ...

  3. spring-boot序章:打造博客系统

    blog 使用spring-boot打造一个博客系统,在项目中学习! 项目功能 文章 游览 创建 编辑 删除 评论 用户 游客 注册用户 关注 被关注 后台统计 注册用户数 在线人数 文章总数 评论总 ...

  4. django初探-创建简单的博客系统

    django第一步 1. django安装 pip install django print(django.get_version()) 查看django版本 2. 创建项目 打开cmd,进入指定目录 ...

  5. django初探-创建简单的博客系统(一)

    django第一步 1. django安装 pip install django print(django.get_version()) 查看django版本 2. 创建项目 打开cmd,进入指定目录 ...

  6. 如何快速部署国人开源的 Java 博客系统 Tale

    除了闷头专研技术之外,程序员还需要不断地写作进行技术积累,写博客是其中最重要的方式之一.商业博客平台不少,但是更符合程序员背景的方案,是自己开发一个博客平台或者使用开源的博客平台. 开源的博客平台多如 ...

  7. 二、Java多人博客系统-演变

    任何项目都是由小到大,逐步演变的.自己写的这个博客系统也不例外. 更新日志如下: 一.2014年底-2015年初 功能及技术: 1.定位为个人网站,介绍自己情况和发布文章等. 2.首页模块有:个人简介 ...

  8. 从入门到放弃,.net构建博客系统(二):依赖注入

    文章目录:<从入门到放弃,.net构建博客系统> 从入门到放弃,.net构建博客系统(一):系统构建 从入门到放弃,.net构建博客系统(二):依赖注入 上一篇中有讲到项目启动时会进行io ...

  9. Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)

    #Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ...

随机推荐

  1. js使用面向对象编写下拉菜单

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  2. MySQL casting from decimal to string(mysql decimal 转 varchar)

    今天群里一个哥们问我mysql怎么将decimal转成varchar,经过查阅资料发现,mysql好像不能将decimal直接转换成varchar,但是可以转成char,原文链接:http://sta ...

  3. Java核心技术及面试指南:视频列表

    如下是本书相关内容的视频列表,会动态更新 第一章 1 视频1.1  JDK和JRE和JVM的区别,安装Java开发环境    1.1.1  第2页 2 视频1.2  编写第一个HelloWorld程序 ...

  4. 简单实现 C# 与 Javascript的兼容

    本文章介绍下自己这刚实现的一个c#与js交互的插件.需求来源于一次与朋友的讨论.主要对话如下: 朋友:最近我想模拟一些数据,来测试我现在写的接口,但手工编写这些测试数据太麻烦了 本人:是啊,.net能 ...

  5. InstallShield Limited Edition使用说明

    从Visual Studio 2012开始,微软就把自家原来的安装与部署工具彻底废掉了,转而让大家去安装使用第三方的打包工具“InstallShield Limited Edition for Vis ...

  6. redis 系列25 哨兵Sentinel (高可用演示 下)

    一. Sentinel 高可用环境准备 1.1 Sentinel 集群环境 环境 说明 操作系统版本 CentOS  7.4.1708  IP地址 172.168.18.200 网关Gateway 1 ...

  7. 从零开始学习PYTHON3讲义(二)把Python当做计算器

    <从零开始PYTHON3>第二讲 上一讲我们说过了如何启动Python IDLE集成开发学习环境,macOS/Linux都可以在命令行执行idle3.Windows则从开始菜单中去寻找ID ...

  8. 从零开始学习PYTHON3讲义(一)认识Python

    课程名称 从零开始PYTHON3 课程长度 15讲 适用年龄 15-20岁(初三-大一) 本讲名称 认识Python 时长 90分钟 教学内容分析 Python是时下最流行的计算机编程语言之一.本课程 ...

  9. ZooKeeper 01 - 什么是ZooKeeper + 部署ZooKeeper集群

    目录 1 什么是ZooKeeper 2 ZooKeeper的功能 2.1 配置管理 2.2 命名服务 2.3 分布式锁 2.4 集群管理 3 部署ZooKeeper集群 3.1 下载并解压安装包 3. ...

  10. uWSGI 踩坑记

    一.协议的一致性 uWSGI 是在 nginx 后面,所以 nginx 转发请求时的协议要和 uWSGI 监听的协议一致.否则就会出现问题,因为是三者之间的通信,排查起来需要想清楚请求传递的次序: N ...