用Go语言搭建类似阅FM的阅读网站

aiwo00123 · · 1521 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

这段时间在学习Go语言和Beego框架,写个简单网站练练手

功能很简单,从数据库中随机读取一篇文章并呈现给网站。

要解决的主要问题有:1.从文件夹中读取所有txt文件并存入MySql

             2. 从Mysql中随机读取article

        


      遍历文件夹,找出所有txt文件并去掉后缀和路径前缀之后作为文章的标题,再读取文件,并存入数据库 :

              

//将指定目录下所有特定类型的文件插入数据库中
func InsertAll(dir, suffix string) {

	var title string

	db, err := sql.Open("mysql", "root:123@/myblog?charset=utf8")
	checkErr(err)

	length, fname := ReadAll(dir, suffix)
	i := 1
	var bct []byte //内容
	for {
		if i > length {
			break
		}
		bct, err = ioutil.ReadFile(fname[i-1])
		checkErr(err)
		title = Delsuffix(DelPrefix(fname[i-1]))

		stmt, errs := db.Prepare("insert blog set title=?,content=?")
		checkErr(errs)

		_, err2 := stmt.Exec(title, bct)

		checkErr(err2)
		i++
	}
}

//在dir下获取所有后缀为suffix的文件信息
func ReadAll(dir, suffix string) (n int, result []string) {
	var length int
	length = 0
	filepath.Walk(dir, func(path string, f os.FileInfo, err error) error {
		if f == nil {
			return err
		}
		if f.IsDir() {
			return nil
		}
		if IsType(path, suffix) {
			length++
		}
		return nil
	})

	re := make([]string, length)
	length = 0

	filepath.Walk(dir, func(path string, f os.FileInfo, err error) error {
		if f == nil {
			return err
		}
		if f.IsDir() {
			return nil
		}
		if IsType(path, suffix) {
			re[length] = path
			length++
		}
		return nil
	})

	return length, re
}

func IsType(filename, typ string) (re bool) {
	rs := []byte(filename)
	rl := len(rs)
	n := strings.LastIndex(filename, ".")
	tmp := string(rs[n+1 : rl])

	if tmp == typ {
		return true
	}
	return false
}

//去除文件名之前的路径
func DelPrefix(origin string) (re string) {
	rs := []byte(origin)
	rl := len(rs)

	n := strings.LastIndex(origin, "\\")
	result := string(rs[n+1 : rl])
	return result
}

//去除后缀
func Delsuffix(origin string) (re string) {
	rs := []byte(origin)

	n := strings.LastIndex(origin, ".")

	result := string(rs[0:n])
	return result
}

func checkErr(err error) {
	if err != nil {
		panic(err)
	}
}
随机读取article:

func GetrandBlog() (bl Blog) { //随机从数据库中返回一个blog

	var num int
	i := 0
	r := rand.New(rand.NewSource(time.Now().UnixNano()))

	db, err := sql.Open("mysql", "root:123@/myblog?charset=utf8")
	checkErr(err)

	db.QueryRow("select count(*) from blog").Scan(&num)

	arrnum := make([]int, num)

	rows, _ := db.Query("select id from blog")

	for rows.Next() {
		err = rows.Scan(&arrnum[i])
		i++

	}

	return One(arrnum[r.Intn(num)])

}

//根据id从数据库中读取text文件
func One(id int) (bl Blog) {
	var re Blog
	db, err := sql.Open("mysql", "root:123@/myblog?charset=utf8")
	checkErr(err)

	db.QueryRow("select title,content from blog where id=?",
		id).Scan(&re.Title, &re.Content)
	return re
}
代码:https://github.com/Zuru2048/Go/tree/master/MyBlog
                                           


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:aiwo00123

查看原文:用Go语言搭建类似阅FM的阅读网站

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1521 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传