最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang使用gofumpt進行代碼格式化

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

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

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

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

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

更強的格式化:gofumpt

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

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

安裝命令:

$ go install mvdan.cc/gofumpt@latest

執(zhí)行命令:

$ gofumpt -l -w .
main.go

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

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

賦值運算符后無空行

原本由 gofmt 格式化后:

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

改為 gofumpt 格式化后:

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

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

原本由 gofmt 格式化后:

func foo() {

 println("煎魚進腦子了!")

}

改為 gofumpt 格式化后:

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

函數(shù)應分隔 ) { ,縮進有助于提高可讀性

原本由 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("煎魚?。?!")
}

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

原本由 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
}

復合字面量應統(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,
 },
}

空字段列表應使用單行

原本由 gofmt 格式化后:

var V interface {
} = 3

type T struct {
}

func F(
)

改為 gofumpt 格式化后:

var V interface{} = 3

type T struct{}

func F()

標準庫導入必須在頂部單獨分組

原本由 gofmt 格式化后:

import (
 "foo.com/bar"

 "io"

 "io/ioutil"
)

改為 gofumpt 格式化后:

import (
 "io"
 "io/ioutil"

 "foo.com/bar"
)

短 case 子句應占一行

原本由 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 聲明不應使用括號分組

原本由 gofmt 格式化后:

var (
 foo = "煎魚!"
)

改為 gofumpt 格式化后:

var foo = "煎魚!"

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

原本由 gofmt 格式化后:

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

改為 gofumpt 格式化后:

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

簡單的 var 聲明語句應使用短賦值

原本由 gofmt 格式化后:

var s = "煎魚進腦子了"

改為 gofumpt 格式化后:

s := "煎魚進腦子了"

默認啟用 -s 代碼簡化標記。

非 Go 指令的注釋應以空格開頭

原本由 gofmt 格式化后:

//go:noinline

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

改為 gofumpt 格式化后:

//go:noinline

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

VSCode 配置

可以直接在 IDE 中進行配置。例如 VSCode,可以配置對應的 settings.json 為如下:

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

就可以直接在 Go 應用中用起來了。

總結(jié)

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

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

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

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

相關(guān)文章

  • Go?gRPC進階教程gRPC轉(zhuǎn)換HTTP

    Go?gRPC進階教程gRPC轉(zhuǎn)換HTTP

    這篇文章主要為大家介紹了Go?gRPC進階教程gRPC轉(zhuǎn)換HTTP教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • GoFrame框架ORM原生方法對象操作開箱體驗

    GoFrame框架ORM原生方法對象操作開箱體驗

    這篇文章主要為大家介紹了GoFrame框架ORM原生方法對象操作的開箱體驗,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • golang實現(xiàn)瀏覽器導出excel文件功能

    golang實現(xiàn)瀏覽器導出excel文件功能

    這篇文章主要介紹了golang實現(xiàn)瀏覽器導出excel文件功能,文章通過golang導出excel文件返回給web,實現(xiàn)瀏覽器導出excel文件功能,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • go-spew調(diào)試利器詳解

    go-spew調(diào)試利器詳解

    這篇文章主要介紹了調(diào)試利器?go-spew,go-spew?可以以一種非常友好的方式輸出完整的數(shù)據(jù)結(jié)構(gòu)信息,go-spew?支持一些自定義配置,可以通過?spew.Config?修改,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 使用Golang實現(xiàn)流式輸出

    使用Golang實現(xiàn)流式輸出

    這篇文章主要為大家詳細介紹了使用Golang實現(xiàn)流式輸出的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-03-03
  • go?defer避坑指南之拆解延遲語句

    go?defer避坑指南之拆解延遲語句

    這篇文章主要為大家詳細介紹了go?defer避坑指南之如何拆解延遲語句,掌握正確使用方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-11-11
  • Golang中defer與recover的組合使用示例代碼

    Golang中defer與recover的組合使用示例代碼

    Go語言的defer和recover機制為開發(fā)者提供了一種優(yōu)雅處理錯誤的方式,幫助保持程序的穩(wěn)定性和可維護性,這篇文章主要介紹了Golang中defer與recover組合使用的相關(guān)資料,需要的朋友可以參考下
    2025-06-06
  • Go語言類型轉(zhuǎn)換的方式有哪些

    Go語言類型轉(zhuǎn)換的方式有哪些

    本文主要介紹了Go語言類型轉(zhuǎn)換的方式有哪些,類型轉(zhuǎn)換主要有4種,分別為斷言類型轉(zhuǎn)換、顯式類型轉(zhuǎn)換、隱式類型轉(zhuǎn)換、強制類型轉(zhuǎn)換,感興趣的可以了解一下
    2023-11-11
  • Go1.16新特性embed打包靜態(tài)資源文件實現(xiàn)

    Go1.16新特性embed打包靜態(tài)資源文件實現(xiàn)

    這篇文章主要為大家介紹了Go?1.16新特性embed打包靜態(tài)資源文件的實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 手把手教你vscode配置golang開發(fā)環(huán)境的步驟

    手把手教你vscode配置golang開發(fā)環(huán)境的步驟

    這篇文章主要介紹了手把手教你vscode配置golang開發(fā)環(huán)境的步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03

最新評論

酒泉市| 九龙县| 华坪县| 贵阳市| 景东| 晋中市| 冕宁县| 竹溪县| 富民县| 合江县| 浮山县| 山丹县| 延寿县| 政和县| 泰州市| 包头市| 公安县| 伊川县| 交城县| 四平市| 宣城市| 孟州市| 玛曲县| 桂林市| 天水市| 射阳县| 平利县| 天峻县| 崇文区| 白朗县| 江安县| 阳西县| 靖安县| 乌兰察布市| 辽阳县| 武邑县| 古交市| 登封市| 顺义区| 滦平县| 安顺市|