golang学习笔记之WEB框架ECHO

Golang Echo框架依赖注入实践:打造可测试代码 本文旨在帮助Golang开发者理解依赖注入的核心概念,并掌握在Echo框架中实现依赖注入的具体方法。我们将重点关注如何通过依赖注入提高代码的可测试性,同时保持代码的简洁和高效。介绍依赖注入的核心概念分析Echo框架的基本结构展示依赖注入的实现方法提供完整的代码示例讨论单元测试的最佳实践探索高级应用场景依赖注入(Dependency Injection): 一种设计模式,将对象的依赖关系从内部创建改为外部传入控制反转(IoC): 程序控制权从应用程序代码转移到框架或容器接口隔离。 阅读详情

ECHO是golang的一款轻量级的web框架,如同python里的flask,非常灵活,可扩展性很强。

hello,ECHO!

安装

go get github.com/labstack/echo/...

一个简单的hello

func main() {
	//创建一个ECHO服务实例
	e := echo.New()
	//ECHO里的URL路由以及对应的url处理函数
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hello, ECHO!")
	})
	//在1323号端口开启服务
	e.Logger.Fatal(e.Start(":1323"))
}

在终端启动服务

go run Hello.go

现在打开浏览器访问 127.0.0.1:1323 就能看到返回的字符串 Hello, ECHO! 了。

开始

web框架的核心就是接收http请求,然后进行处理,之后再返回响应。

ECHO的URL路由接收三个参数,一个URLpath,一个是HandlerFunc类型的处理函数,还有一个是中间件。
看一个例子

func getUser(c echo.Context) error {
// User ID 来自于url users/:id
id := c.Param(“id”)
return c.String(http.StatusOK, id)
}
func main() {
e := echo.New()
e.GET("/users/:id", getUser)
…
}

ECHO中的HandlerFunc类型只要是带有(c echo.Cintext) error 签名即可。函数只要携带这个参数,就可以视为HandlerFunc类型,就能当作url处理器。 (个人粗浅看法,这里留一个疑问,在net/http包里,是要实现了ServerHTTP(http.ResponseWriter,*http.Request) 方法才能算得上是一个处理器)

HandlerFunc类型接收上下文参数返回状态码+需要返回的数据或错误。
在net/http包中,可以显示声明一个ServerMux路由,如果不声明,那么使用默认的
ServerMux,在ECHO中,直接echo.GET/PUT/POST/DELETE 就是一个ServerMux

处理请求
echo.Context为url请求上下文,包含了很多url参数信息,可以进行提取
就像python django里的view里面的每个函数都要有一个request参数一样。

Param() :获取url路径里的参数

//http://127.0.0.1:8080/user/1
id := c.Param(“id”)

QueryParam() :获取请求参数

//http://127.0.0.1:8080/get?name=jack&age=12
name := c.QueryParam(“name”)
age := c.Queryparam(“age”)

Formvalue() :获取表单里提交的值

// name bob
// age    18
name := FormValue(“name”)
age := FormValue(“age”)

FormFile(“文件名”): 获取表单上传的文件

name jessic
age 12
avatar avatar   //这是一部电影的封面图片文件

上传文件处理流程

  1. 获得上传文件对象
  2. 打开上传文件
  3. 创建同名空文件
  4. 将上上传的文件的内容复制到服务器端到同名文件内
  5. 关闭两个文件

代码如下:

//这个func1函数放在最前面,就不用每次打开一个文件或其他都在后面写一句
if err != nil {
 		return err
 	}
了。

defer func1() {
	if err := recover();err != nil {
		fmt.Println(err)
	}
}()

//获取avatar对象
avatar ,err := c.FormFile(“avatar”)

 //打开资源文件
src ,err := avatar.Open()	
defer src.Close()

//在服务器端新建一个同名文件 os.Create(“文件名”)
dst ,err := os.Create(avatar.Filename)
defer dst.Close()

//将传入的文件复制到新建的文件内 io.Copy()
_, err := io.Copy(dst, src) 
//将第二个参数的内容复制到第一个文件里面去。

返回响应
请求经过HandlerFunc类型的函数处理过后,就会返回响应,ECHO支持多种响应的返回
return c.String/HTML/XML/JSON()
这些返回都有一个共同点,第一个参数为状态码,可以直接写数字,或者用预定义的常量http.StatusOk (这个值为200)
第二个参数才为函数对应的返回格式内容
如

c.String(200,”hello,Echo”)
c.HTML(200,”<h1>hello, Echo</h1>”)
c.JSON(200,json_file)
type User struct {
	Name  string `json:"name" xml:"name" form:"name" query:"name"`
	Email string `json:"email" xml:"email" form:"email" query:"email"`
}
...
e.POST("/users", func(c echo.Context) error {
u := new(User) //新建一个结构体实例,可以当作JSON类型
if err := c.Bind(u); err != nil {
	return err
}
return c.JSON(http.StatusCreated, u)
// 或者
// return c.XML(http.StatusCreated, u)

})

静态文件处理
既然是web服务,那么少不了静态文件的处理。ECHO提供了两种方法
echo.File()/Static()
Echo.File()为一对一,用于那些静态的的路径

e.File(“/”,”public/index.html”)
e.File(“/favicon.ico”, "images/favicon.ico")

echo.Static(“/”,”目录”) 该方法指定一个目录,将所有经过的符合第一个参数的请求路径都去访问第二个参数指定的目录
如 e.Static("/static", “mystatic”) 表示所有访问http://127.0.0.1:8080/static/文件名 的请求都将访问mystatic目录。
http://127.0.0.1:8080/static/jquery.js 将匹配mystatic/jquery.js

实例
我们的静态文件都放在static下面,然后路由器设置为
e.Static(“/static”, “static”)
这样我们就可以用 http://127.0.0.1:8080/static/js/jquery.js 访问存放在static下的js下的js文件了
有点将二者化为等号的意思。

模版渲染
即将动态数据渲染到静态html页面里
Context#Render(code int, name string, data interface{}) error 用于渲染一个模板,然后发送一个 text/html 的状态响应
c.Render(200, 模版名,数据map),将map里的数据渲染到模版里,并返回200
流程
1.要想能够被渲染,那么模版文件就必须得实现echo.Render接口才行

type Template struct {
    templates *template.Template
}

func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
    return t.templates.ExecuteTemplate(w, name, data)
}

2.将模版先编译

t := &Template{
	templates: template.Must(template.ParseGlob("public/views/*.html")),
}

3.注册模版
即将编译好的模版,赋值给echo.Renderer

e := echo.New()
e.Renderer = t
e.GET("/hello", Hello)

4.完成渲染

 func Hello(c echo.Context) error {
 	return c.Render(http.StatusOK, "hello", "World")
 }

使用中间件
中间件的定义,有很多种解释

  • 中间件是在HTTP请求 - 响应周期中链接的功能,具有Echo#Context用于执行特定操作的访问权限,它可以获得
    Echo#Context 对象用来进行一些特殊的操作, 比如记录每个请求或者统计请求数。
  • 中间件middleware,提供系统软件与应用软件之间连接的软件,可以类比下手机充电器适配器,市电提供的为220v交流电,而手机电源当然不能直接接在220v电压上,充电器就是将220v电压转换为适合手机电源充电的电压的工具。应用软件就是我们的EHCO框架里写的处理代码,而系统软件就是操作系统层面的软件。
  • Web中间件,就是将原始http请求的数据包进行处理,将我们需要的信息留下,然后将处理后的请求再交给我们的应用软件处理。
  • 中间件的本质,就是在执行handler的前后,先执行自定义的handler。
    封装处理过程并在处理输入或输出时增加额外的动作。可插拔,很方便

如何让一个函数或方法变成中间件?
只要某个方法实现http.Handler接口即可,跟url处理方法的实现一样,都要实现ServerHTTP(http.ResponseWriter,*http.Request)
建立一个handler链,使其能够满足中间件的 handler 和 正常应用的 handler,并且能够注册到 http.ServeMux
例子

func middlewareOne(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        log.Println("Executing middlewareOne")
        next.ServeHTTP(w, r)
        log.Println("Executing middlewareOne again")
    })
}

ECHO使用中间件,

E := echo.New()
E.Use(middleware.BasicAuth(func(username, password string, c echo.Context) (bool, error) {
	if username == "zhangjie" && password == "password" {
		return true, nil
	}
	return false, nil
}))

小记:

  1. 开发调试restfulapi的利器curl
  2. Golang里的函数,涉及到两个参数的时候,一般都是后一个参数添加到前一个参数里。例如append(slice, value),
    io.Cop(dst, src)
GIN与Echo:选择正确Go框架的指南 本指南将详细介绍每个框架的特性、速度、社区热度以及它们各自擅长的项目类型。最后,您将能够为您的下一个Web项目选择完美的框架! 阅读详情

相关推荐

golang学习笔记32——哪些是用golang实现的热门框架和工具

在当今的软件开发领域,Golang(Go 语言)以其高效、简洁和强大的并发性能而备受青睐。许多优秀的框架和工具都是用 Golang 实现的,本文将为大家介绍一些常见的用 Golang 实现的框架和工具,并附上代码示例帮助大家更好地理解。Kubernetes 的核心组件,如 API 服务器、控制器管理器和调度器等,都是用 Golang 编写的。总之,Golang 实现的框架和工具在各个领域都发挥着重要的作用。这个简单的例子创建了一个基本的命令行工具,当运行这个程序时,会显示简短的帮助信息。

GoppViper的博客 1937

GOLANG开发 - Echo 框架 入门

fmt.Println("测试数据")//定义GET方法")})//定义POST方法// 启动服务器//定义方法在页面或者引入资源包的时候需要定义一个资源文件夹,里面存放JS,CSS,图片等一系列的静态资源,那么我们引用的时候需要使用相对路径或者绝对路径,那么我们就需要定义一个路径,来实现引用静态资源:比如 static 目录下的任何文件都会被访问。例如,一个访问 /static/js/main.js 的请求会匹配到 static/js/main.js 这个文件。

masterphp的博客 2969

主流Golang框架对比以及介绍

golang一些基本开发框架介绍以及对比

资深系统架构,深耕高并发研发与 AI 大模型工程化落地。技术栈以 Python (AI/NLP/RAG/Agent) 与 Golang (高并发架构) 为双核心,兼具 PHP 大型应用经验。专注算法落地、复杂系统设计及团队技术赋能 7527

golang语言系列:Web框架+路由 之 Echo

本文是golang语言系列文章,本篇主要对 Echo 框架 的基本使用方法 进行学习

a1369760658的博客 2554

Go web框架|Beego、Gin、Echo、Iris等干货教程

等等,

weixin_43507410的博客 2350

Echo框架深度解析:为什么它是Golang Web开发的首选?

随着Golang在云计算、微服务领域的普及,Web开发需求激增。市场上虽有Gin、Beego等框架,但Echo凭借“轻量+高性能+灵活”的特性突出重围。本文将覆盖Echo的核心设计思想、关键组件(路由、中间件、处理函数)、底层优化原理,以及如何用Echo快速构建生产级Web应用。本文将按照“故事引入→核心概念→原理拆解→实战演练→场景应用”的逻辑展开。前半部分用生活化案例降低理解门槛,后半部分通过代码和架构图揭示技术细节,最后结合实际场景总结Echo的优势。路由(Router):决定HTTP请求(如。

AI Agent Harness Engineering 915

golang快速入门—echo构建web应用

概述 echo web框架是go语言开发的一种高性能,可扩展,轻量级的web框架。echo框架真的非常简单,几行代码就可以启动一个高性能的http服务端。 类似python的django框架 可设置cookie,session,文件上传,获取用户ip等 依赖安装 go get github.com/labstack/echo/v4 # web框架 go get -u github.com/swaggo/echo-swagger # echo中使用swagger文档 go get github.com/s

jack.li的博客 2002

RFID射频识别技术介绍及简单应用

简单介绍RFID技术及其简单应用,后附简单门禁制作方法和代码

来者皆是客。 1万+

go初学者安装echo框架

一、echo简介 go语言中,web框架非常多,但是echo绝对是性能非常好的一种,下面是各种go框架的性能对比 中国有这个框架的翻译版本,不是非常全,但是也基本上差不多了,如果英文基础好的话可以查阅英文版 - 点击打开链接 二、安装 因为golang.org在我们伟大的天朝无法访问的原因,所以按照官网上面的介绍是万万不可能安装成功的,这里我来把我之前安装的步骤整理一下,自

qq849635649的博客 1万+

从接线到组态:手把手教你搞定PROFIBUS-DP与PA的混合网络搭建(基于西门子TIA Portal)

本文详细介绍了PROFIBUS-DP与PA混合网络的搭建方法,基于西门子TIA Portal平台,从硬件选型、网络架构设计到组态配置和现场调试,提供了一套完整的实战指南。重点解析了DP/PA耦合器的使用、地址映射策略及网络诊断技巧,帮助工程师高效构建高可靠性的工业自动化网络。

weixin_32103009的博客 302

Delphi 12社区版免费了!手把手教你搭建跨平台开发环境(Windows/macOS/Android/iOS)

本文详细介绍了如何利用新发布的Delphi 12社区版,免费搭建支持Windows、macOS、Android和iOS的跨平台开发环境。内容涵盖从环境准备、安装、配置各平台SDK(包括Android与macOS/iOS的PAServer连接),到创建首个FireMonkey跨平台应用、集成数据库以及调试部署的完整实战流程,帮助开发者零成本启动高效开发。

butter的博客 978

Golang(go语言)的框架

Golang(go语言)的框架,2020–07–25。

行走的皮卡丘 1万+

opencv实现“找茬”

// 111.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using namespace std; #define CVX_RED CV_RGB(0xff,0x00,0x00) #define CVX_BLUE CV_RGB(0x00,0x00,0xff)//定义宏,轮廓边框颜色 in

yanHa007的专栏 2094

Go语言中的Web框架:从Gin到Echo

Web框架是Go语言开发中的重要工具,它可以帮助开发者快速构建高性能、可扩展的Web应用。从Gin到Echo,再到Fiber、Beego、Chi等,Go语言的Web框架生态系统非常丰富,开发者可以根据项目的需求选择适合的框架。性能功能生态系统社区支持学习曲线通过合理选择和使用Web框架,我们可以开发出更加高效、可靠的Web应用。Web框架的选择是一个重要的决策,需要根据项目的具体需求和团队的技术栈来决定。

好代码自己会说话,烂代码才需要注释来圆谎 4095

CTP开发实战:如何高效处理预埋单与委托单的完整流程(附代码示例)

本文深入探讨了CTP开发中预埋单与委托单的完整处理流程,从订单生命周期理解、核心代码实现到异步事件处理与系统健壮性构建。通过详细的代码示例和状态机分析,为开发者提供了构建高可靠订单处理系统的实战指南,重点解决了状态同步、异常恢复等关键工程挑战。

weixin_29234239的博客 116

SAP 生产订单工序删除状态撤回简介

2、我们在前台对于生产订单的状态一个是在生产订单抬头中的状态,另外一个是针对上面一直在测试的是工序的状态,这个两个状态是前台可见的状态,实际生产订单还有一个组件物料的状态,这个状态是不可见的一个状态。生产订单中的0010工序中对应的组件的栏位被标识,表示有物料分配到了0010的工序中,正常情况下0010的工序被分配了工序是不应该被删除的。将已领料的工序删除掉,导致异常的发生。当物料已领料会,用户仍然把已分配的物料的工序删除掉,导致后续业务操作过程中产生异常,如下图中所示,0010的工序被打上了删除标识。

我小时候很黑的博客 1942

最好的6个Go语言Web框架

原文:Top 6 web frameworks for Go as of 2017 作者:Edward Marinescu 译者:roy 译者注:本文介绍截至目前(2017年)最好的6个Go语言Web框架。以下为译文:GO 语言爱好者的最佳Web框架如果你是自己写一个小应用程序,那你可能不需要Web框架。但是如果你要做产品,那么你肯定需要一个好的框架。如果你认为你有相应的知识和经验,你会

优快云研发技术 23万+

Seurat-SCTransform与harmony整合学习

源于R tips:Seurat之SCTransform方法原理 (qq.com)Seurat对象在经过SCTransform处理后会增加一个SCT的Assay,里面的scaled.data就是经过scale之后的pearson residual值,这个值是用于后续降维聚类分析使用的。

hx2024的博客 2330

Go语言(Golang)的Web框架比较:gin VS echo

Go语言(Golang)的web框架比较之:gin vs echo 由butaixianran在 2016-01-23 22:00 发布 35423 次点击 原文发在:https://771dian.com/cb/topic/41em4_hug Web框架类型 web框架的主流,是采用轻量级的中间件式框架,把网站变成只有api的一个个小服务,其他都扔到cdn之类的地方处理。 这种方式...

有趣的人生 一半是山川湖海 一半是初心情怀 1万+

GEE:面对对象土地利用分类(结合SNIC、GLCM 和机器学习算法)

本文将介绍在Google Earth Engine中结合SNIC、GLCM和机器学习算法的的土地利用/土地覆盖(LULC)分类方法。结果如下图所示,

养乐多的博客 5617

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Go Echo 框架介绍

Go Echo 框架介绍

闲余知道 1665

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Go 高效Web开发框架 Echo

Echo是一个快速、简洁的Go Web框架,专为RESTful API和微服务设计。它提供了路由、中间件、数据绑定、验证等核心功能,同时支持插件扩展,使得开发过程更加灵活和高效。中间件是Echo框架的一个强大特性,允许开发者在处理请求之前或之后执行一些操作。自定义中间件可以用于日志记录、鉴权、跨域处理等。// 日志记录请求信息Echo框架以其高性能和易用性,为Go语言的Web开发提供了强大的支持。通过本文介绍的一些使用技巧,开发者可以更深入地理解Echo框架的潜力,构建出更加健壮、高效的Web应用。

专注于全栈开发领域 1567

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Golang Web开发框架大比拼:找到适合你的框架

本文旨在对Golang的几种主流Web框架进行比较,包括Gin, Echo, Beego等,通过全面的分析和比较,帮助开发者根据自己的项目需求选择最合适的框架。Golang,作为一种高性能的编程语言,因其简洁、快速和可靠的特性在Web开发领域受到越来越多开发者的青睐。最后,重要的是要记住,没有所谓的“最佳”框架,只有最适合项目需求的框架。路由则处理传入的JSON数据,展示了简单的数据处理和响应逻辑。在这一部分,我们将探讨一些使用不同Golang Web框架的成功案例,并分析它们的选择理由和实现效果。

walkskyer的博客 7049
上一篇: Golang学习笔记之网络包net/http
下一篇: markdown转pdf
codeMore++
博客等级 码龄9年 6粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值