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

经典网站设计seo软件

经典网站设计,seo软件,网站制作切图,用开源源码做淘宝客网站http同步文件操作 - 增删改查 http同步文件操作 - 增删改查1. 前置要求1.1. 构建结构体 文件名 文件内容1.1.1. 页面结构体1.1.2. 为Page结构体绑定方法:Save1.1.3. 对Page结构体支持页面内容查看方法,同时提供页面文件是否存在的方法 1.2. 简单验证上面…

http同步文件操作 - 增删改查

  • http同步文件操作 - 增删改查
  • 1. 前置要求
    • 1.1. 构建结构体 文件名 + 文件内容
      • 1.1.1. 页面结构体
      • 1.1.2. 为`Page`结构体绑定方法:`Save`
      • 1.1.3. 对`Page`结构体支持页面内容查看方法,同时提供页面文件是否存在的方法
    • 1.2. 简单验证上面的结构体是否可以直接改变值
  • 使用HTTP来完成对页面的增删改查
    • 1. 增加对页面文件保存的操作
      • 增加mian方法,进行测试
    • 2. 增加对页面文件进行查看内容的操作
      • 增加mian方法,进行测试
    • 3. 增加对页面文件删除操作
      • 增加mian方法,进行测试
    • 4. 增加对页面文件内容更新的操作
      • 增加mian方法,进行测试
      • 增删改查的操作保存在一个文件里,内容如下
  • other

http同步文件操作 - 增删改查

1. 前置要求

1.1. 构建结构体 文件名 + 文件内容

1.1.1. 页面结构体

type Page struct {Title string `json:"title"`Body  string `json:"body"`
}
// ``符号为结构体的标准,可忽略

1.1.2. 为Page结构体绑定方法:Save

// SavePage 页面文件保存方法,保存到数据库,这里保存到页面文件中
// 使用bufio操作文件
// notice: 延时关闭 flush
// 绑定Page指针变量
func (page *Page) SavePage(title string, body string) (err error) {title += ".txt"// todo 1. 拿到页面文件句柄file, err := os.OpenFile(title, os.O_CREATE|os.O_RDWR, fs.ModePerm)// todo final stepdefer func() { _ = file.Close() }()if err != nil {fmt.Println("无法获取到页面文件,error:", err)return err}// todo 2. 打开页面文件writer := bufio.NewWriter(file)// todo 3. 往页面文件写入内容nByteNum, err := writer.Write([]byte(body))if err != nil {fmt.Println("页面文件保存失败,error:", err)return err}// todo 4. 刷写数据出去_ = writer.Flush()fmt.Println("写入的内容大小为:", nByteNum, "字节")return nil
}
  1. 内容添加文件后缀,固定为.txt

  2. 使用bufio操作文件,可以更换其它方式

  3. *指针变量

  4. 注意事项:

    1. 延时关闭

      defer func() { _ = file.Close() }()

    2. 数据刷写

      _ = writer.Flush()

1.1.3. 对Page结构体支持页面内容查看方法,同时提供页面文件是否存在的方法


// 判断是否存在该页面文件名,不需要加后缀!已经手动添加;也可以优化,多加入参数表示后缀即可
func ExistFile(fileName string) bool {if _, err := os.Stat(fileName + ".txt"); err != nil {if os.IsNotExist(err) {return false}}return true
}// 查看指定的页面文件内容
// 使用os操作文件
func ViewPage(title string) (page *Page) {page = &Page{}page.Title = titleif ExistFile(title) {fileContent, err := os.ReadFile(title + ".txt")if err != nil {fmt.Println("读取页面文件出错, error is :", err)} else {page.Body = string(fileContent)}}return page
}
  • 上面内容为一个文件,该entity/entity.go文件的全部代码为:
package entityimport ("bufio""fmt""io/fs""os"
)type Page struct {Title string `json:"title"`Body  string `json:"body"`
}// SavePage 页面文件保存方法,保存到数据库,这里保存到页面文件中
// 使用bufio操作文件
// notice: 延时关闭 flush
func (page *Page) SavePage(title string, body string) (err error) {title += ".txt"// todo 1. 拿到页面文件句柄file, err := os.OpenFile(title, os.O_CREATE|os.O_RDWR, fs.ModePerm)// todo final stepdefer func() { _ = file.Close() }()if err != nil {fmt.Println("无法获取到页面文件,error:", err)return err}// todo 2. 打开页面文件writer := bufio.NewWriter(file)// todo 3. 往页面文件写入内容nByteNum, err := writer.Write([]byte(body))if err != nil {fmt.Println("页面文件保存失败,error:", err)return err}// todo 4. 刷写数据出去_ = writer.Flush()fmt.Println("写入的内容大小为:", nByteNum, "字节")return nil
}// 判断是否存在该页面文件名,不需要加后缀!
func ExistFile(fileName string) bool {if _, err := os.Stat(fileName + ".txt"); err != nil {if os.IsNotExist(err) {return false}}return true
}// 查看指定的页面文件内容
// 使用os操作文件
func ViewPage(title string) (page *Page) {page = &Page{}page.Title = titleif ExistFile(title) {fileContent, err := os.ReadFile(title + ".txt")if err != nil {fmt.Println("读取页面文件出错, error is :", err)} else {page.Body = string(fileContent)}}return page
}

1.2. 简单验证上面的结构体是否可以直接改变值

func main() {// 验证你的结构体是否发生改变 - 指针变量page := entity.ViewPage("TestPage")fmt.Println(page)page.Body = "change"fmt.Println(page)
}

使用HTTP来完成对页面的增删改查

1. 增加对页面文件保存的操作

// http方式保存page
// 默认从请求体中获取内容作为body传入文件
// 直接调用/savePage的body默认值为:this is a default value
// 更新操作也会调用该方法,body值为 上传的请求体内容
func saveHandler(responseWriter http.ResponseWriter, request *http.Request) {// todo 1. 在url中获取 page的title值title := request.URL.Path[len("/savePage/"):]// todo 2. 填充 body内容page := &entity.Page{}// important 本人在后面update会遇到坑,默认从请求体中获取body// todo 2.1. 优先考虑从请求体获取bodybody := request.FormValue("body")// todo 2.2. 请求体为空串,则赋值默认值if body == "" {body = "this is a default value"}// todo 3. 将body值写入到页面文件err := page.SavePage(title, body)// todo 3.1. 展示写入结果if err != nil {_, _ = responseWriter.Write([]byte("页面文件保存不成功"))fmt.Println("页面文件保存不成功,error is :", err)return} else {message := "页面文件保存成功"_, _ = responseWriter.Write([]byte(message))fmt.Println(message)}
}

增加mian方法,进行测试

func main() {// url路径要对应,当然你也可以更改;// 若修改viewPage,上面的viewHandler方法也要对应改变http.HandleFunc("/savePage/", saveHandler)err := http.ListenAndServe(":8989", nil)if err != nil {fmt.Println("端口异常")}
}
  • 运行程序,然后到浏览器访问:localhost:8989/viewPage/myFirst2

    • 结果会展示

      • 在这里插入图片描述

      • 页面也会展示成功的提示

    • 项目目录下会生成myFirst2.txt文件,内容为:

      this is a default value
      

2. 增加对页面文件进行查看内容的操作

// http 方式查看特定的page内容
// 使用硬编码页面
func viewHandler(responseWriter http.ResponseWriter, request *http.Request) {// todo 1. 在url中获取 page的title值title := request.URL.Path[len("/viewPage/"):]// todo 2. 判断是否已经存在该页面文件if !entity.ExistFile(title) {// todo 2.1. 不存在该页面文件就结束fmt.Printf("不存在%v页面文件", title)_, _ = responseWriter.Write([]byte("不存在该页面文件"))return}// todo 2.2. 获取该页面的内容page := entity.ViewPage(title)body := []byte(page.Body)// todo 3. 页面展示内容_, _ = responseWriter.Write(body)
}

增加mian方法,进行测试

func main() {// url路径要对应,当然你也可以更改;// 若修改viewPage,上面的viewHandler方法也要对应改变http.HandleFunc("/savePage/", saveHandler)http.HandleFunc("/viewPage/", viewHandler)err := http.ListenAndServe(":8989", nil)if err != nil {fmt.Println("端口异常")}
}
  • 运行程序,到浏览器输入 localhost:8989/viewPage/myFirst2

    • 会查看当前项目下是否存在myFirst2.txt文件,如果存在,则会返回页面文件内容。反之会展示不存在该页面文件内容

      • 我们前面生成了myFirst2.txt文件,效果为:

        • 在这里插入图片描述

        • 页面展示的内容为文件的内容

      • 我们访问没有对应的文件url:localhost:8989/viewPage/myFirst3

        • 效果为:

          在这里插入图片描述

        • 即页面展示不存在该文件。你也可以再利用savePage来生成一个myFirst3.txt文件

3. 增加对页面文件删除操作

// http方式删除页面文件
func deleteHandler(responseWriter http.ResponseWriter, request *http.Request) {// todo 1. 在url中获取 page的title值title := request.URL.Path[len("/deletePage/"):]// todo 2. 判断是否存在该页面文件if !entity.ExistFile(title) {_, _ = responseWriter.Write([]byte("页面文件不存在,无法删除"))return} else {// todo 3. 移除页面文件err := os.Remove(title + ".txt")if err != nil {_, _ = responseWriter.Write([]byte("页面文件删除异常,请检查你的权限,或者联系管理员"))return}_, _ = responseWriter.Write([]byte("页面文件删除成功"))}
}

增加mian方法,进行测试

func main() {// url路径要对应,当然你也可以更改;// 若修改viewPage,上面的viewHandler方法也要对应改变http.HandleFunc("/savePage/", saveHandler)http.HandleFunc("/viewPage/", viewHandler)http.HandleFunc("/deletePage/", deleteHandler)err := http.ListenAndServe(":8989", nil)if err != nil {fmt.Println("端口异常")}
}
  • 运行程序,到浏览器输入 localhost:8989/deletePage/myFirst2

    • 程序会删除myFirst2文件,效果为:

      在这里插入图片描述

      • 项目下的文件已经被删除,若此时再次执行则会提示无法删除

        在这里插入图片描述

4. 增加对页面文件内容更新的操作

// http方式更新页面文件
func updateHandler(responseWriter http.ResponseWriter, request *http.Request) {// todo 1. 在url中获取 page的title值title := request.URL.Path[len("/updatePage/"):]// todo 2. 查看该页面文件page := entity.ViewPage(title)// todo 3. 填充html页面,硬编码fmt.Fprintf(responseWriter, "<h1>Editing %s</h1>"+// 直接调用了 saveHandler// todo 4. 再次保存该页面文件"<form action=\"/savePage/%s\" method=\"POST\">"+"<textarea name=\"body\">%s</textarea><br>"+"<input type=\"submit\" value=\"Save\">"+"</form>",page.Title, page.Title, page.Body)
}
  • notice :todo的第四步,保存后会出发/savePage的访问动作

增加mian方法,进行测试

func main() {// url路径要对应,当然你也可以更改;// 若修改viewPage,上面的viewHandler方法也要对应改变http.HandleFunc("/savePage/", saveHandler)http.HandleFunc("/viewPage/", viewHandler)http.HandleFunc("/deletePage/", deleteHandler)http.HandleFunc("/updatePage/", updateHandler)err := http.ListenAndServe(":8989", nil)if err != nil {fmt.Println("端口异常")}
}
  • 运行程序,到浏览器输入 localhost:8989/updatePage/myFirst2

    • 页面会返回一个html页面,效果为:

      在这里插入图片描述

      • 尝试在文本框输入内容,这里输入hello,java页 可乐 唱跳rap,然后点击Save进行保存。

        • 然后页面会进行跳转到保存页面,效果图为:

          在这里插入图片描述

增删改查的操作保存在一个文件里,内容如下

package mainimport ("fmt""goland-setting/test/webapp/entity""net/http""os"
)// http 方式查看特定的page
// 使用硬编码页面
func viewHandler(responseWriter http.ResponseWriter, request *http.Request) {// todo 1. 在url中获取 page的title值title := request.URL.Path[len("/viewPage/"):]// todo 2. 判断是否已经存在该页面文件if !entity.ExistFile(title) {// todo 2.1. 不存在该页面文件就结束fmt.Printf("不存在%v页面文件", title)_, _ = responseWriter.Write([]byte("不存在该页面文件"))return}// todo 2.2. 获取该页面的内容page := entity.ViewPage(title)body := []byte(page.Body)// todo 3. 页面展示内容_, _ = responseWriter.Write(body)
}// http方式保存page
// 默认从请求体中获取body
// 直接调用/savePage的body默认值为:this is a default value
// 更新操作也会调用该方法,body值为 上传的请求体内容
func saveHandler(responseWriter http.ResponseWriter, request *http.Request) {// todo 1. 在url中获取 page的title值title := request.URL.Path[len("/savePage/"):]// todo 2. 填充 body内容page := &entity.Page{}// important 本人在后面update会遇到坑,默认从请求体中获取body// todo 2.1. 优先考虑从请求体获取bodybody := request.FormValue("body")// todo 2.2. 请求体为空串,则赋值默认值if body == "" {body = "this is a default value"}// todo 3. 将body值写入到页面文件err := page.SavePage(title, body)// todo 3.1. 展示写入结果if err != nil {_, _ = responseWriter.Write([]byte("页面文件保存不成功"))fmt.Println("页面文件保存不成功,error is :", err)return} else {message := "页面文件保存成功"_, _ = responseWriter.Write([]byte(message))fmt.Println(message)}
}// http方式删除页面文件
func deleteHandler(responseWriter http.ResponseWriter, request *http.Request) {// todo 1. 在url中获取 page的title值title := request.URL.Path[len("/deletePage/"):]// todo 2. 判断是否存在该页面文件if !entity.ExistFile(title) {_, _ = responseWriter.Write([]byte("页面文件不存在,无法删除"))return} else {// todo 3. 移除页面文件err := os.Remove(title + ".txt")if err != nil {_, _ = responseWriter.Write([]byte("页面文件删除异常,请检查你的权限,或者联系管理员"))return}_, _ = responseWriter.Write([]byte("页面文件删除成功"))}
}// http方式更新页面文件
func updateHandler(responseWriter http.ResponseWriter, request *http.Request) {// todo 1. 在url中获取 page的title值title := request.URL.Path[len("/updatePage/"):]// todo 2. 查看该页面文件page := entity.ViewPage(title)// todo 3. 填充html页面fmt.Fprintf(responseWriter, "<h1>Editing %s</h1>"+// 直接调用了 saveHandler// todo 4. 再次保存该页面文件"<form action=\"/savePage/%s\" method=\"POST\">"+"<textarea name=\"body\">%s</textarea><br>"+"<input type=\"submit\" value=\"Save\">"+"</form>",page.Title, page.Title, page.Body)
}func main() {http.HandleFunc("/savePage/", saveHandler)http.HandleFunc("/deletePage/", deleteHandler)http.HandleFunc("/updatePage/", updateHandler)http.HandleFunc("/viewPage/", viewHandler)err := http.ListenAndServe(":8989", nil)if err != nil {fmt.Println("端口异常")}
}

一个简单的webApp就完成了。

other

  • 对于更新操作,服务器硬编码html太难了,可以使用html/template来渲染,这样会好很多。
http://www.tj-hxxt.cn/news/42498.html

相关文章:

  • 跨境电商是真的吗seo推广软件排名
  • 阳曲网站建设推荐咨询超级外链推广
  • 网站表格怎么做的seo网站关键词优化排名
  • 汨罗哪里有网站开发的公司电话培训机构退费纠纷一般怎么解决
  • 有源码就可以自己做H5网站吗广告投放的方式有哪些
  • 网站建设与运营的市场百度网页版电脑版入口
  • 手机微网站二级菜单怎么做百度直播
  • 网站建设方案平台湘潭网站设计外包公司
  • 江苏网站建设方案昆明seo排名外包
  • 网站短时间怎么做权重精准的搜索引擎优化
  • 大型网站开发项目合同网络营销策略的内容
  • 推广方式是什么意思windows10优化大师
  • phpcms模板行业网站网站设计公司北京
  • 怎么创建企业网站seo推广网站
  • 软件商城免费下载app长沙建站seo公司
  • 国外做软件界面的设计网站青岛seo网站关键词优化
  • 做国际网站的流程企业宣传标语
  • 电子商务企业网站的基本功能精准粉丝引流推广
  • 建设网站需要什么知识百度推广计划
  • 重庆颐众达网站广告软文范例大全100字
  • 汇云网站建设长沙关键词快速排名
  • 西宁做网站建设公司哪家好教育培训机构平台
  • 全包胶衣网站鞋子软文推广300字
  • 赣州企业网站建设百度收录查询工具
  • 辅助网站怎么做全网营销系统怎么样
  • tp5如何在自己网站后台做pv uv统计云南网站建设公司哪家好
  • 网站设计建好的产品怎么推广语言
  • 中国体育新闻最新消息宁波seo推广方式排名
  • 余姚做企业网站市场营销八大营销模式
  • 泰兴网站建设百度人工电话