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

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

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


为什么选择go语言?

  听说go语言是在几年前,但真正深入了解他却是在2017年,因为当时作为讲师 ,需要准备go语言的课程,结果稍一接触立刻就喜欢上这门语言了,作为长期的c/c++程序员来说,10年来参加了很多大型项目,用c来开发确实很苦逼,所以碰到go语言时,发现真的能够上瘾,新生的语言肯定会把作者对之前各种语言的痛点体现出来,尤其还是肯-汤普森这样的大师。

go语言的优点很多:

  • 代码很简洁
  • 上手很容易
  • 内存自回收
  • 运行很高效
  • 开发效率高
  • 风格很统一
  • 出身自名门

  这或许就是很多人选择go语言的原因吧,如果要做一个有后端的项目,相信go语言将成为很多程序员的首选吧。因为python,java等高级语言的优点,go都有,但是运行的效率更高。

为什么开发博客?

  博客在早些年是比较火的,现在大多数程序员都养成了写博客的习惯。其实博客是一个非常典型的互联网应用,其中所用的最基本技术正是网络编程中使用到的,在开发过程中也可以了解到一些开发的细节,同时还有对时下比较火爆的头条,抖音等产品有更深刻的了解。

开发需要准备什么?

  首选考虑数据存储,写好的博客需要存储起来,那么首先要有个数据库了,在这里我们选择MongoDB数据库,说到MongoDB,它的介绍很有意思,MongoDB是使用C++开发的一种分布式数据库,它是非关系型数据库中当中最像关系型的。使用MongoDB是因为它有一个document的概念,数据以文档的形式存储,当然也是key-value格式的。基于这样我们需要安装一个数据库,在linux平台安装非常简单。

sudo apt-get install mongodb 

  数据库的问题解决后,还要准备什么呢?可以动手了,剩下的就是在go语言里怎么写http服务器了,在写之前最好了解一下http协议,不然有些事情还是无法完全掌控。

go语言的数据库操作

首先研究明白go语言当中如何操作MongoDB

  • gopkg.in/mgo.v2 安装
go get -u gopkg.in/mgo.v2/bson
  • 连接到数据库
type Mongo struct {
    Session *mgo.Session
}

func (m *Mongo) Connect(url string) {
    session, err := mgo.Dial(url)
    if err != nil {
        panic(err)
    }
    m.Session = session
}

文档是MongoDB的核心构成,MongoDB编程基本上就是围绕文档进行增删改查操作。

  • 构造文档
    type Person struct {
        Name string
        Age  int
    }
    tabName := "person"
    ps := sess.DB("myblog").C(tabName)

文档构造好之后,就可以基于这个文档进行增删改查操作了

  • 增加文档
    增加一个人物信息,姓名和年龄
    //添加一个perso
    //func (c *Collection) Insert(docs ...interface{}) error
    err = ps.Insert(&Person{"yekai", 30})
    if err != nil {
        panic(err)
    }
  • 修改文档
    //修改person
    //func (c *Collection) Update(selector interface{}, update interface{}) error
    err = ps.Update(bson.M{"name": "yekai"}, bson.M{"name": "yekai", "age": 35})
    if err != nil {
        panic(err)
    }
  • 删除文档
    //删除全部纪录
    //(c *Collection) RemoveAll(selector interface{}) (info *ChangeInfo, err error)
    ps.RemoveAll(bson.M{"name": "yekai"})
  • 查询文档
    查询与其他接口略有区别在需要处理查询结果集,这在go语言中同样非常简单。
    //查询person
    p1 := Person{}
    //func (c *Collection) Find(query interface{}) *Query
    ps.Find(bson.M{"name": "yekai"}).One(&p1)
    fmt.Println(p1)   
  • 思路总结

mongodb编程都在一张图了

  在了解了go语言的优点和go语言的数据库操作后,我们就可以开始个人博客系统的开发了,下次我们将分享这部分的内容。


image

转载于:https://www.cnblogs.com/tokenpai/p/10271804.html

相关文章:

  • 糟心的两个月
  • Function()构造函数与函数直接量
  • 「PKUWC2018」猎人杀
  • Object 类有哪些方法
  • 为了使用好Apache Flink,Yelp实现了一个连接算法
  • C++多态
  • MariaDB 数据库
  • 应用调试(三)oops
  • 谷歌是 CNCF 开源项目最大贡献者,红帽次之
  • 海南“多规合一”改革促行政审批提速城乡面貌提质
  • jmap命令 Java Memory Map
  • 服务器从安装到部署全过程(二)
  • 对APP单例的统一封装(常规式)
  • 优化关键渲染路径
  • TiDB 3.0 Beta Release Notes
  • 网络传输文件的问题
  • $translatePartialLoader加载失败及解决方式
  • [Vue CLI 3] 配置解析之 css.extract
  • 「译」Node.js Streams 基础
  • 2017-09-12 前端日报
  • create-react-app项目添加less配置
  • ERLANG 网工修炼笔记 ---- UDP
  • Java 网络编程(2):UDP 的使用
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • TCP拥塞控制
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 对象引论
  • 多线程 start 和 run 方法到底有什么区别?
  • 服务器从安装到部署全过程(二)
  • 后端_MYSQL
  • 理清楚Vue的结构
  • 两列自适应布局方案整理
  • 免费小说阅读小程序
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 跳前端坑前,先看看这个!!
  • 一天一个设计模式之JS实现——适配器模式
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # 达梦数据库知识点
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (26)4.7 字符函数和字符串函数
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (接口封装)
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (一)pytest自动化测试框架之生成测试报告(mac系统)