欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang使用gofumpt進(jìn)行代碼格式化

 更新時間:2024年02月19日 10:26:39   作者:腦子進(jìn)煎魚了  
這篇文章主要為大家詳細(xì)介紹了Golang如何使用gofumpt進(jìn)行代碼格式化,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

我們從一開始寫 Go 代碼和應(yīng)用,就會被各種官方和民間教程,甚至 IDE 教導(dǎo)我們必須配一個 gofmt 工具。他能夠格式化 Go 程序的代碼。會使用制表符表示縮進(jìn),空白表示對齊。

這解決了程序員屆的老大難問題之一,代碼格式上的規(guī)范問題。有效的提高了 Go 代碼的閱讀的友好度和減少了同事間的 ****。非常值得認(rèn)可。

但有時候,還是會看到一些糟心的代碼,總會覺得 gofmt,還是格式化的不夠。

今天給大家分享我發(fā)現(xiàn)的一個更狠的工具:gofumpt,例子主要基于官方文檔。

更強(qiáng)的格式化:gofumpt

Gofumpt 會執(zhí)行比 gofmt 更嚴(yán)格的 Go 格式規(guī)范。同時確保向后兼容。

該工具是 Go 1.21 的 gofmt 分支,需要 Go 1.20 或更高版本。它可以直接替代現(xiàn)有的 Go 代碼格式化,也就是在 gofumpt 之后運(yùn)行 gofmt 不會產(chǎn)生任何新的變化。

安裝命令:

$ go install mvdan.cc/gofumpt@latest

執(zhí)行命令:

$ gofumpt -l -w .
main.go

再查看對應(yīng)被格式化的文件就已經(jīng)生效了。

以下是一些更具體的 gofmt 和 gofumpt 的區(qū)別例子。能夠很好的幫助大家識別其中的差異。

賦值運(yùn)算符后無空行

原本由 gofmt 格式化后:

func foo() string {
 foo :=
  "腦子進(jìn)煎魚了!"
 return foo
}

改為 gofumpt 格式化后:

func foo() string {
 foo := "腦子進(jìn)煎魚了!"
 return foo
}

函數(shù)體周圍無空行

原本由 gofmt 格式化后:

func foo() {

 println("煎魚進(jìn)腦子了!")

}

改為 gofumpt 格式化后:

func foo() {
 println("煎魚進(jìn)腦子了!")
}

函數(shù)應(yīng)分隔 ) { ,縮進(jìn)有助于提高可讀性

原本由 gofmt 格式化后:

func foo(s string,
 i int) {
 println("煎魚?。?!")
}

// 使用空行會稍微好一些,但仍然不夠好
func bar(s string,
 i int) {

 println("煎魚!??!")
}

改為 gofumpt 格式化后:

func foo(s string,
 i int,
) {
 println("煎魚?。?!")
}

func bar(s string,
 i int,
) {
 println("煎魚?。?!")
}

代碼塊中的單獨(dú)語句(或注釋)周圍沒有空行

原本由 gofmt 格式化后:

if err != nil {

 return err
}

改為 gofumpt 格式化后:

if err != nil {
 return err
}

簡單錯誤檢查前無空行

原本由 gofmt 格式化后:

foo, err := processFoo()

if err != nil {
 return err
}

改為 gofumpt 格式化后:

foo, err := processFoo()
if err != nil {
 return err
}

復(fù)合字面量應(yīng)統(tǒng)一使用換行符

原本由 gofmt 格式化后:

var ints = []int{1, 2,
 3, 4}

var matrix = [][]int{
 {1},
 {2}, {
  3,
 },
}

改為 gofumpt 格式化后:

var ints = []int{
 1, 2,
 3, 4,
}

var matrix = [][]int{
 {1},
 {2},
 {
  3,
 },
}

空字段列表應(yīng)使用單行

原本由 gofmt 格式化后:

var V interface {
} = 3

type T struct {
}

func F(
)

改為 gofumpt 格式化后:

var V interface{} = 3

type T struct{}

func F()

標(biāo)準(zhǔn)庫導(dǎo)入必須在頂部單獨(dú)分組

原本由 gofmt 格式化后:

import (
 "foo.com/bar"

 "io"

 "io/ioutil"
)

改為 gofumpt 格式化后:

import (
 "io"
 "io/ioutil"

 "foo.com/bar"
)

短 case 子句應(yīng)占一行

原本由 gofmt 格式化后:

switch c {
case 'a', 'b',
 'c', 'd':
}

改為 gofumpt 格式化后:

switch c {
case 'a', 'b', 'c', 'd':
}

多行頂層聲明必須用空行隔開

原本由 gofmt 格式化后:

func foo() {
 println("煎魚!")
}
func bar() {
 println("煎魚!")
}

改為 gofumpt 格式化后:

func foo() {
 println("煎魚!")
}

func bar() {
 println("煎魚!")
}

單個 var 聲明不應(yīng)使用括號分組

原本由 gofmt 格式化后:

var (
 foo = "煎魚!"
)

改為 gofumpt 格式化后:

var foo = "煎魚!"

連續(xù)的頂層聲明應(yīng)歸為一組

原本由 gofmt 格式化后:

var nicer = "x"
var with = "y"
var alignment = "z"

改為 gofumpt 格式化后:

var (
 nicer     = "x"
 with      = "y"
 alignment = "z"
)

簡單的 var 聲明語句應(yīng)使用短賦值

原本由 gofmt 格式化后:

var s = "煎魚進(jìn)腦子了"

改為 gofumpt 格式化后:

s := "煎魚進(jìn)腦子了"

默認(rèn)啟用 -s 代碼簡化標(biāo)記。

非 Go 指令的注釋應(yīng)以空格開頭

原本由 gofmt 格式化后:

//go:noinline

//Foo is awesome.
func Foo() {}

改為 gofumpt 格式化后:

//go:noinline

// Foo is awesome.
func Foo() {}

VSCode 配置

可以直接在 IDE 中進(jìn)行配置。例如 VSCode,可以配置對應(yīng)的 settings.json 為如下:

{
    "go.useLanguageServer": true,
    "gopls": {
        "formatting.gofumpt": true,
    },
}

就可以直接在 Go 應(yīng)用中用起來了。

總結(jié)

之前我有一個朋友,接手了一個老項目。那位同學(xué),幾乎沒有什么代碼規(guī)范的風(fēng)格。全靠 gofmt 來幫他格式化。

但你們也看到,gofmt 只做了最基本的。這種時候如果有更嚴(yán)格的 Go 代碼格式化工具 gofumpt 是非常不錯的。(也需要引導(dǎo)這位同學(xué),但容易撕逼)

像是前面提到的 “多行頂層聲明必須用空行隔開” 是非常有價值的。我是真的見過一大坨不加空行都擠一起的。看起來非常難受。

到此這篇關(guān)于Golang使用gofumpt進(jìn)行代碼格式化的文章就介紹到這了,更多相關(guān)Go gofumpt格式化代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang中為什么Response.Body需要被關(guān)閉詳解

    golang中為什么Response.Body需要被關(guān)閉詳解

    這篇文章主要給大家介紹了關(guān)于golang中為什么Response.Body需要被關(guān)閉的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • go語言中decimal的用法詳解

    go語言中decimal的用法詳解

    本文主要介紹了go語言中decimal的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Minio基本介紹及如何搭建Minio集群

    Minio基本介紹及如何搭建Minio集群

    MinIO主要采用Golang語言實(shí)現(xiàn),客戶端與存儲服務(wù)器之間采用http/https通信協(xié)議,本文重點(diǎn)給大家介紹什么是Minio?如何搭建Minio集群?感興趣的朋友一起看看吧
    2022-06-06
  • Go構(gòu)建高性能的事件管理器實(shí)例詳解

    Go構(gòu)建高性能的事件管理器實(shí)例詳解

    這篇文章主要為大家介紹了Go構(gòu)建高性能的事件管理器實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 一步步教你打造高效可靠的Go庫

    一步步教你打造高效可靠的Go庫

    這篇文章主要介紹了一步步教你打造高效可靠的Go庫的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • golang如何部署到服務(wù)器及應(yīng)注意問題解析

    golang如何部署到服務(wù)器及應(yīng)注意問題解析

    這篇文章主要為大家介紹了golang如何部署到服務(wù)器及應(yīng)注意問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • golang 如何實(shí)現(xiàn)HTTP代理和反向代理

    golang 如何實(shí)現(xiàn)HTTP代理和反向代理

    這篇文章主要介紹了golang 實(shí)現(xiàn)HTTP代理和反向代理的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Golang中println和fmt.Println區(qū)別解析

    Golang中println和fmt.Println區(qū)別解析

    Golang 中打印數(shù)據(jù)通常使用 fmt.Println() 方法,也可以使用內(nèi)置的 println() 方法。這兩個方法大家可能都使用過,它們的區(qū)別是什么呢?本文給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧
    2023-03-03
  • 詳解Go語言中Goroutine退出機(jī)制的原理及使用

    詳解Go語言中Goroutine退出機(jī)制的原理及使用

    goroutine是Go語言提供的語言級別的輕量級線程,在我們需要使用并發(fā)時,我們只需要通過?go?關(guān)鍵字來開啟?goroutine?即可。本文就來詳細(xì)講講Goroutine退出機(jī)制的原理及使用,感興趣的可以了解一下
    2022-07-07
  • Go?mod?replace使用方法及常見問題分析

    Go?mod?replace使用方法及常見問題分析

    這篇文章主要為大家介紹了Go?mod?replace使用方法及常見問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評論