栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

golang与mongodb学习成果展示

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang与mongodb学习成果展示

golang与mongodb学习成果展示
  • 一,概述
    • 1别人
    • 2我
  • 二,项目原理
    • 1短网址原理
    • 2本项目原理
      • (1)原理概述
      • (2)代码安全性
  • 三,项目成果分享
    • 第一部分 点击跳转
    • 第二部分 数据库
      • 1结构体的定义
      • 2结构体的使用
    • 第三部分 html模板与动作
      • 1文件结构
      • 2源码与说明
      • 3执行效果
    • 第四部分 本地整合与测试
      • 1主函数外部
        • (1)导入包说明
        • (2)数据库连接
        • (3)定义结构体
        • (4)执行插入
      • 2主函数内部
        • (1)定义路由
        • (2)加载并使用HTML模板
        • (3)index.html
        • (4)调用插入
        • (5)所有定向跳转的查询、输出
        • (6)查询并执行跳转
        • (7)开启服务
      • 3数据库说明
      • 4测试效果
        • (1)路由测试
          • index.html
          • show
          • 定向跳转
        • (2)shell测试结果
    • 第五部分 搭建服务器环境并测试
      • 1 golang默认代理被墙
      • 2安装golang,mongodb
      • 3bulid运行
        • (1)build 项目
        • (2)写执行脚本 run.sh
        • (3) run.sh运行
  • 四,总结

一,概述 1别人

2我

从2021年11月29日的第一条有关mongodb的记录起,我一路浏览并详细学习了mongdb权威教程一、三,两版本,(三网上的资源白嫖不到,于是就自己出资购买了)golang的基础语法。

时至昨日,我基本学会了linux+golang+mongodb的网络服务。

这算是给自己的新年礼物了吧。
下面,将对个人立项“基于短网址原理的重定向”进行简要分享。

哦,对了,至于我为什么要学习mongodb和golang还特意接触gin框架和mgo.v2,在下一篇博客中,我会作出说明~~~~~

二,项目原理 1短网址原理

就是用一个随机码对应一个地址,然后在数据库里查找这个随机码,就可以找到对应的网址 。
当我们在浏览器里输入 http://url/RlB2PdD 时

(1)DNS首先解析获得 http://url 的 IP 地址
(2)当 DNS 获得 IP地址以后(比如:74.125.225.72),会向这个地址发送 HTTP GET 请求,查询短码 RlB2PdD
(3)http://url服务器会通过短码 RlB2PdD 获取对应的长 URL
(4)请求通过 HTTP 301 转到对应的长 URL https://www.baidu.com

2本项目原理 (1)原理概述

本项目原理与短网址大致相同,下面概述一下不同之处:

增设html页面,人工输入api参数和重定向url,插入链接。
增设/show页面,展示数据库内已有文档。
删除随机码生成脚本,使用用户指定的api参数最为“短网址”。

(2)代码安全性

无任何安全措施,仅用于初学实现功能。

三,项目成果分享

备注:项目在制作的过程中每个部分是独立进行的,所以每个部分的具体内容会与最终的代码有细微的出入。

第一部分 点击跳转

这部分比较简单,c.Redirect就可以解决:

package main
 
import (
   "github.com/gin-gonic/gin"
   "net/http"
)
 
func main() {
   r := gin.Default()
   r.GET("/:name", func(c *gin.Context) {
      name := c.Param("name")
      c.String(http.StatusOK, name)//输出获取name的值
      if name=="redirect"{         //通过变量来实现参数传递
      c.Redirect(http.StatusMovedPermanently,"http://www.baidu.com")}
   })
   r.Run(":8080")
 
}
第二部分 数据库

go语言有各色针对mongodb的驱动,我这里选择的是mgo.v2。
这里就介绍一下查询和插入的坑点,具体代码见第四部分。

1结构体的定义

注意结构体名称和对象要大写,血淋淋的教训。

type Surl struct {
    Urlname string `bson:"urlname"` 
    Nexturl string `bson:"nexturl"` 
}
2结构体的使用

查询时,可以定义如下:

//ALL:   var result []Surl 或者 result := []Surl{}
//One:   result := Surl{}

插入时,可以定义如下:

//多条数据:    reurl := []Surl{Surl{},Surl{}......}
//一条数据:    reurl := Surl{......}
第三部分 html模板与动作 1文件结构

2源码与说明

index.html
这里应该不用多说,一看就懂。




    
    
    
    golang and mongodb实验


    
网址API:
重定向URL:

main.go
使用HTML模板访问index.html文件。(当然,不新建文件夹也可以,把下方的“/html”删掉即可,本人还进行了其他html测试,未来分类故创建html。)
使用”/storage“作为API参数,执行获取动作,通过POST表单传递参数。

package main
 
import (
    "fmt"
    "net/http"
    "github.com/gin-gonic/gin"
)
 
func main() {
    r := gin.Default()
    r.LoadHTMLGlob("./html
        })
(6)查询并执行跳转

获取api参数,通过在数据库内查询api参数,得到对应跳转连接。

 r.GET("/:name", func(c *gin.Context) {
    name := c.Param("name")//获取跳转api
    
    session := InitMongoSession()
    myDB := session.DB("admin").C("s_url")
    result := Surl{}
    err := myDB.Find(bson.M{"urlname": name}).One(&result)
    if err != nil { panic(err) }
    n := result.Nexturl
    
    //c.String(http.StatusOK, name)//输出获取name的值
    //n="http://www.baidu.com"
    c.Redirect(http.StatusMovedPermanently,n)           //通过变量来实现参数传递重定向
})
(7)开启服务
r.Run()
3数据库说明

s_url集合中共两个文档,如下图

文档格式:{urlname:"",nexturl:""}

4测试效果

由于本人觉得go语言免费IDE不大好用,于是就使用文本编辑器进行编程,以下截图若有命令执行,皆为shell执行。

(1)路由测试 index.html

show

定向跳转

访问http://192.168.159.129:8080/daydream
访问http://192.168.159.129:8080/daydreamblog

(2)shell测试结果

顺带提一下,shell这里有个小坑,如果浏览器没有及时清理缓存,shell是抓不到流量的。

第五部分 搭建服务器环境并测试 1 golang默认代理被墙


换一个国内能访问的代理地址:

https://goproxy.cn

执行命令:

go env -w GOPROXY=https://goproxy.cn

2安装golang,mongodb

二者配置过程就略了,初学的时候大家都会的。
下面展示一下在服务器上的运行结果:

3bulid运行 (1)build 项目

go build main.go
chmod 777 main

(2)写执行脚本 run.sh

run.sh内容

#!/bin/bash
# 设置为 release 生产模式
export GIN_MODE=release
# 切换到路径下,这样才能够使用和开发时候一样的相对路径
cd /home/go/src/short_url
# 启动 build 后的可执行文件
./main
(3) run.sh运行

./run.sh

四,总结

源代码就放到github上了,CSDN审核太慢了。
这周末在做梦的github
以上就是项目的全部内容了,由于目的不在于立项,兴许项目比较简陋,但学习的成果已然明了,近三个月的付出总算没有白费。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/905500.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号