go 实现一个本地文件存储数据接口

304 阅读1分钟

Go 语言原理与实践 学习资料

blog.csdn.net/zxxshaycorm…

studygolang.com/articles/58…

代码克隆自 github.com/Moonlight-Z…

get 请求测试

http://localhost:8080/community/page/get/1

post 请求测试

curl localhost:8080/community/page/post -X POST -d 'name=aaa'


package main



import (

"encoding/json"

"fmt"

"io"

"log"

"os"

"time"



"github.com/Moonlight-Zhao/go-project-example/repository"



"github.com/Moonlight-Zhao/go-project-example/cotroller"



"gopkg.in/gin-gonic/gin.v1"

)



func main() {



if err := Init("./data/"); err != nil {

os.Exit(-1)

}

// //Default返回一个默认的路由引擎

r := gin.Default()



r.GET("/community/page/get/:id", func(c *gin.Context) {

topicId := c.Param("id")

data := cotroller.QueryPageInfo(topicId)

// //输出json结果给调用方

c.JSON(200, data)

})



r.POST("/community/page/post", func(c *gin.Context) {

message := c.PostForm("message")

test := c.DefaultPostForm("name", "sss")



c.JSON(200, gin.H{

"status": "posted",

"message": message,

"test": test,

})

})



r.POST("/form_post", func(c *gin.Context) {

message := c.PostForm("message")

nick := c.DefaultPostForm("nick", "anonymous") // 此方法可以设置默认值



//实例化一个数据结构,用于生成json字符串

stu := repository.Post{

Id: 13,

ParentId: 3,

Content: "小哥哥我来了",

CreateTime: 1650437627,

}



//Marshal失败时err!=nil

jsonStu, err := json.Marshal(stu)



if err != nil {

fmt.Println(time.Now().Format("2006-01-02_15:04:05"), "生成json字符串错误")

} else {

fmt.Println(time.Now().Format("2006-01-02_15:04:05"), "生成数据json字符串成功")

}



//jsonStu是[]byte类型,转化成string类型便于查看

//fmt.Println(string(jsonStu))

ServerInfoData := string(jsonStu)

fmt.Println(ServerInfoData)

////////////////////////////////生成json字符串数据////////////////////////////////

//writeFile(ServerInfoData)

appendToFile("./data/output", ServerInfoData)



c.JSON(200, gin.H{

"status": "posted",

"message": message,

"nick": nick,

})

})



err := r.Run() // // listen and serve on 0.0.0.0:8080

if err != nil {

return

}

}



func Init(filePath string) error {

if err := repository.Init(filePath); err != nil {

return err

}

return nil

}



func openFile(filename string) (*os.File, error) {

if _, err := os.Stat(filename); os.IsNotExist(err) {

fmt.Println("file not exist")

return os.Create(filename)

}

fmt.Println("file exist")

return os.OpenFile(filename, os.O_RDWR, 0666)

}



func writeFile(fileStr string) {

f1, err1 := openFile("./data/output")

if err1 != nil {

log.Fatal(err1.Error())

}



defer f1.Close()



n, err1 := io.WriteString(f1, fileStr)

if err1 != nil {

log.Fatal(err1.Error())

}



fmt.Printf("write %d byte \n", n)


}



func appendToFile(filename string, content string) {

f, err := openFile("./data/output")

if err != nil {

fmt.Println("file open fail err:" + err.Error())

} else {

// 查找文件末尾的偏移

n, _ := f.Seek(0, os.SEEK_END)

// 从末尾的偏移开始写入

_, err = f.WriteAt([]byte(content), n)

if err != nil {

log.Fatal(err.Error())

}

}

defer f.Close()

}