当前位置: 首页 > news >正文

【golang学习笔记】——(五)Go格式化统一代码风格

        我们在入职一家新公司的时候,除了要学习公司的流程规范和规章制度,还会做的一件事情就是进行公司编码规范的学习,基于google的C++规范下,做了各自的发散和规范,久而久之就是包罗万象的样子,疲于应付各种规范约束,但是代码的规范统一是有必要的,至少从代码的可读性和干净度上是让人舒适的,否则会很头大。go语言为了能减少因为代码风格不统一而专门制作了一个开发工具gofmt,这个工具可以将开发的源码格式化成符合官方制定的统一代码风格。对于go的开发者来说,每次提交开发的源码之前进行一次格式化是一个好的开发习惯。如果接收一个已经开发中或者开发完成的项目,晦涩难读的代码让你很难到达高效的熟悉代码和业务,那先进行gofmt会是一个很好的解决办法。

1、gofmt参数

usage: gofmt [flags] [path ...]
  -cpuprofile stringwrite 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 result to (source) file instead of stdout

-cpuprofile :将CPU配置文件写入该文件

-d:只把改写前后内容的对比信息作为结果打印到标准输出。而不是把改写后的全部内容都打印到标准输出。

-e: 打印所有的语法错误到标准输出。如果不使用此标记,则只会打印每行的第 1 个错误且只打印前 10 个错误。

-l:仅把那些不符合格式化规范的、需要被命令程序改写的源码文件的绝对路径打印到标准输出。而不是把改写后的全部内容都打印到标准输出。

-r:添加形如“a[b:len(a)] -> a[b:]”的重写规则。如果我们需要自定义某些额外的格式化规则,就需要用到它。

-s:简化文件中的代码。

-w:把改写后的内容直接写入到文件中,而不是作为结果打印到标准输出。

2、gofmt的使用

2.1 对文件的格式化

将文件进行格式化后写入到文件

gofmt -w test.go

同时该命名还支持模糊匹配,

gofmt -w *.go

将当前目录下所有的.go源文件进行格式化并写入文件。

但是要注意,gofmt只能帮助让合法的代码规范化,并不能解决在编码中的错误语法。

例如有如下代码:

package main
import "fmt"
func main()
{
fmt.Println("hello word!")
}

L4行的'{'按照编码规范要求必须放到L3行的main函数声明后,但是当前的编码是错误的,如果执行gofmt命令进行格式化,则会报错:

C:\project\hello.go:6:1: unexpected semicolon or newline before {

对目录的格式化:

对goproject目录下包含其子目录下所有的.go源文件进行格式化并重写

gofmt goproject

重写规则的使用:

例如有如下代码:

package mainimport "fmt"func main() {a := 1b := 2c := a + bfmt.Println(c)}

执行-r重写规则

gofmt -w -r "a + b -> b + a" test.go

gofmt  -r "a + b -> b + a"  -w test.go

则代码会变成

package mainimport "fmt"func main() {a := 1b := 2c := b + afmt.Println(c)}

这里需要注意gofmt的参数执行是有规则的,不能是只把需要的参数直接在后面累加输入就可以正确执行的,如果输入为:

gofmt -r -w "a + b -> b + a" test.go

会报如下错误:

rewrite rule must be of the form 'pattern -> replacement'

且要注意gofmt 使用 tab 来表示缩进,对行的长度无限制,如果手动对代码进行了换行,gofmt 不会强制把代码格式化回一行,保持原来手动换行的现状,

例如手动换行如下代码为:

fmt.Println("hello word!")

换行为:

fmt.Println

("hello word!")

执行格式化后任然是:

fmt.Println

("hello word!")

相关文章:

【golang学习笔记】——(五)Go格式化统一代码风格

我们在入职一家新公司的时候,除了要学习公司的流程规范和规章制度,还会做的一件事情就是进行公司编码规范的学习,基于google的C规范下,做了各自的发散和规范,久而久之就是包罗万象的样子,疲于应付各种规范约…...

CAD转SHP最好的方法 赶快收藏起来吧

1、利用 ArcToolsbox 工具先将 DWG 文件转为 MDB 通过 CASS 软件生成的 DWG 文件,字段中包含有很多属性内容,所以我们先将 DWG 格式 的文件转换为 MDB 格式,再通过 MDB 转换为 SHP 格式数据进行整理。具体步骤如下: 通过 ArcTool…...

PyQt PyQt5 Python VTK Gui Actor 选中 高亮显示 actor

前言: 本文主要介绍了如何使用Python VTK高亮显示actor,使用Python语言,高亮显示选中的actor。当窗口中的圆球actor被选中时,会变成红色,并且会显示actor三遍面片边缘信息。 效果: VTK VTK,&…...

TCP和UDP通信对比

tcp通信流程 服务器: 创建流式套接字 绑定 监听 提取 读写 关闭 客户端: 创建流式套接字 连接 读写 关闭 收发数据: read recv ssize_t recv(int sockfd, void *buf, size_t len, int flags); //flagsMSG_PEEK 读数据不会删除缓冲区的数据 write send ssize_t send(int…...

SpringCloud:ElasticSearch之自动补全

当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项,如图: 这种根据用户输入的字母,提示完整词条的功能,就是自动补全了。 因为需要根据拼音字母来推断,因此要用到拼音分词功能。 1.拼音分词器…...

TOOM解析如何搭建一套适合自己的舆情监测系统?完整的实战指南

随着互联网的普及和社交媒体的盛行,人们在网络上的活动越来越多,同时也涌现出大量的信息和舆情。这些信息和舆情在一定程度上会影响社会和个人的发展和进步。因此,舆情监测逐渐成为一项重要的任务。在本篇文章中,我们将为大家介绍…...

技术分享 | OceanBase 手滑误删了数据文件怎么办

作者:张乾 外星人2号,现兼任六位喵星人的资深铲屎官。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 手滑误删了数据文件,并且没有可替换的节点时&…...

windows上Git Bash支持常用命令gcc tree zip wget cmake ninja

windows上Git Bash支持常用命令gcc tree zip wget cmake ninja 前言 Git Bash基于MinGW64, 提供了win32下的linux命令环境,如ls、cat、tar等。 但是Git Bash还是缺少一些命令,如gcc、make、tree、zip、wget、cmake、ninja等 1. Git Bash支持其他命令…...

面试题30天打卡-day10

1、String 和 StringBuffer、StringBuilder 的区别是什么? String、StringBuffer、StringBuilder主要的区别在于执行效率和线程安全上。 String:String字符串常量,意味着它是不可变的,导致每次对String都会生成新的String对象&a…...

【python】制作一个简单的界面,有手就行的界面~

目录 前言准备工作试手小案例开始我们今天的案例教学尾语 💝 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! ttkbootstrap 是一个基于 tkinter 的界面美化库, 使用这个工具可以开发出类似前端 bootstrap 风格的 tkinter 桌面程序。 ttkbootstrap …...

基于RK3568的Linux驱动开发—— GPIO知识点(二)

authordaisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主系列基于RK3568的Linux驱动开发——GPIO知识点(一)_daisy.skye的博客-CSDN博客 查看goio使用情况 cat /sys/kernel/debug/gpio 1|rk3568_r:# cat /sys/kernel/debug/gpio gpiochip0: GPIOs 0-3…...

item_get-获得aliexpress商品详情API的调用参数说明

item_get-获得aliexpress商品详情 aliexpress.item_get 公共参数 名称类型必须描述keyString是调用key(免)(测)(试)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中&…...

【Python_Scrapy学习笔记(三)】Scrapy框架之全局配置文件settings.py详解

Scrapy框架之全局配置文件settings.py详解 前言 settings.py 文件是 Scrapy框架下,用来进行全局配置的设置文件,可以进行 User-Agent 、请求头、最大并发数等的设置,本文中介绍 settings.py 文件下的一些常用配置 正文 1、爬虫的项目目录…...

spark读写时序数据库 TDengine 错误总结

最近在用spark读取、写入TDengine 数据库遇到了这样一个问题: JDBCDriver找不到动态链接库(no taos in java.library.path) 我本地都好好的,但是一上服务器写入就会报这个错误,看了很久没有排查出问题,后…...

Web中间件常见漏洞

一、IIS中间组件 1、PUT漏洞 原理:IIS开启了WebDAV,配置了可以写入的权限,造成了任意文件上传漏洞。 防御:关闭webDAV;关闭写入权限 2、短文件名猜解 原理: IIS的短文件名机制,可以暴力破解…...

Python Web 深度学习实用指南:第三部分

原文:Hands-On Python Deep Learning for the Web 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关…...

C#基础学习--预处理指令

目录 什么是预处理指令 基本规则 #define 和 #undef 指令 条件编译 条件编译结构 诊断指令 行号指令 ​编辑 区域指令 #pragam warning 指令 什么是预处理指令 源代码指定了程序的定义,预处理指令指示编译器如何处理源代码 基本规则 #define 和 #undef 指令…...

Spring Boot 接口加解密

1. 介绍 在我们日常的Java开发中,免不了和其他系统的业务交互,或者微服务之间的接口调用 如果我们想保证数据传输的安全,对接口出参加密,入参解密。 但是不想写重复代码,我们可以提供一个通用starter,提…...

大公司为什么禁止SpringBoot项目使用Tomcat?

前言 在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。同时,SpringBoot也支持Undertow容器,我们可以很方便的用Undertow替换Tomcat,而Undertow的性能和内…...

2023年第十三届MathorCup高校数学建模挑战赛|A题|量子计算机在信用评分卡组合优化中的应用

目录 题目详情 最终收入 贷款利息收入 - 坏账损失 赛题说明 1:流程简化及示例 赛题说明 2:QUBO 模型简介 赛题说明 3:赛题数据 问题​ 题目详情 在银行信用卡或相关的贷款等业务中,对客户授信之前,需…...

【Matlab】MATLAB教程:图形属性修改(案例:set(h,‘Color‘,‘red‘),应用:自定义图形样式)

MATLAB教程:图形属性修改(案例:set(h,Color,red),应用:自定义图形样式) 在MATLAB数据可视化、实验报告绘图、工程结果展示等场景中,默认绘制的图形往往难以满足个性化需求和规范要求。无论是调整线条颜色、粗细,还是优化坐标轴、图例样式,核心目标都是通过图形属性修…...

RWKV7-1.5B-g1a部署教程:CSDN平台外网域名(gpu-guyeohq1so-7860)配置要点

RWKV7-1.5B-g1a部署教程:CSDN平台外网域名(gpu-guyeohq1so-7860)配置要点 1. 模型简介 rwkv7-1.5B-g1a是基于RWKV-7架构的多语言文本生成模型,特别适合以下应用场景: 基础问答文案续写简短总结轻量中文对话 2. 环境…...

基于LSTM与SmolVLA的时序多模态数据分析

基于LSTM与SmolVLA的时序多模态数据分析 想象一下,你面前有一段监控视频,画面里有人正在行走、停留、再行走。如果只看其中一帧,你只能知道“这里有个人”;但如果把连续几帧连起来看,你就能判断出“这个人正在从A点走…...

5分钟快速修复Windows更新故障:Reset Windows Update Tool完全指南

5分钟快速修复Windows更新故障:Reset Windows Update Tool完全指南 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool …...

解码器精准调优:LoRA赋能Depth-Anything-V2实现绝对深度估计

1. LoRA技术如何革新Depth-Anything-V2的深度估计 当我在实验室第一次尝试用LoRA微调Depth-Anything-V2时,意外发现只需要调整解码器中1x1卷积层的极少量参数,就能让相对深度模型输出精确的绝对深度值。这就像给一个只会判断"远近"的模型突然装…...

Scrcpy:重新定义安卓设备跨平台交互体验

Scrcpy:重新定义安卓设备跨平台交互体验 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/gh_mirrors/sc/scrcpy 一、跨设备交互的现实困境:发现问题本质 在数字化办公与移动开发的日常场景中&a…...

B站视频字幕抓取实战:Tampermonkey搭配GreasyFork脚本,5分钟搞定CC字幕导出

B站视频字幕高效提取指南:Tampermonkey与GreasyFork脚本深度应用 每次观看B站优质内容时,那些精心制作的字幕是否让你想保存下来反复学习?传统录屏或手动抄写效率低下,而专业工具又过于复杂。本文将带你探索浏览器脚本的魔法世界&…...

Unity 6升级后频繁闪退?别慌,这8个D3D11崩溃的修复方法亲测有效

Unity 6升级后D3D11崩溃全攻略:从快速修复到深度优化 刚升级到Unity 6的开发者们,是否正被突如其来的编辑器崩溃搞得焦头烂额?那些令人抓狂的"D3D11设备丢失"弹窗,不仅打断工作流,还可能让宝贵项目进度陷入停…...

springboot+vue基于web的电脑配件商城的设计系统

目录 同行可拿货,招校园代理 ,本人源头供货商系统功能模块划分技术架构设计要点特色功能实现路径安全防护措施扩展性考虑 项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 同行可拿货,招校园代理 ,本人源头供货商 系统功能模块…...

告别osgQt!用osgQOpenGLWidget在Qt6中轻松加载OsgEarth三维地球(附完整代码)

现代Qt6与OsgEarth集成实战:osgQOpenGLWidget替代方案详解 如果你正在使用Qt6开发三维地理可视化应用,却苦于找不到合适的OpenSceneGraph(OSG)集成方案,这篇文章将为你提供一条清晰的迁移路径。随着Qt和OSG版本的迭代,传统的osgQt…...