swagger 上传文件 参数_05.Go代码风格的唯一标准

2024-02-07 00:59

本文主要是介绍swagger 上传文件 参数_05.Go代码风格的唯一标准,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

gofmt

Go 语言设计的目标之一就是解决大型软件系统的大规模开发的问题,解决大型团队的开发问题,Go 核心团队给它起了一个名字叫:规模化(scale)。

gofmt 是伴随着 Go 语言诞生的第一批在“规模化”这个目标上的实践和尝试。gofmt 将统一的代码风格内化到 Go 语言之中,并和 Go 语言一起推广给所有 Go 开发者。在一致的代码风格下,Go 开发人员阅读和维护他人代码时,效率大幅。gofmt 代码风格已经成为 Go 开发者的一种共识。如果你是Go 开发人员,提交代码前使用 gofmt 格式化你的 Go 源码。

使用 gofmt

Go 1.14 之后,gofmt 工具是放在 Go 安装包中与 Go 编译器工具一并发布的,这足以说明 gofmt 工具的重要程度,gofmt 保持了 Go 语言“简单”的设计哲学,这点通过其帮助手册即可看得出来:gofmt -help

usage: gofmt [flags] [path ...]

-cpuprofile string

write cpu profile to this file

-d display diffs instead of rewriting files

-e report all errors (not just the first 10 on different lines)

-l list files whose formatting differs from gofmt's

-r string

rewrite rule (e.g., 'a[b:len(a)] -> a[b:]')

-s simplify code

-w write

一 使用 gofmt -s 简化你的代码

在 gofmt 中提供了-s 选项,通过 gofmt -s 可以自动将遗留代码中的非简化代码自动转换为简化写法,并且没有副作用,因此一般“-s”选项都会是 gofmt 执行的默认选项。

二 使用 gofmt -r 执行代码“迭代更新”

代码更新迭代和重构是软件工程过程中的日常操作-r string

rewrite rule (e.g., 'a[b:len(a)] -> a[b:]’)

gofmt -r 的原理就是在对源码进行重新格式化之前,搜索源码是否有可以匹配 pattern 的表达式,如果有,将所有匹配到的结果替换为 replacement 表达式。gofmt 要求 pattern 和 replacement 都是合法的 Go 表达式。比如:gofmt -r ‘p[6:len(a)] -> p[6:]' -w person.go

上面 gofmt -r 命令执行的意图就是将源码文件 person.go 中能与 p[6:len(a)] 匹配的代码替换为 p[6:],然后再做重新格式化。

注意:上述命令中的 p 并不是一个具体的字符,而是代表的一个通配符。出现在‘pattern -> replacement’的小写字母都会被视为通配符。因此上面的命令对下面的源码片段都可以成功匹配:- fmt.Println(b[6:len(b)])

+ fmt.Println(b[6:])

- v, err := s.r.Read(b.buf[6:len(b.buf)])

+ v, err := s.r.Read(b.buf[b.end:])

- foods = append(foods, persons[6:len(persons)])

+ foods = append(foods, persons[6:])

三 使用 gofmt -l 按格式要求输出文件列表

gofmt 提供了-l 选项,可以按格式要求输出满足条件的文件列表。gofmt -l ~/go/src/github.com/

/Users/xxx/go/src/github.com/EDDYCJY/go-gin-example/main.go

/Users/xxx/go/src/github.com/EDDYCJY/go-gin-example/pkg/util/util.go

/Users/xxx/go/src/github.com/EDDYCJY/go-gin-example/vendor/github.com/360EntSecGroup-Skylar/excelize/styles.go

/Users/xxx/go/src/github.com/EDDYCJY/go-gin-example/vendor/github.com/Unknwon/com/math.go

/Users/xxx/go/src/github.com/EDDYCJY/go-gin-example/vendor/github.com/fvbock/endless/endless.go

/Users/xxx/go/src/github.com/EDDYCJY/go-gin-example/vendor/github.com/go-openapi/spec/bindata.go

/Users/xxx/go/src/github.com/EDDYCJY/go-gin-example/vendor/github.com/modern-go/concurrent/log.go

/Users/xxx/go/src/github.com/EDDYCJY/go-gin-example/vendor/github.com/modern-go/concurrent/unbounded_executor.go

/Users/xxx/go/src/github.com/EDDYCJY/go-gin-example/vendor/github.com/modern-go/reflect2/reflect2.go

以上命令并不是只能单独使用,我们也可以将他们组合起来使用。注:如果某路径下有很多不符合 gofmt 格式的文件,这些文件也有可能会被一并输出。

3. 使用 go-imports

Go 编译器在编译源码时会对源码文件 import 的 package 进行检查:

1 源文件中没有使用但却导入了的 package

2 使用了但没有导入的包

以上两种情况Go 编译器会报错。

那么有没有办法解决呢? 于是,goimports闪亮登场了,goimports 在 gofmt 的功能的基础上,增加了对 package 列表的维护功能,可根据源码的最新变动自动从导入包列表中增删包。安装 goimports 的方法很简单:go get golang.org/x/tools/cmd/goimports

如果 go 编译器在$GOPATH/bin 路径里,就会将 goimports 可执行文件放入该路径下,应该保证该路径在$PATH 中即可。goimports 可以理解为 gofmt 上又封装了一层,并且 goimports 的命令行选项和参数与 gofmt 也十分类似:usage: goimports [flags] [path ...]

-cpuprofile string

CPU profile output

-d display diffs instead of rewriting files

-e report all errors (not just the first 10 on different lines)

-format-only

if true, don't fix imports and only format. In this mode, goimports is effectively gofmt, with the addition that imports are grouped into sections.

-l list files whose formatting differs from goimport's

-local string

put imports beginning with this string after 3rd-party packages; comma-separated list

-memprofile string

memory profile output

-memrate int

if > 0, sets runtime.MemProfileRate

-srcdir dir

choose imports as if source code is from dir. When operating on a single file, dir may instead be the complete file name.

-trace string

trace profile output

-v verbose logging

-w write result to (source) file instead of stdout

4. 将 gofmt/goimports 与编辑器工具集成

日常Go 开发人员多使用各种主流编辑器进行代码的编写、测试和重构工作,对代码的格式化一般是通过将 gofmt/goimports 与编辑器集成后在源文件保存时由编辑器自动调用 gofmt/goimports 完成的,几乎不需要手工敲入 gofmt 命令对源码进行格式化的。

goland是目前主流的Go语言开发工具,以此为例子,如下图所示:

06127a2f8a154c57f3e8e281d6bacaf4.png

70cefc6a540d66782f5b013a9d2f088f.png

有疑问加站长微信联系(非本文作者)

5c5fbae790ec0313d6ee17e8b3dd9ba1.png

这篇关于swagger 上传文件 参数_05.Go代码风格的唯一标准的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/686068

相关文章

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

go中的时间处理过程

《go中的时间处理过程》:本文主要介绍go中的时间处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 获取当前时间2 获取当前时间戳3 获取当前时间的字符串格式4 相互转化4.1 时间戳转时间字符串 (int64 > string)4.2 时间字符串转时间