go语言简明教程_go语言黑客教程

hacker|
143

GO语言(十三):使用 Go 和 Gin 开发 RESTful API(下)

当客户端在 发出POST请求时/albums,您希望将请求正文中描述的专辑添加到现有专辑数据中。

为此,您将编写以下内容:

1、编写代码

a.添加代码以将专辑数据添加到专辑列表。

在此代码中:

1)用于Context.Bind *** ON 将请求正文绑定到newAlbum。

2) album将从 *** ON 初始化的结构附加到albums 切片。

3)向响应添加201状态代码,以及表示您添加的专辑的 *** ON。

b.更改您的main函数,使其包含该router.POST函数,如下所示。

在此代码中:

1)将路径中的POST *** 与 /albumspostAlbums函数相关联。

使用 Gin,您可以将处理程序与 HTTP *** 和路径组合相关联。这样,您可以根据客户端使用的 *** 将发送到单个路径的请求单独路由。

a.如果服务器从上一节开始仍在运行,请停止它。

b.从包含 main.go 的目录中的命令行,运行代码。

c.从不同的命令行窗口,用于curl向正在运行的 Web 服务发出请求。

该命令应显示添加专辑的标题和 *** ON。

d.与上一节一样,使用curl检索完整的专辑列表,您可以使用它来确认添加了新专辑。

该命令应显示专辑列表。

当客户端向 发出请求时GET /albums/[id],您希望返回 ID 与id路径参数匹配的专辑。

为此,您将:

a.在您在上一节中添加的函数下方postAlbums,粘贴以下代码以检索特定专辑。

此getAlbumByID函数将提取请求路径中的 ID,然后找到匹配的专辑。

在此代码中:

(1)Context.Param用于从 URL 中检索id路径参数。当您将此处理程序映射到路径时,您将在路径中包含参数的占位符。

(2)循环album切片中的结构,寻找其ID 字段值与id参数值匹配的结构。如果找到,则将该album结构序列化为 *** ON,并将其作为带有200 OK HTTP 代码的响应返回。

如上所述,实际使用中的服务可能会使用数据库查询来执行此查找。

(3)如果找不到专辑,则返回 HTTP 404错误。

b.最后,更改您的main,使其包含对router.GET的新调用,路径现在为/albums/:id ,如以下示例所示。

在此代码中:

(1)将/albums/:id路径与getAlbumByID功能相关联。在 Gin 中,路径中项目前面的冒号表示该项目是路径参数。

a.如果服务器从上一节开始仍在运行,请停止它。

b.在包含 main.go 的目录中的命令行中,运行代码以启动服务器。

c.从不同的命令行窗口,用于curl向正在运行的 Web 服务发出请求。

该命令应显示您使用其 ID 的专辑的 *** ON。如果找不到专辑,您将收到带有错误消息的 *** ON。

恭喜!您刚刚使用 Go 和 Gin 编写了一个简单的 RESTful Web 服务。

本节包含您使用本教程构建的应用程序的代码。

抓必死是什么开发语言

抓必死是什么开发语言博客园-开发者的网上家园

今天,我们来聊一聊测试人员想要进阶,想要做自动化测试,甚至测试开发,如何选择编程语言。前言 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件测试未来发展的趋势。...

博客园

swift语言 必死 现在iOS APP开发,用oc语言的多,还是swift语音的多?酷米网

这门快速发展的语言,很多实际场景无法有效实现功能,尤其是一些复杂的开发需求。另外,手机原生开发的一部分市场份额被H5开发技术所取代,而这种新的原生语言必然很难 1。Swift目前必须用Xcode...

酷米网

python3.0开发语言简介-程序员大本营

python3.0开发语言简介,程序员大本营,技术文章内容聚合之一站。

其他人还搜了

不能作为网页开发语言的是什么

开发手机游戏用什么语言

c语言适合开发什么

安卓系统版本开发语言是什么

学什么开发语言好学

学什么开发语言好就业

各种语言写 *** 爬虫有什么优点缺点?芝士回答

总之,如果开发一个小规模的爬虫脚本语言是个各方面比较有优势的语言。如果要开发一个复杂的爬虫系统可能 Java 是个增加选项,C++ 我感觉写个模块之类的更加适合。对于一个爬虫系统来说,下载和...

芝士回答2022-07-08

“阿里味”PUA 编程语言火上GitHub热榜,标星1.9K-编程之家

其实,这是一位国内程序员开发的 互联网黑话编程语言,英文名叫PUA Language。这个语言成功将两大部门员工对齐:非技术部门能 快速 掌握编程要领,程序员也能获得每天PPT汇报的 *** 。看到这么...

编程之家2022-10-15

游戏开发中常见的10种编程语言分别是什么-编程语言-亿速云

游戏开发是非常有经验和熟练的程序员的工作。它可能花费数亿美元。这是一项非常有创意的工作,也需要技术水平。他们需要具有特定需求的编程语言。以下是用于游戏开发的十大编程语言的列表。1、...

亿速云计算2022-01-11

python-编程语言-CSDN开发者互助问答社区_程序员有问必答-CSDN问答

问题遇到的现象和发生背景 各位好,我正在尝试用抓包,获取剑网3推栏的一些信息,但是目前,根据我获得的API,请求过去貌似还缺少一些参数。遇到的现象和发生背景,请写出之一个错误信息 缺少...

CSDN技术社区

十大受欢迎的编程语言你pick哪一个?腾讯新闻

甚至很多家长直接从娃娃抓起,几岁的小孩就开始去学编程!然而现在已有的计算机语言总数总计达9000多种,但是其实只有50种编程语言是较为流行的。在众多的编程语言中,究竟抱团前十的有哪些呢?...

腾讯网2020-07-30

编程语言里的网红 python语言有何优势-起航学习网

人工时代真的来了,为了我们下一代的教育,我们的未来应该从小开始抓起,python编程语言将融入低幼阶段,并逐步普及开来。文章出自: 文章...

起航学习网2018-07-08

各种语言写 *** 爬虫有什么优点缺点?

回答:26浏览:23万+赞同:10

[更佳答案]反对@Kenneth,他见过的爬虫太少了首先取决于目的如果是一个站点,单一目的,用习惯的语言写吧,学别的语言用的时间都够重构两遍的了。如果是有100左右的站点,做个框架,把你的爬虫管理起来,...

知乎2017-02-11

相关搜索

学什么开发语言好

学什么开发语言

现在学什么开发语言好

安卓开发语言

开发语言

c语言开发需要学什么

c语言开发环境

开发语言是什么

11-20条

Python开发语言的简介及优缺点-知乎

Python 简单易用,学习成本低,代码优雅干净清爽 Python 标准库和第三方库非常多,多到甚至有些恐怖,太多程序员为之添砖加瓦 Python功能强大,从网站 网抓 数据处理 科学计算 AI 运维都能干,...

知乎2022-07-28

该选择哪个语言开发爬虫?php教程-PHP中文网

我觉得不是说选择哪个语言,主要是看开发者对哪个语言最熟悉。如果是我的话,我会用 Node.js Node.js 有一个 Cheerio 库,用来解析 HTML 效率十分不错。它的 API 风格是类似 jQuery 的。啥都不...

php中文网2016-06-06

机器人研发十大热门编程语言:不死 Java、不朽 C/C+、新贵 Python_CSDN资讯的博客-CSDN博客_机器人编程

阅读:4w+

而回归本文主题,对于首选编程语言的选择,没有更佳的答案,但本文中,我们将介绍程序员在机器人编程中更流行的十大编程语言,并通过对比其优缺点,希望可以给予开发者提供一定的参考方向,做出...

CSDN技术社区2017-11-28

最适合青少年学习的编程语言 – Python-今日头条

高考政策出台在即,国家在抓信息技术教育,即使是今年高考也已经用到计算思维逻辑,未来人工智能必然会用到。10到16岁的孩子,大脑发育尚未完成,这段时间的学习会促进大脑神经元突触的生长以及...

今日头条2018-08-04

各种语言写 *** 爬虫有什么优点缺点

真正好的系统还包括完善的任务调度:dom.GAE 的支持,如果开发一个小规模的爬虫脚本语言是个各方面比较有优势的语言: 1,好的设计会节约大量的带宽和服务器资源,请求页面时会有较长的延迟,要...

搜狗问问2019-05-03

go语言_证券指标的博客-CSDN博客

背景 在接触Golang以前,我用C/C++、Lua及Python作为主要开发语言。C/C++的问题:开发效率低,对开发者要求高libc只向后兼容,运维难度偏大Lua/Python的问题:动态语言,缺少编译过程,低级错误...

CSDN技术社区2016-01-12

Go语言介绍-码农教程

这个不用多做介绍,作为开发Go语言的公司,当仁不让。Google基于Go有很多优秀的项目,比如: ,大家也可以在Github上 ...

码农网2021-10-01

黑客都使用什么编程语言?python|javascript_网易订阅

评论:73

他们的年龄在16到21岁,现已经释放,警方表示调查还在继续,但警方并未透露这位主谋是否被抓。与此同时,自称是欧洲更大的黑客协会Chaos计算机俱乐部做了一份调查,其目的是研究黑客们都使用...

手机网易网2022-03-29

“阿里味”PUA 编程语言火上GitHub热榜,标星1.9K!Wang_AI的博客-CSDN博客

其实,这是一位国内程序员开发的 互联网黑话编程语言,英文名叫PUA Language。这个语言成功将两大部门员工对齐:非技术部门能快速掌握编程要领,程序员也能获得每天PPT汇报的 *** 。看到这么有趣...

CSDN技术社区2022-01-08

这门语言将成为法国高中官方编程语言,微软也用它做脚本?

作为一种解释型语言,Python的设计哲学强调代码的可读性和简洁的语法。相比于C++或Java,Python让开发者能够用更少的代码表达想法。Python 或将成为法国高中的官方编程教学语言,这将带来...

美篇2018-12-01

相关搜索

学什么开发语言

学什么开发语言好

ai开发用什么语言

开发语言是什么

现在学什么开发语言好

linux开发用什么语言

cshop是什么开发语言

开发手机游戏用什么语言

gis开发用什么语言

windows开发的语言是什么

【原创】树莓派3B开发Go语言(四)-自写库实现pwm输出

在前一小节中介绍了点亮之一个LED灯,这里我们准备进阶尝试下,输出之一段PWM波形。(PWM也就是脉宽调制,一种可调占空比的技术,得到的效果就是:如果用示波器测量引脚会发现有方波输出,而且高电平、低电平的时间是可调的。)

这里爪爪熊准备写成一个golang的库,并开源到github上,后续更新将直接更新到github中,如果你有兴趣可以和我联系。 github.com/dpaw *** ear/bear_rpi_go

我在很多的教程中都看到说树莓派的PWM(硬件)只有一个GPIO能够输出,就是 GPIO1 。这可是不小的打击,因为我想使用至少四个 PWM ,还是不死心,想通过硬件手册上找寻蛛丝马迹,看看究竟怎么回事。

手册上找寻东西稍等下讲述,这里先提供一种 *** 测试 树莓派3B 的 PWM *** :用指令控制硬件PWM。

这里通过指令的方式掌握了基本的pwm设置技巧,决定去翻一下手册看看到底PWM怎么回事,这里因为没有 BCM2837 的手册,根据之前文章引用官网所说, BCM2835 和 BCM2837 应该是一样的。这里我们直接翻阅 BCM2835 的手册,直接找到 PWM 章节。找到了如下图:

图中可以看到在博通的命名规则中 GPIO 12、13、18、19、40、41、45、52、53 均可以作为PWM输出。但是只有两路PWM0 PWM1。根据我之前所学知识,不出意外应该是PWM0 和 PWM1可以输出不一样的占空比,但是频率应该是一样的。因为没有示波器,暂时不好测试。先找到下面对应图:

根据以上两个图对比可以发现如下规律:

对照上面的表可以看出从 BCM2837 中印出来的能够使用在PWM上的就这几个了。

为了验证个人猜想是否正确,这里先直接使用指令的模式,模拟配置下是否能够正常输出。

通过上面一系列指令模拟发现,(GPIO1、GPIO26)、(GPIO23、GPIO24)是绑定在一起的,调节任意一个,另外一个也会发生变化。也即是PWM0、PWM1虽然输出了两路,可以理解成两路其实都是连在一个输出口上。这里由于没有示波器或者逻辑分析仪这类设备(仅有一个LED灯),所以测试很简陋,下一步是使用示波器这类东西对频率以及信号稳定性进行下测试。

小节:树莓派具有四路硬件输出PWM能力,但是四路中只能输出两个独立(占空比独立)的PWM,同时四路输出的频率均是恒定的。

上面大概了解清楚了树莓派3B的PWM结构,接下来就是探究如何使用Go语言进行设置。

因为拿到了手册,这里我想直接操作寄存器的方式进行设置,也是顺便学习下Go语言处理寄存器的过程。首先需要拿到pwm 系列寄存器的基地址,但是翻了一圈手册,发现只有偏移,没有找到基地址。

经过了一段时间的努力后,决定写一个 树莓派3B golang包开源放在github上,只需要写相关程序进行调用就可以了,以下是相关demo(pwm)(在GPIO.12 上输出PWM波,放上LED灯会有呼吸灯的效果,具体多少频率还没有进行测试)

以下是demo(pwm) 源码

Go语言命令行利器cobra使用教程

cobra是一个提供简单接口来创建强大的现代CLI界面的库类似git git tools,cobra也是一个应用程序,它会生成你的应用程序的脚手架来快速开发基于cobra的应用程序

cobra提供:

cobra建立在命令、参数、标志的结构之上

commands代表动作,args是事物,flags是动作的修饰符

更好的应用程序在使用时读起来就像句子,因此,用户直观地知道如何与它们交互

模式如下:APPNAME VERB NOUN --ADJECTIVE. or APPNAME COMMAND ARG --FLAG(APPNAME 动词 名词 形容词 或者 APPNAME 命令 参数 标志)

一些真实世界的好例子可以更好地说明这一点

kubectl 命令更能体现APPNAME 动词 名词 形容词

如下的例子,server 是command,port是flag

这个命令中,我们告诉git 克隆url

命令是应用程序的中心点,应用程序支持的每一个交互都包含在一个命令中,命令可以有子命令,也可以运行操作

在上面的例子中,server是命令

更多关于cobra.Command

flag是一种修改命令行为的方式,cobra支持完全兼容POSIX标志,也支持go flag package,cobra可以定义到子命令上的标志,也可以仅对该命令可用的标志

在上面的命令中,port是标志

标志的功能由 pflag library 提供,pflag library是flag标准库的一个分支,在添加POSIX兼容性的同时维护相同的接口。

使用cobra很简单,首先,使用go get按照最新版本的库,这个命令会安装cobra可执行程序以及库和依赖项

下一步,引入cobra到应用程序中

虽然欢迎您提供自己的组织,但通常基于Cobra的应用程序将遵循以下组织结构:

在Cobra应用程序中,main.go文件通常非常简单。它有一个目的:初始化Cobra。

使用cobra生成器

cobra提供了程序用来创建你的应用程序然后添加你想添加的命令,这是将cobra引入应用程序最简单的方式

这儿 你可以发现关于cobra的更多信息

要手动实现cobra,需要创建一个main.go 和rootCmd文件,可以根据需要提供其他命令

Cobra不需要任何特殊的构造器。只需创建命令。

理想情况下,您可以将其放在app/cmd/root.go中:

在init()函数中定义标志和处理配置

例子如下,cmd/root.go:

创建main.go

使用root命令,您需要让主函数执行它。为清楚起见,Execute应该在根目录下运行,尽管它可以在任何命令上调用。

在Cobra应用程序中,main.go文件通常非常简单。它有一个目的:初始化Cobra。

可以定义其他命令,通常每个命令在cmd/目录中都有自己的文件。

如果要创建版本命令,可以创建cmd/version.go并用以下内容填充它:

如果希望将错误返回给命令的调用者,可以使用RunE。

然后可以在execute函数调用中捕获错误。

标志提供修饰符来控制操作命令的操作方式。

由于标志是在不同的位置定义和使用的,因此我们需要在外部定义一个具有正确作用域的变量来分配要使用的标志。

有两种不同的 *** 来分配标志。

标志可以是“持久”的,这意味着该标志将可用于分配给它的命令以及该命令下的每个命令。对于全局标志,在根上指定一个标志作为持久标志。

也可以在本地分配一个标志,该标志只应用于该特定命令。

默认情况下,Cobra只解析目标命令上的本地标志,而忽略父命令上的任何本地标志。通过启用Command.TraverseChildren,Cobra将在执行目标命令之前解析每个命令上的本地标志。

使用viper绑定标志

在本例中,持久标志author与viper绑定。注意:当用户未提供--author标志时,变量author将不会设置为config中的值。

更多关于 viper的文档

Flags默认是可选的,如果希望命令在未设置标志时报告错误,请根据需要进行标记:

持久性Flags

可以使用命令的Args字段指定位置参数的验证。

内置了以下验证器:

在下面的示例中,我们定义了三个命令。两个是顶级命令,一个(cmdTimes)是顶级命令之一的子命令。在这种情况下,根是不可执行的,这意味着需要一个子命令。这是通过不为“rootCmd”提供“Run”来实现的。

我们只为一个命令定义了一个标志。

有关标志的更多文档,请访问

对于一个更完整的例子更大的应用程序,请检查 Hugo 。

当您有子命令时,Cobra会自动将help命令添加到应用程序中。当用户运行“应用程序帮助”时,将调用此函数。此外,help还支持所有其他命令作为输入。例如,您有一个名为“create”的命令,没有任何附加配置;调用“app help create”时,Cobra将起作用。每个命令都会自动添加“-help”标志。

以下输出由Cobra自动生成。除了命令和标志定义之外,不需要任何东西。

帮助就像其他命令一样。它周围没有特殊的逻辑或行为。事实上,你可以提供你想提供的。

您可以为默认命令提供自己的帮助命令或模板,以用于以下功能:

当用户提供无效的标志或无效的命令时,Cobra通过向用户显示“用法”来响应。

你可以从上面的帮助中认识到这一点。这是因为默认帮助将用法作为其输出的一部分嵌入。

您可以提供自己的使用函数或模板供Cobra使用。与帮助一样,函数和模板也可以通过公共 *** 重写:

如果在root命令上设置了version字段,Cobra会添加一个顶级的'--version'标志。运行带有“-version”标志的应用程序将使用版本模板将版本打印到标准输出。可以使用cmd.SetVersionTemplate(s string)函数自定义模板。

可以在命令的主运行函数之前或之后运行函数。PersistentPreRun和PreRun函数将在运行之前执行。PersistentPostRun和PostRun将在运行后执行。如果子函数不声明自己的函数,则它们将继承Persistent*Run函数。这些函数按以下顺序运行:

输出:

当发生“未知命令”错误时,Cobra将打印自动建议。这使得Cobra在发生拼写错误时的行为类似于git命令。例如:

基于注册的每个子命令和Levenshtein距离的实现,建议是自动的。匹配最小距离2(忽略大小写)的每个已注册命令都将显示为建议。

如果需要在命令中禁用建议或调整字符串距离,请使用:

or

您还可以使用SuggestFor属性显式设置将为其建议给定命令的名称。这允许对在字符串距离方面不接近的字符串提供建议,但在您的一组命令中是有意义的,并且对于某些您不需要别名的字符串。例子:

Cobra可以基于子命令、标志等生成文档。请在 docs generation文档 中阅读更多关于它的信息。

Cobra可以为以下shell生成shell完成文件:bash、zsh、fish、PowerShell。如果您在命令中添加更多信息,这些补全功能将非常强大和灵活。在 Shell Completions 中阅读更多关于它的信息。

Cobra is released under the Apache 2.0 license. See LICENSE.txt

黑马程序员有没有GO语言的课程啊?

之前没有go语言,现在黑马更新了c/c++的课程,已经增加了go语言开发实战部分,进一步提升学员的竞争力,助力学员找到一个好工作。

0条大神的评论

发表评论