14.1 Go语言代码格式、gofmt工具、配置编辑器、命名约定

2024-06-03 10:20

本文主要是介绍14.1 Go语言代码格式、gofmt工具、配置编辑器、命名约定,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. Go语言代码格式

代码格式指的是在语法正确的前提下,源代码的书写和组织风格。比如什么时候缩进,什么时候换行,什么时候加空格,表示块边界的花括号是跟上一行放在一起还是自己独占一行等等。这些看似无关紧要的细节其实问题颇多。

  • 代码格式常常成为程序员之间争论的主题,这些争论往往消耗大量的时间却毫无成效。
  • 在整合遵循不同风格编写的代码时,因格式混乱而导致代码晦涩难懂,甚至引入错误。
  • 阅读与自己的习惯风格迥异的代码,对任何人来说都不是一件轻松的工作,效率降低。

在代码格式方面,Go语言采取了强硬的态度,它为代码格式设置了实用而严格的约定。这些约定虽然并非强制性的,但凭借自动化的方法,最终让全天下的Go语言程序格式统一风格一致,减少了不必要的纷争,提高了工作效率。

  • 在Go语言的世界里没有人会凭借标新立异的代码风格而凌驾于格式约定之上,得不偿失。
// 糟糕的代码格式
package main;import("fmt";"strings");func main(){for i,c:=range strings.ToUpper("hello world"){if i<5{fmt.Printf("%*c%*c\n",i*2+1,c,22-(i*2+1)*2,c)}else{fmt.Printf("%*c%*c\n",22-(i*2+1),c,(i*2+1)*2-22,c)}}} 
// 打印输出:
H                   HE               EL           LL       LO   OW   WO       OR           RL               L
D                   D 

 2. gofmt工具

为了确保按照约定设置代码格式,Go语言提供了代码格式修正工具gofmt。

  • 直接对源文件使用gofmt,将格式修正的结果打印到标准输出。
    • gofmt main.go
  • -d选项(需要系统支持diff命令),显式格式修正前后的差分。
    • gofmt -d main.go
  • -w选项,用格式修正的结果覆盖原始文件
    • gofmt -w main.go

对于格式修正的结果,有些程序员可能一时难以接受,但时间终会抚平一切。

借助格式修正工具,程序员们甚至无需了解有关代码格式的任何约定,仅通过耳濡目染地影响浸润,最终自然而然地屈从于风格约定的各项要求。

// 使用gofmt格式化代码
// 为把代码调整为Go标准格式,可使用gofmt命令:gofmt -w main.go 
package main
import ("fmt""strings"
)func main() {for i, c := range strings.ToUpper("hello world") {if i < 5 {fmt.Printf("%*c%*c\n", i*2+1, c, 22-(i*2+1)*2, c)} else {fmt.Printf("%*c%*c\n", 22-(i*2+1), c, (i*2+1)*2-22, c)}}
}
// 打印输出:
H                   HE               EL           LL       LO   OW   WO       OR           RL               L
D                   D 

3. 配置编辑器

目前主流源代码编辑器都提供支持Go语言开发的第三方插件,可在保存源代码文件的同时,自动运行gofmt进行格式化修正

  • Vim - vim-go
  • Emacs - go.mode.el
  • Sublime - GoSublime
  • Atom - go-plus
  • Eclipse - goclipse
  • Visual Studio Code - vscode-go

 

4. 命名约定

有一种夸张的说法,在计算机科学里最难的两件事是缓存和命名。

好的命名有助于改善程序代码的可读性可维护性。

Go语言的命名约定有些是语法规则强制的,有些则是程序员们约定俗成的。

  • 大写字母开头的标识符是导出标识符,或叫公有标识符,可在包的外部访问,而小写字母开头的标识符则仅限于在包的内部访问,称为私有标识符。
  • 由两个或两个以上的单词组成的名称,建议采用驼峰命名法(首字母小写,私有,非导出),如:familyName,或帕斯卡命名法(首字母大写,公有,导出),如:FamilyName,不建议使用下划线连接多个单词,如:family_name。
  • 变量的声明位置距离使用位置越远,名字越长,反之越短。

Go语言的命名约定有些是语法规则强制的,有些则是程序员们约定俗成的。

  • 函数和方法中的局部变量,名字尽量短小,比如用buf表示buffer,用i表示index,甚至可以用其数据类型的首字母命名,如用b表示bool,用s表示string。
  • 函数和方法的参数及具名返回值,若其类型已具备可描述性,名字同样尽可能短小,如:func AfterFunc(d Duration, f func()) (t *Timer) { ... }// d时间间隔,f函数。
  • 良好的函数和方法名可令其功能不言而喻,如:func (t *Triangle) Area() float64 { ... }。
  • 接口名通常是在动词后面加上"er"后缀构成一个名词,表示"……者"或"……器",如:Reader(读取器)、Writer(写入器)、Parser(解析器)。
  • 从包中导出标识符,在使用时是跟在包名后面的,math.Sqrt要好过math.MathSqrt。
// 命名约定:
// 
// 1. 以大写字母开头的标识符将被导出,而以小写字母开头的不会
// 2. 多单词标识符名,使用骆驼拼写法(首字母小写)或帕斯卡拼写法(首字母大写) 
// 3. 尽量使用能体现数据类型的简短变量名
// 4. 函数和方法的命名要贴切,令其功能不言自明
// 5. 接口名通常采用动词加上“er”后缀的形式
// 6. 从包中被导出的标识符,其命名要尽量避免和包名重叠
package main
import ("fmt" "math" 
)
func main() {f := 2. fmt.Println(math.Sqrt(f))	// 1.4142135623730951 
}

 

这篇关于14.1 Go语言代码格式、gofmt工具、配置编辑器、命名约定的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Debian系和Redhat系防火墙配置方式

《Debian系和Redhat系防火墙配置方式》文章对比了Debian系UFW和Redhat系Firewalld防火墙的安装、启用禁用、端口管理、规则查看及注意事项,强调SSH端口需开放、规则持久化,... 目录Debian系UFW防火墙1. 安装2. 启用与禁用3. 基本命令4. 注意事项5. 示例配置R

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Redis MCP 安装与配置指南

《RedisMCP安装与配置指南》本文将详细介绍如何安装和配置RedisMCP,包括快速启动、源码安装、Docker安装、以及相关的配置参数和环境变量设置,感兴趣的朋友一起看看吧... 目录一、Redis MCP 简介二、安www.chinasem.cn装 Redis MCP 服务2.1 快速启动(推荐)2.

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

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

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

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

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

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Go语言编译环境设置教程

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

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高