范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

GO语言(十九)编写Web应用程序(上)

  介绍
  本教程涵盖: 创建具有加载和保存方法的数据结构 使用该net/http包构建 Web 应用程序 使用html/template包处理 HTML 模板 使用regexp包验证用户输入 使用闭包
  需要知识: 编程经验 了解基本的网络技术(HTTP、HTML) 一些 UNIX/DOS 命令行知识
  入门
  目前,您需要有一台 FreeBSD、Linux、macOS 或 Windows 机器来运行 Go。
  在你的GOPATH和 cd 中为本教程创建一个新目录: $ mkdir gowiki $ cd gowiki
  创建一个名为 的文件wiki.go,在您喜欢的编辑器中打开它,然后添加以下行: package main  import ( 	"fmt" 	"os" )
  我们从 Go 标准库中 导入fmt和os包。稍后,当我们实现附加功能时,我们将在此import声明中添加更多包。
  数据结构
  让我们从定义数据结构开始。一个 wiki 由一系列相互关联的页面组成,每个页面都有一个标题和一个正文(页面内容)。在这里,我们定义Page为一个结构体,其中包含两个字段,分别代表标题和正文。 type Page struct {     Title string     Body  []byte }
  该类型的[]byte意思是byte切片。Body元素是 []byte类型而不是 string类型,因为这是 我们将使用的io库所期望的类型。
  该Page结构描述了页面数据将如何存储在内存中。但是持久存储呢?我们可以通过在 上创建一个 save方法来解决这个问题Page: func (p *Page) save() error {     filename := p.Title + ".txt"     return os.WriteFile(filename, p.Body, 0600) }
  这是一个名为save的方法,它的接收者p是一个指向的指针Page。它不接受任何参数,并返回一个error类型的值。
  此方法会将Page"s保存Body到文本文件中。为简单起见,我们将使用Title作为文件名。
  该save方法返回一个error值,因为这是WriteFile(将字节切片写入文件的标准库函数)的返回类型。该save方法返回错误值,让应用程序在写入文件时出现任何问题时处理它。如果一切顺利,Page.save()将返回 nil(指针、接口和其他一些类型的零值)。
  八进制整数文字0600,作为第三个参数传递给 WriteFile,表示创建文件时应仅对当前用户具有读写权限。
  除了保存页面,我们还需要加载页面: func loadPage(title string) *Page {     filename := title + ".txt"     body, _ := os.ReadFile(filename)     return &Page{Title: title, Body: body} }
  该loadPage函数从 title 参数构造文件名,将文件的内容读入一个新变量body,并返回一个指向Page由正确的标题和正文值构造的文字的指针。
  函数可以返回多个值。标准库函数 os.ReadFile返回[]byte和error。在loadPage中,尚未处理错误;下划线 ( ) 符号表示的"空白标识符"_用于丢弃错误返回值(本质上,将值赋值为空)。
  但是如果ReadFile遇到错误会发生什么?例如,该文件可能不存在。我们不应该忽视这样的错误。让我们修改函数以返回*Page和error。 func loadPage(title string) (*Page, error) {     filename := title + ".txt"     body, err := os.ReadFile(filename)     if err != nil {         return nil, err     }     return &Page{Title: title, Body: body}, nil }
  该函数的调用者现在可以检查第二个参数;如果是, nil则它已成功加载页面。如果不是,它将是可以由调用者处理的error。
  现在,我们有一个简单的数据结构和保存到文件以及从文件加载的能力。让我们编写一个main函数来测试我们所写的内容: func main() {     p1 := &Page{Title: "TestPage", Body: []byte("This is a sample Page.")}     p1.save()     p2, _ := loadPage("TestPage")     fmt.Println(string(p2.Body)) }
  编译并执行此代码后,将创建一个名为的文件TestPage.txt ,其中包含p1. 然后将文件读入 struct p2,并将其Body元素打印到屏幕上。
  您可以像这样编译和运行程序: $ go build wiki.go $ ./wiki This is a sample Page.
  介绍net/http包装
  这是一个简单 Web 服务器的完整工作示例: //go:build ignore  package main  import (     "fmt"     "log"     "net/http" )  func handler(w http.ResponseWriter, r *http.Request) {     fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) }  func main() {     http.HandleFunc("/", handler)     log.Fatal(http.ListenAndServe(":8080", nil)) }
  该main函数以对http.HandleFunc 的调用开始 ,它告诉http包使用handler处理对 Web 根 "/"的所有请求。
  然后它调用http.ListenAndServe,指定它应该在任何接口 ( ":8080") 上侦听端口 8080。(暂时不要担心它的第二个参数nil。)这个函数将一直阻塞,直到程序终止。
  ListenAndServe总是返回一个错误,因为它只在发生意外错误时返回。为了记录该错误,我们将函数调用用log.Fatal.
  handler函数的类型为http.HandlerFunc。它以 http.ResponseWriter和 anhttp.Request作为参数。
  http.ResponseWriter值组合了 HTTP 服务器的响应;通过写入它,我们将数据发送到 HTTP 客户端。
  http.Request是表示客户端 HTTP 请求的数据结构。r.URL.Path是请求 URL 的路径组件。 [1:]  意味着"创建从第一个字符到结尾的子切片"。
  如果您运行此程序并访问 URL: http://localhost:8080/monkeys
  该程序将显示一个页面,其中包含: Hi there, I love monkeys!
  使用net/http包创建wiki页面
  要使用net/http包,必须将其导入: import ( 	"fmt" 	"os" 	"log" 	"net/http" )
  让我们创建一个处理程序,viewHandler它允许用户查看 wiki 页面。它将处理以"/view/"为前缀的 URL。 func viewHandler(w http.ResponseWriter, r *http.Request) {     title := r.URL.Path[len("/view/"):]     p, _ := loadPage(title)     fmt.Fprintf(w, "

%s

%s", p.Title, p.Body) }   再次注意使用_忽略error 来自loadPage的返回值。这是为了简单起见,通常被认为是不好的做法。我们稍后会处理这个问题。   首先,此函数从请求 URL 的路径组件r.URL.Path中提取页面标题。Path重新切片以删除请求路径的前导"/view/"。这是因为路径总是以"/view/"开头,它不是页面标题的一部分。   然后该函数加载页面数据,用一串简单的 HTML 格式化页面,并将其w写入http.ResponseWriter.   要使用这个处理程序,我们重写我们的main函数来使用viewHandler处理/view/路径下的任何请求。 func main() { http.HandleFunc("/view/", viewHandler) log.Fatal(http.ListenAndServe(":8080", nil)) }   让我们创建一些页面数据,编译我们的代码,并尝试提供一个 wiki 页面。   在编辑器中打开test.txt文件,并在其中保存字符串"Hello world"(不带引号)。 $ go build wiki.go $ ./wiki   随着这个网络服务器的运行,访问http://localhost:8080/view/test 应该会显示一个标题为"test"的页面,其中包含"Hello world"这个词。

最终回归四缸,行驶品质优秀,比奥德赛划算今年九月份吉利旗下的MPV嘉际迎来了升级换代,新车共推出了三款车型,售价区间为11。9814。28万,价格还是非常实惠的,一说起家用汽车,那就不得不说起MPV了,下面就让我们一起来自主品牌豪华中型SUV的扛把子,月均销量过万,实力不容小觑最近几年,自主品牌SUV的表现相当出色,常常占据销量排行榜前十的半壁江山,不仅如此,哈弗H6更长很长时间占据销量榜首的位置,而且吉利博越长安CS75的表现也非常稳定。不过,不管是H比买雷克萨斯值,30万能拿下,捷尼赛思这款车不错自从韩系豪华品牌捷尼赛思携G80GV80再度入华已经有一段时间,而且取得了不错的口碑,在近日举办的天津车展上,捷尼赛思G70也正式亮相,下面小编带大家来了解一下这款韩系豪车。外观方苹果官网活动来了,买iPad送AirPods2,最高便宜4400元众所周知,苹果很少在其官网上的产品搞优惠活动,而苹果官方每年的暑假返校活动就是少有的优惠活动之一。7月16日,苹果开启国内返校促销活动。往年在苹果官网购买指定型号的Mac或者iPa20003000元推荐购买的三款手机机型春节过后到现在三个多月的时间里,又有很多的机型映入我们的眼帘,让人目不暇接,面对众多的产品,有选择困难症的同学就开始难受了。今天我就给大家推荐三款我认为在20003000价格区间最后悔买iPhone12了来自一位资深果粉的吐槽我后悔买了iPhone12,细数一下买了iPhone12让我感觉糟糕糕的8大体验买了iPhone12,后悔选择了黑色,还买了个透明套,黑色固然好,只是吸尘埃!那效果堪比吸尘器。买了30004000推荐购买的三款手机30004000这个价位的手机基本上都是各家中高端旗舰机型。质量相对来说都是比较好的。今天向大家推荐三款个人认为最值得购买的手机机型。第一款小米11。小米11轻薄出彩带来了一块创下2021年七月份4000推荐购买的几款手机最近,所有的手机厂商上半年的机器已经发布的差不多了。关于各家4000的价格的手机,基本上都是各家的高端旗舰手机。相对来说各有各的侧重点。废话不多说,直接上干货。首先推荐苹果的App10001500元价格区间推荐购买的三款手机今天给大家推荐一下10001500元价格区间,综合考虑及市场情况,推荐大家购买的三款手机,下面直接上干货。第一款vivoiQOOU3x8GB128GBvivoiQOOU3x搭载高通小米笔记本pro是否值得入手在2021年3月30日晚,连续两天的小米春季新品发布会结束,时隔三年半的时间,小米再次发布了小米笔记本系列产品小米笔记本Pro14和15。这款笔记本采用了手机级的高端制造工艺,CN偷拍相机登上AppStore排行榜,谁在把女性的生活变成他们的色情片在以隐私著称的iPhone上,AppStore排行榜第三的拍照app却成了偷拍者的隐秘的角落。这是一款在AppStore摄影与录像排行榜付费app排名第三的应用(目前已经下架),安
Magnepan美屏MiNiMaggie桌上屏风喇叭组合绝对是Magnepan美屏破格之作,桌面上的小小屏风喇叭系统,这小东西针对CAS族群的意欲明显不过。曾几何时,Magnepan予人一份保守的感觉,直至1。7的出现,技术更新之余虽然发烧入门,钢铁组合Aria906AXR100一朋友新婚,各处花销下来已是颇伤元气,问能否在新居小窝享受到发烧音乐,但荷包已不能再承受一次大动干戈了。我想了想,实际上发烧器材也并不一定和贵价画上等号。当然,实力雄厚得用家可以一绘形绘声,颜值担当,FOCALDimension声霸组合长时间以来,声音表现都是电视机的一个硬伤,特别是对于机身纤薄的平板电视来说,想要做到震撼的音效,不仅仅是技术的局限,电视厂商在这方面也无能为力。目前针对客厅或者紧凑型空间所使用的音自由组合,趣味无限FOCALUtopia乌托邦极品影院法国FOCAL,其良好口碑不仅仅在HiEnd两声道用家之中流传,在家庭影院及定制安装领域中,FOCAL同样是惊艳的存在。FOCAL一直致力于研发高端且别具品格的扬声器,在成立至今超DSP15英寸灵活的胖子EarthquakeSoundMiniMeDSPP15超低音低音炮是家庭影院系统中尤为关键的一个声道。特别是时下流行的DolbyAtmosDTSX这些沉浸式音效的变革下,影音爱好者从往日的只能享受电影画面所带来的冲击,发展成能够可以仿佛沉浸高分析力全景声体验FocalSibEvoDolbyAtmos5。1。2喇叭组合评测不论玩音响还是家庭影院,在任何时候总会有新玩家,所以套装组合总会有一定需求。不过,专玩DolbyAtmos的套装喇叭,市场上的选择又的确实不多,Focal推出的SibEvoDolb玫瑰公爵壹号FOCALAriaK2936CambridgeAudioEVO150FOCAL和CambridgeAudio这两个深受影音爱好者热爱和熟知的品牌,在HiEnd两声道和多声道影院两个领域都有众多精品型号产出。法国FOCAL拥有超过30年的辉煌历程,在自然声发布旗舰动圈耳机NS5梦桥,正式预售自然声公司最近发布了第三只耳机动圈旗舰NS5,梦桥。并已正式上市预售。它的主要特点是碳纳米管振膜单元,并由作曲家方岽清调音。梦桥即是方岽清老师交响曲的名字,也是自然声NS5耳机的名旗舰的实力,自然声8单元旗舰动铁入耳耳机NSX介绍双11前夕,成都自然声公司隆重推出其动铁旗舰耳机NSX。这只单边8单元的动铁耳机,在9月时就曾在广州耳机展上让广大的烧友们交口称赞,10月底的成都音响展上也赢得了成都烧友们一致好评多国都在计划推出的央行数字货币是什么?央行数字货币,简称为CBDC,全称是Centralbankdigitalcurrencies。当下数字时代,各国货币当局正在研究CBDC作为一种新的货币形式,它可以大大提高国内和国美国已成为全球最大的BTC采矿中心最新数据显示,美国现已成为全球BTC采矿的中心。据悉,截至8月底,美国哈希率占全球的35。4,为4月时数据的两倍多。其次是哈萨克斯坦和俄罗斯。自中国对加密货币和采矿行业的监管加强后