使用-Golang-个库-进行自动化的-20 (使用goldwave软件编辑某音频文件)
简介
Golang(又名Go)是一种静态类型编译型编程语言,因其在并发编程、废品回收和代码可维护性方面的优势而备受推崇。它凭借卓越的性能、强大的并发支持和简洁的语法,已成为自动化任务的热门选择。
Golang自动化库
以下是Golang中用于自动化的20个流行库:
- Go-resty:用于发送HTTP请求的简单HTTP客户端库,支持重试和超时。
- Goquery:提供类似jQuery语法的网络抓取库,用于从网站提取信息。
- Colly:用于网络抓取的高性能框架,支持缓存、速率限制和Cookie处理。
- Gobot:用于机器人学、无人机和物联网设备的框架,提供与各种硬件和软件平台交互的接口。
- Agouti:用于控制网络浏览器的库,支持浏览器自动化任务。
- Terratest:用于测试和验证基础设施代码的库,适用于Terraform、Kubernetes和AWS。
- Testify:用于创建自动化测试的全面测试工具包,提供断言、模拟和测试套件组织。
- GoConvey:基于web的测试和持续集成框架,用于可视化和执行自动化测试。
- Moby:开源项目,提供用于构建和管理容器的Golang库。
- DockerGoSDK:Docker API的官方Golang库,用于自动化管理Docker容器。
- Go-cmp:用于比较复杂数据结构的库,适用于编写自动化测试。
- Go-ethereum:以太坊协议的官方Golang实现,用于构建和自动化区块链应用程序。
- Logrus:用于结构化日志管理的灵活库,提供各种输出格式和动态日志级别配置。
- Cobra:简化命令行应用程序创建的库,提供定义和组织命令的界面。
- Viper:支持多种格式的配置库,用于动态管理应用程序配置。
- KubernetesClient-go:Kubernetes API的官方Golang客户端库,用于自动化与Kubernetes集群交互的任务。
- Genny:用于创建通用和复用Go代码的库,有助于编写自动化脚本和工具。
- Gomail:用于发送电子邮件的简单且轻量的库,适合自动化电子邮件任务。
- Ulid:用于生成唯一标识符的库,适用于分布式系统中的自动化任务。
- sync.Pool:标准库中的一个并发安全池,用于在高并发环境中优化对象的使用,在自动化任务中提高效率。
结论
这些Golang自动化库提供了广泛的工具和功能, giúp lập trình viên tự động hóa nhiều tác vụ khác nhau một cách hiệu quả và dễ dàng. Chọn đúng thư viện cho các nhu cầu cụ thể là rất quan trọng để tận dụng tối đa lợi thế của Golang trong việc tự động hóa quy trình công việc.
【原创】树莓派3B开发Go语言(四)-自写库实现pwm输出
在前一小节中介绍了点亮第一个LED灯,这里我们准备进阶尝试下,输出第一段PWM波形。(PWM也就是脉宽调制,一种可调占空比的技术,得到的效果就是:如果用示波器测量引脚会发现有方波输出,而且高电平、低电平的时间是可调的。)
这里爪爪熊准备写成一个golang的库,并开源到github上,后续更新将直接更新到github中,如果你有兴趣可以和我联系。/dpawsbear/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语言可以做什么
1、服务器编程:以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。
2、分布式系统、数据库代理器、中间件:例如Etcd。
3、网络编程:这一块目前应用最广,包括Web应用、API应用、下载应用,而且Go内置的net/http包基本上把我们平常用到的网络功能都实现了。
4、开发云平台:目前国外很多云平台在采用Go开发,我们所熟知的七牛云、华为云等等都有使用Go进行开发并且开源的成型的产品。
5、区块链:目前有一种说法,技术从业人员把Go语言称作为区块链行业的开发语言。如果大家学习区块链技术的话,就会发现现在有很多很多的区块链的系统和应用都是采用Go进行开发的,比如ehtereum是目前知名度最大的公链,再比如fabric是目前最知名的联盟链,两者都有go语言的版本,且go-ehtereum还是以太坊官方推荐的版本。
自1.0版发布以来,go语言引起了众多开发者的关注,并得到了广泛的应用。go语言简单、高效、并发的特点吸引了许多传统的语言开发人员,其数量也在不断增加。
使用 Go 语言开发的开源项目非常多。早期的 Go 语言开源项目只是通过 Go 语言与传统项目进行C语言库绑定实现,例如 Qt、Sqlite 等。
后期的很多项目都使用 Go 语言进行重新原生实现,这个过程相对于其他语言要简单一些,这也促成了大量使用 Go 语言原生开发项目的出现。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。