服务计算第九周作业:cloudgo

AI权益加码!Claude Code、Cursor等20+工具免费用! 边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

处理 web 程序的输入与输出

文章目录

概述

设计一个 web 小应用,展示静态文件服务、js 请求支持、模板输出、表单处理、Filter 中间件设计等方面的能力。(不需要数据库支持)

任务要求

编程 web 应用程序 cloudgo-io。 请在项目 README.MD 给出完成任务的证据!

基本要求

  1. 支持静态文件服务
  2. 支持简单 js 访问
  3. 提交表单,并输出一个表格
  4. /unknown 给出开发中的提示,返回码 5xx

完成基本要求

1. 框架选择

首先需要选择一个golang框架来进行开发,看了许多前辈的博客都说iris好,我想既然都没使用过那就随便选一个吧·~·

目前网上关于iris的教程比较少,主要参考前辈博客官方文档

官方网站给出的安装指令:

go get -u github.com/kataras/iris

但是因为部分依赖包被墙了,是无法安装成功的,下面给出翻墙之外的方法。

先找到安装不成功的包,通过在get命令中使用-v参数看到安装的详细过程,看哪个包failed了,或者直接在网上随便找一个iris的程序go run test.go,看报错信息缺少哪个包。

/*test.go*/
package main

import "github.com/kataras/iris"

func main() {
    app := iris.Default()
    app.Handle("GET", "/", func(ctx iris.Context) {
        ctx.HTML("Hello world!")
    })
    app.Run(iris.Addr(":8080"))
}

一般golang.org的包是无法访问的,但好在github上都有资源,所以只需要在github上搜索缺少的包手动git clone到golang.org/x目录(没有就自己创建)下即可。

除此之外github.com下的包也可能缺失,删掉重新go get即可。

然后又出现错误:error未定义,翻看iris源码发现使用了error包,而error包似乎是golang 1.13才有的,于是更新golang到1.13。

运行go run test.go成功会看到命令行的提示信息。

2. 使用iris框架完成本次作业

2.1 基本步骤

我的main.go如下:

package main

import (
	"github.com/Tifinity/cloudgo/services"
	"github.com/kataras/iris"
)

func main() {
    // 获取app
	app := iris.Default()
	// 日志等级
	app.Logger().SetLevel("debug")
	// 运行
	services.StartServices(app)
	// 程序内配置服务端
	app.Run(iris.Addr(":8080"), iris.WithConfiguration(iris.Configuration{
	    DisableInterruptHandler:           false,
	    DisablePathCorrection:             false,

先获取app,通过iris.Default()获取默认app或者iris.New()新建一个app都可以。

// 获取app
app := iris.Default()

然后可以设置日志等级,默认是INFO,DEBUG会在命令行窗口输出更详细的信息。

// 日志等级
app.Logger().SetLevel("debug")

在这里插入图片描述

然后是运行端口和服务器配置,可以在程序内通过代码配置,也可以通过TOML,YAML文件配置,配置项是抄官方文档的,并且app初始化时已经使用了默认的配置值,无需配置也可以启动我们的程序。

// 程序内配置服务端并运行
app.Run(iris.Addr(":8080"), iris.WithConfiguration(iris.Configuration{
    DisableInterruptHandler:           false,
    DisablePathCorrection:             false,
    EnablePathEscape:                  false,
    FireMethodNotAllowed:              false,
    DisableBodyConsumptionOnUnmarshal: false,
    DisableAutoFireStatusCode:         false,
    TimeFormat:                        "Mon, 02 Jan 2006 15:04:05 GMT",
    Charset:                           "UTF-8",
}))
2.2 支持静态文件服务

只需一行代码即可支持静态文件的传输,不过前辈博客中的StaticWeb方法已经不能用了,官方文档也还是使用的StaticWeb。

//app.StaticWeb("/static", "./static")
app.HandleDir("/static", "./static")

在这里插入图片描述

在这里插入图片描述
图片来源于B站,·~·

2.3 支持简单 js 访问

简单js访问,比如点击一下按钮跳转到另一个页面。

/*test.js*/
// 新建窗口打开/static
function f() {
    window.open("/static/img/test.webp")
}

/*hello.html*/
<input type="button" onclick="f()" value="js">
2.4 提交表单,并输出一个表格

使用模板显示视图,需要先注册,两个参数分别是文件夹和文件类型,Reload(true)表示html更新时不用重新启动app。

app.RegisterView(iris.HTML("./templates", ".html").Reload(true))

在hello.html中定义表单,请求方法为POST。

<form method="POST" action="/info">
	say something: <input type="text" name="Something"><br/><br/>
	<input type="submit" value="submit"><br/><br/>
</form>

首先定义一个表单结构体,字段名称需要和html中的表单字段名相同(在这里是Something), 首字母必须大写,使用ReadForm将表单读取到form中,使用ViewData填充返回的html文件,第一个参数是key,第二个是value。

func StartServices(app *iris.Application) {
    /*···*/
	app.Post("/info", getInfo)
    /*···*/
}

func getInfo(ctx iris.Context) {
	form := Form{}
	err := ctx.ReadForm(&form)
	if err != nil {
		ctx.StatusCode(iris.StatusInternalServerError)
		ctx.JSON(iris.Map{
			"error": "Something Wrong",
		})
	} else {
		ctx.ViewData("something", form.Something)
		ctx.View("info.html")
	}
}

在这里插入图片描述在这里插入图片描述

2.5 对 /unknown 给出开发中的提示,返回码 5xx

使用StatusCode设置错误码,然后通过WriteString或者JSON返回错误信息。

func unknown(ctx iris.Context) {
	ctx.StatusCode(501)
	ctx.JSON(iris.Map{
		"error": "501 ~开发中~",
	})
}

同时在特定错误发生时可以自定义处理函数,比如:

func StartServices(app *iris.Application) {
    /*···*/
	app.OnErrorCode(iris.StatusNotFound, notFound)
    /*···*/
}

func notFound(ctx iris.Context) {
    ctx.JSON(iris.Map{
		"error": "404 Not Found",
	})
    /*可以返回JSON,可以返回html等等*/
}

用postman发出请求,方便看到状态码(右边绿色)。

在这里插入图片描述

其他

github地址

参考资料

官方英文文档

官方中文文档

前辈博客

一文带你读懂容器技术(一):Docker 核心设计理念 点击上方蓝字关注我们Docker 的操作围绕镜像、容器、仓库三大核心概念。下面我们通过解决三个问题:1、容器是什么;2、容器与虚拟机的区别;3、Docker 的三个核心概念是什么,掌握D... 阅读详情

相关推荐

Golang - 嵌入静态文件打包二进制(从嵌入式文件系统读取静态文件)

执行次命令之后会在项目目录下生成bindata.go文件,示例命令中模板文件都在项目的web目录下。## embed 嵌入静态文件到可执行二进制文件。# 使用embed注册模板示例文档。# 安装go-bindata。

SAGGITARXM 1142

go的iris框架进行本地资源映射到服务

主要是记录了go-iris的静态文件开启服务后通过url进行访问

yasinawolaopo的博客 700

服务计算作业1——配置环境

服务计算作业1——配置环境果然到了最令人烦躁的环境配置阶段,老师给的教程也比较简单,许多内容需要我们自己去网上查找,经过一番波折,终于配置好了~ 安装atom linux环境 windows环境 安装golang linux环境 windows环境 检测和测试 添加atom中的插件 安装atomlinux环境参考博客为:http://blog.csdn.net/kangear/article/de

qq_36816912的博客 509

服务计算第六次作业-修改、改进 RxGo 包

服务计算第六次作业-修改、改进 RxGo 包 1、简介 ReactiveX是Reactive Extensions的缩写,一般简写为Rx,最初是LINQ的一个扩展,由微软的架构师Erik Meijer领导的团队开发,在2012年11月开源,Rx是一个编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流,Rx库支持.NET、JavaScript和C++,Rx近几年越来越流行了,现在已经支持几乎全部的流行编程语言了,Rx的大部分语言库由ReactiveX这个组织负责维护,比较流行的有RxJava

qq_43996906的博客 364

服务计算作业1---安装配置你的私有云

作业要求 安装配置一个私有桌面云,作业具体要求链接点击此处 实验步骤 安装和配置VirtualBox 此次作业要求版本5.x以上,官方下载 在VirtualBox菜单 :管理 -&amp;amp;gt; 全局设定,常规页面中,将“默认虚拟电脑位置”修改为自己想要存储的位置,建议不要放在C盘以免浪费空间 在VirtualBox菜单 :管理 -&amp;amp;gt; 主机网络管理器页面中,创建一块虚拟网卡,网络掩...

weixin_36328380的博客 540

服务计算作业3——agenda

服务计算作业3——agenda使用cobra来设计agenda会议安排项目# 生成agenda项目: ./cobra init agenda 添加命令: ./cobra add ...(the commands) 生成12个命令:agenda/cmd$ ls AddParticipator.go MeetingQuit.go root.go~ UserQuery.go

qq_36816912的博客 423

课程作业服务计算Homework1

一、基于Apache Dubbo 将上述类的方法对外提供RPC服务并调用 Dubbo的注册中心是Zookeeper,首先需要下载Zookeeper 按照官方教程下载 然后根据Apache Dubbo官网的Quick Start一步一步来,详细的过程官网已经描述的很清楚了,这里简略说一下流程 首先创建基于maven的dubbo-demo项目,在pom.xml中添加spring和dubbo的相关依赖,然后分别创建dubbo-api,dubbo-provider,dubbo-consumer三个模块,项目的目录

fkuner的博客 745

服务计算作业4——cloudgo(扩展任务)

服务计算作业4——cloudgo(扩展任务)net/http包的源码解析1.HTTP 2.HTTP包中接口:Handler、ServeMux、Server 3.创建HTTP服务:注册路由、开启监听、处理请求 4.总结1.HTTP虽然在计网理论课上已经可以初步认识http了,这里还是查阅了一下资料补充一下: 很多网络应用都是构建再 HTTP 服务基础之上。理解 HTTP 构建的网络应用只要关注

qq_36816912的博客 458

服务计算作业1-配置你的私有云

服务计算作业1-配置你的私有云 实验目的 实验内容 实验中遇到的问题 实验目的 初步了解虚拟化技术,理解云计算的相关概念 理解系统工程师面临的困境 理解自动化安装、管理(DevOps)在云应用中的重要性 实验内容 安装virtualBox 安装 VirtualBox 安装 Git 客户端(git bash),下载地址:官网,或 gitfor windows 或 github deskt...

Zqz983944的博客 532

服务计算--处理 web 程序的输入与输出

一、概述 设计一个 web 小应用,展示静态文件服务、js 请求支持、模板输出、表单处理、Filter 中间件设计等方面的能力。(不需要数据库支持) 二、任务要求 编程 web 应用程序 cloudgo-io。 请在项目 README.MD 给出完成任务的证据! 基本要求 支持静态文件服务 支持简单 js 访问 提交表单,并输出一个表格 对 /unknown 给出开发中的提示,返回码 5xx ...

TempterCyn的博客 532

服务计算作业2:写包做测试

课程网址:服务计算 - 云应用开发方法、技术与架构 作业网址:安装 go 语言开发环境 学习资料:如何使用Go编程 文章目录1.你的第一个程序2.你的第一个库 1.你的第一个程序 要编译并运行简单的程序,首先要选择包路径(我们在这里使用 github.com/user/hello),并在你的工作空间内创建相应的包目录: $ mkdir $GOPATH/src/github.com/user/h...

zz9629的博客 291

服务计算作业5——cloudgo-inout

服务计算作业5——cloudgo-inout老师的博客介绍地址为:http://blog.csdn.net/pmlpml/article/details/78539261 只要按照老师给的模板进行修改,就可以顺利完成这次的任务项目结构如下:cloudgo | main.go | service | infohandle.go jshandler.go service.

qq_36816912的博客 515

服务计算作业6——cloudgo-data

服务计算作业6——cloudgo-data课程地址为:http://blog.csdn.net/pmlpml/article/details/78602290使用xorm来改写提供的代码。按照教程先下载好docker和mysql并运行mysql: 建立好数据库: 运行并监听8080端口: 插入数据: 查询数据: 测试xorm的性能: 测试sql的性能: 对比结果

qq_36816912的博客 335

iris web框架无法加载静态文件

必须得marker一下自己的愚蠢 前段时间写beego加载静态文件那可是挺方便得, 可就在今天,转写iris却无法加载静态文件,可把我 差点逼疯了,自己竟然这么**. 搜百度吧,又没有找到一个合适得接解决方法,可 把我逼哭了 摸了四五个小时,可终于解决,自己多蠢啊 , 所以无论怎么简单,拦不了我记住这个教训 接近成功的边缘,我是用了 app:=iris.New() app.StaticWeb...

Primer5 3547

拖拽传图 Iris + DropzoneJS

Iris官方其实很厚道,有很多有用的例子,而社区则是文档多于实战。源于官方示例库([英文源文])(https://github.com/kataras/iris/tree/master/_examples/tutorial/dropzonejs),本文采用 DropzoneJS and Go实现图片上传,后端裁剪,前端呈现,代码量少但胜在实用,适合新同学实战。 涉及的点 DropzoneJS...

pardon110的博客 551

golang web 自定义Handler时候静态资源问题

为什么80%的码农都做不了架构师?>>> ...

weixin_33755554的博客 483

Go使用handle和handlefunc

https://www.jianshu.com/p/3b5c4fc0695c

tao911110的博客 1551

go语言http服务处理image/css/js等静态文件

go语言实现http服务器时如果处理静态文件,需要用到

盘古大叔 3870

iris框架更新后,application的StaticWeb函数被删除,调用替换方法

这几天在跟着项目做iris框架的小应用,发现iris框架更新后,删除了StaticWeb方法,在网上找了半天没找到替换方法,最后在官方实例中找到了。 实例代码目录为:iris/_examples/file-server/embedding-files-into-app b.HandleDir("public","./public") 第一个变量声明url路径,第二个参数变量是静态文件夹目录。 ...

cenyuuuer的博客 2527
上一篇: Unity3D项目八:简单粒子光环
下一篇: markdown转pdf
Tifinity
博客等级 码龄9年 18粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值