这段时间在学习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
有疑问加站长微信联系(非本文作者)