安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

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

9月21日 不将就投稿
  介绍
  本教程涵盖:创建具有加载和保存方法的数据结构使用该nethttp包构建Web应用程序使用htmltemplate包处理HTML模板使用regexp包验证用户输入使用闭包
  需要知识:编程经验了解基本的网络技术(HTTP、HTML)一些UNIXDOS命令行知识
  入门
  目前,您需要有一台FreeBSD、Linux、macOS或Windows机器来运行Go。
  在你的GOPATH和cd中为本教程创建一个新目录:mkdirgowikicdgowiki
  创建一个名为的文件wiki。go,在您喜欢的编辑器中打开它,然后添加以下行:packagemainimport(fmtos)
  我们从Go标准库中导入fmt和os包。稍后,当我们实现附加功能时,我们将在此import声明中添加更多包。
  数据结构
  让我们从定义数据结构开始。一个wiki由一系列相互关联的页面组成,每个页面都有一个标题和一个正文(页面内容)。在这里,我们定义Page为一个结构体,其中包含两个字段,分别代表标题和正文。typePagestruct{TitlestringBody〔〕byte}
  该类型的〔〕byte意思是byte切片。Body元素是〔〕byte类型而不是string类型,因为这是我们将使用的io库所期望的类型。
  该Page结构描述了页面数据将如何存储在内存中。但是持久存储呢?我们可以通过在上创建一个save方法来解决这个问题Page:func(pPage)save()error{filename:p。Title。txtreturnos。WriteFile(filename,p。Body,0600)}
  这是一个名为save的方法,它的接收者p是一个指向的指针Page。它不接受任何参数,并返回一个error类型的值。
  此方法会将Pages保存Body到文本文件中。为简单起见,我们将使用Title作为文件名。
  该save方法返回一个error值,因为这是WriteFile(将字节切片写入文件的标准库函数)的返回类型。该save方法返回错误值,让应用程序在写入文件时出现任何问题时处理它。如果一切顺利,Page。save()将返回nil(指针、接口和其他一些类型的零值)。
  八进制整数文字0600,作为第三个参数传递给WriteFile,表示创建文件时应仅对当前用户具有读写权限。
  除了保存页面,我们还需要加载页面:funcloadPage(titlestring)Page{filename:title。txtbody,:os。ReadFile(filename)returnPage{Title:title,Body:body}}
  该loadPage函数从title参数构造文件名,将文件的内容读入一个新变量body,并返回一个指向Page由正确的标题和正文值构造的文字的指针。
  函数可以返回多个值。标准库函数os。ReadFile返回〔〕byte和error。在loadPage中,尚未处理错误;下划线()符号表示的空白标识符用于丢弃错误返回值(本质上,将值赋值为空)。
  但是如果ReadFile遇到错误会发生什么?例如,该文件可能不存在。我们不应该忽视这样的错误。让我们修改函数以返回Page和error。funcloadPage(titlestring)(Page,error){filename:title。txtbody,err:os。ReadFile(filename)iferr!nil{returnnil,err}returnPage{Title:title,Body:body},nil}
  该函数的调用者现在可以检查第二个参数;如果是,nil则它已成功加载页面。如果不是,它将是可以由调用者处理的error。
  现在,我们有一个简单的数据结构和保存到文件以及从文件加载的能力。让我们编写一个main函数来测试我们所写的内容:funcmain(){p1:Page{Title:TestPage,Body:〔〕byte(ThisisasamplePage。)}p1。save()p2,:loadPage(TestPage)fmt。Println(string(p2。Body))}
  编译并执行此代码后,将创建一个名为的文件TestPage。txt,其中包含p1。然后将文件读入structp2,并将其Body元素打印到屏幕上。
  您可以像这样编译和运行程序:gobuildwiki。go。wikiThisisasamplePage。
  介绍nethttp包装
  这是一个简单Web服务器的完整工作示例:go:buildignorepackagemainimport(fmtlognethttp)funchandler(whttp。ResponseWriter,rhttp。Request){fmt。Fprintf(w,Hithere,Iloves!,r。URL。Path〔1:〕)}funcmain(){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:8080monkeys
  该程序将显示一个页面,其中包含:Hithere,Ilovemonkeys!
  使用nethttp包创建wiki页面
  要使用nethttp包,必须将其导入:import(fmtoslognethttp)
  让我们创建一个处理程序,viewHandler它允许用户查看wiki页面。它将处理以view为前缀的URL。funcviewHandler(whttp。ResponseWriter,rhttp。Request){title:r。URL。Path〔len(view):〕p,:loadPage(title)fmt。Fprintf(w,h1sh1s,p。Title,p。Body)}
  再次注意使用忽略error来自loadPage的返回值。这是为了简单起见,通常被认为是不好的做法。我们稍后会处理这个问题。
  首先,此函数从请求URL的路径组件r。URL。Path中提取页面标题。Path重新切片以删除请求路径的前导view。这是因为路径总是以view开头,它不是页面标题的一部分。
  然后该函数加载页面数据,用一串简单的HTML格式化页面,并将其w写入http。ResponseWriter。
  要使用这个处理程序,我们重写我们的main函数来使用viewHandler处理view路径下的任何请求。funcmain(){http。HandleFunc(view,viewHandler)log。Fatal(http。ListenAndServe(:8080,nil))}
  让我们创建一些页面数据,编译我们的代码,并尝试提供一个wiki页面。
  在编辑器中打开test。txt文件,并在其中保存字符串Helloworld(不带引号)。gobuildwiki。go。wiki
  随着这个网络服务器的运行,访问http:localhost:8080viewtest应该会显示一个标题为test的页面,其中包含Helloworld这个词。
投诉 评论 转载

ArcGISPython开发知识汇总直接点击链接,查看内容ArcGISPython开发知识汇总点击上面的链接ArcGISPython第一个小程序ArcGISPython二次开发两个问题ArcGISPy……夸张!4500万像素160fps连拍?尼康Z9顶信息曝光与此前曝光的佳能EOSR3一样,尼康Z9也同样借着这次奥运会让摄影师好好的测试了一下,已经有不少摄影师上手,无意间分享了不少信息,也让尼康Z9的信息越来越明了。奥运摄影师……周受资将加入字节跳动,前景可观,他曾是中国互联网主力军近日,据报道,周受资即将担任字节跳动CFO,而且发微博声明将常驻在新加坡。周受资个人信息周受资1983年出生,在高盛担任投行分析师后,又到哈佛进修,之后进入互联网行……OPPOFindX4售价已定,16512G放在四千档,这次很对比小米、荣耀等的高端旗舰,在销量方面看,OPPO旗舰机的表现不是那么理想。原因大家也知道,OPPO旗舰机一直被认为是高价低配的代表,这个刻板印象似乎有点难改变。不过好在……GO语言(十九)编写Web应用程序(上)介绍本教程涵盖:创建具有加载和保存方法的数据结构使用该nethttp包构建Web应用程序使用htmltemplate包处理HTML模板使用regexp包验证用户输入使用闭……四款小众冷门APP,你未必都知道我们在选择App时经常只能看到应用商店推荐的App,很多小众却十分好用的App常常静静的躺在一旁无人问津。今天就根据不同类型为大家整理了几款好用的小众App,大家可以按需查看哟……手机摄影越来越得到更多的人认可,大家能否分享下手机拍摄的最好是的,当下,随着手机的普及,手机摄影以其便携、快捷和拍摄功能不断改进越来越受到绝大多数人的青睐。但拍照容易拍好难,我主要体会有三:一是学的进。想拍好照片,必须学习了解,甚……视觉狮打造全国领先的互联网眼健康大数据平台《企业与市场》网讯邓力冯涤非)互联网时代,您的眼睛健康吗?来自《中国互联网络发展状况统计报告》显示,截至2020年12月,我国网民规模达9。89亿,手机网民规模达9。86……智能一键遥控,恒洁Qi3智能马桶如厕贴心管家提升生活品质家,是人幸福的源泉,是人的安居之所,家的温馨与否能够影响到一个人的幸福指数。其中,卫浴间设施品质的高低也是能评判家温馨程度的一个客观因素。要想提升卫浴间品质,选择一款舒适方便智……js快速入门StringArrayObject常用方法String类型的常用方法:conststrhelloworldstr。charAt(1)传入下标返回对应字符串hstr。indexOf(h)传入字符串从左往右找到第一个h的下……雷军在武汉投入200亿建设小米武汉总部,这是出于什么发展方向中国城市那么多,雷军却偏爱武汉一个!毕竟自己既是湖北人,又从武汉大学毕业,雷军算是将武汉当做自己魂牵梦绕的故土了。在大学毕业后第六年就向武汉大学捐款14万元、2013年武汉大学……乌克兰央行宣布限制购买比特币以防资本外逃周五,乌克兰央行宣布对比特币的购买进行限制,以防止资本外逃。报道指出,乌克兰国家银行禁止使用格里夫尼亚(乌克兰货币)购买比特币,并将每月使用外币购买比特币的上限定为330……
为什么越来越多人喜欢用国产手机玩游戏,而不是iPhone?现在农民是不是越来越少了,国内农业的未来将如何发展?荣耀60Pro上手体验像这样粉粉嫩嫩屏幕灵动护眼的手机不多神舟13号何时发射?会选择哪几名航天员?有没有女性航天员?说说你手机里有哪些珍藏的宝藏App,分享出来?努比亚Z30Pro正式发布,国产类钻石柔性屏120W快充双光需要打击电商吗?程序员之间神奇的鄙视链,你在其中哪一层?区块链是否是骗局?大公司早报星巴克回应产品涨价三只松鼠90后总监受贿530万被三星发力,65英寸QLED量子点HDMI2。1游戏电视降至7电动汽车为什么一跑高速,就变弱鸡?为什么要研发高速电机?申请工伤鉴定以后多长时间做鉴定程序员工资那么高,为什么会找不到女朋友?惨痛道理四年级作文不念过去,不惧将来酒胡子大瓦格纳全场得到20分13篮板3助攻2抢断1封盖,得分篮板抢形容压抑的句子被品牌影响的豪华轿车,配置不输BBA,兼顾职场和家庭的CT6怀孕期间补钙不可少哦时间煮雨歌词完整版原来,我们并不幸福矮个子男生5款穿衣搭配穿对了让你的形象立马变高大

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利