城市直播房产教育博客汽车
快传网
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

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……
SACC2017语音识别专场从通用语音云到大规模定制开发三大顶流青春偶像助阵vivoS10系列誓要夺下年轻人市场中国第一大车企诞生!市值超过大众奔驰宝马,跻身全球第三赣锋锂业,天齐锂业,华天科技,长电科技,通富微电,京东方加油三年砸入近300亿,许家印押注的新能源汽车首款车提前下线联发科真要翻身!天玑9000新机曝光配置全面拉满,价格给力小米12系列手机官宣12月28日发布,首发三款机型JavaLambda表达式详解(非常全面)为什么几乎只有中国人爱用双卡双待的手机?实测7款iPhone,运行iOS15RC版本,看看电池续航到最高奖励500万元!四川鼓励在川单位积极培养人才斐耳FIILCCPro蓝牙真无线主动降噪耳机测评报告SOOM
最窒息成人聊天内容男女笑话儿童鼻窦炎有哪些发病原因军粮今日价格多少一斤双子座本月运势(双子座2021年4月运势)惠东油价今日价格别王彻触电昏迷后怎么急救难忘那张搞笑的脸滴水观音是什么滴水观音怎么养护枣姜茶什么时候喝好喝姜枣茶的禁忌有哪些男士渐变短发背头飞机头纹理卷

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁