Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah fungsi arahan go fmt

Apakah fungsi arahan go fmt

青灯夜游
青灯夜游asal
2023-01-28 11:42:371734semak imbas

Dalam bahasa go, arahan "go fmt" digunakan terutamanya untuk membantu pembangun memformat fail kod yang telah mereka tulis. Perintah "go fmt" akan memformatkan kod semua fail kod sumber bahasa Go dalam pakej kod yang ditentukan mengikut spesifikasi kod bahasa Go semua fail kod sumber bahasa termasuk fail kod sumber arahan, fail kod sumber perpustakaan dan kod sumber ujian fail. Perintah "go fmt" hanya akan memformat fail kod sumber bahasa Go yang disimpan terus dalam direktori yang sepadan dengan pakej kod yang ditentukan.

Apakah fungsi arahan go fmt

Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.

Pengenalan kepada arahan go fmt

Untuk bahasa pengaturcaraan, pemformatan kod ialah isu yang paling kontroversi Pembangun Berbeza mungkin mempunyai gaya pengekodan yang berbeza dan tabiat, tetapi jika semua pembangun boleh menulis kod dalam format yang sama, pembangun boleh memberi tumpuan kepada masalah yang cuba diselesaikan oleh bahasa, menjimatkan masa pembangunan.

Pasukan pembangunan bahasa Go telah merumuskan gaya kod rasmi bersatu dan melancarkan alat gofmt (gofmt atau go fmt) untuk membantu pembangun memformat kod mereka ke dalam gaya bersatu.

gofmt ialah program cli yang membaca input standard terlebih dahulu. Jika laluan fail dihantar, fail akan diformatkan jika direktori dihantar, semua fail .go dalam direktori Jika tiada parameter diluluskan, semua fail .go dalam direktori semasa akan diformatkan.

Terdapat juga perintah go fmt dalam bahasa Go. Perintah go fmt ialah enkapsulasi mudah gofmt.

Apakah fungsi arahan go fmt

Arahan go fmt digunakan terutamanya untuk membantu anda memformat fail kod yang telah anda tulis [Banyak perisian integrasi pihak ketiga menggunakan go fmt Command】

Gunakan:

go fmt <文件名>.go

Gunakan arahan go fmt, lebih kerap gofmt digunakan dan parameter -w diperlukan, jika tidak, hasil pemformatan tidak akan ditulis Import fail. gofmt -w src, anda boleh memformat keseluruhan projek.

Pengenalan parameter

  • -l memaparkan fail yang perlu diformat

  • -w Kandungan yang ditulis semula ditulis terus ke fail dan bukannya dicetak ke output standard sebagai hasilnya.

  • -r Tambah peraturan tulis semula dalam bentuk "a[b:len(a)] -> a[b:]" untuk memudahkan penggantian kelompok

  • -s Permudahkan kod dalam fail

  • -d Paparkan perbezaan sebelum dan selepas memformat dan bukannya menulis fail, lalainya adalah palsu

  • -e Cetak semua ralat sintaks ke output standard. Jika anda tidak menggunakan teg ini, hanya 10 ralat pertama pada baris yang berbeza akan dicetak.

  • -cpuprofile menyokong mod nyahpepijat dan menulis cpufile yang sepadan dengan skop fail yang ditentukan

go fmt and gofmt

Perintah go fmt akan memformatkan kod semua fail kod sumber bahasa Go dalam pakej kod yang ditentukan mengikut spesifikasi kod bahasa Go semua fail kod sumber bahasa termasuk fail kod sumber arahan dan kod sumber perpustakaan dan fail kod sumber ujian. Ambil perhatian bahawa apabila pakej kod juga mempunyai pakej subkod, fail kod sumber bahasa Go dalam pakej subkod tidak disertakan. Dalam erti kata lain, arahan go fmt hanya akan memformat fail kod sumber bahasa Go yang disimpan terus dalam direktori yang sepadan dengan pakej kod yang ditentukan.

Sama seperti hubungan antara perintah go doc dan perintah godoc, perintah go fmt ialah enkapsulasi ringkas bagi perintah gofmt. Perintah go fmt itu sendiri boleh menerima dua tag. Bendera -n membenarkan program arahan hanya mencetak arahan gofmt yang digunakan secara dalaman dan bendera serta hujahnya tanpa benar-benar melaksanakannya. Bendera -x akan menyebabkan program arahan mencetak dan melaksanakan arahan. Di dalam program arahan go fmt, penanda -l dan -w akan ditambah selepas arahan gofmt yang dipanggilnya dan laluan ke semua fail sumber bahasa Go dalam pakej kod yang ditentukan akan digunakan sebagai parameter, seperti ini:

hc@ubt:~$ go fmt -n pkgtool
gofmt -l -w golang/goc2p/src/pkgtool/envir.go golang/goc2p/src pkgtoolenvir_test.go golang/goc2p/src/pkgtool/fpath.go golang/goc2p/src/pkgtool ipath.go golang/goc2p/src/pkgtool/pnode.go golang/goc2p/src/pkgtool/util.go golang/goc2p/src/pkgtool/util_test.go

Perhatikan bahawa laluan ke fail kod sumber bahasa Go sebagai parameter perintah gofmt adalah relatif, bukan mutlak. Tetapi ini hanya untuk menjadikan parameter kelihatan lebih pendek. Oleh itu, apabila kami melaksanakan arahan gofmt secara langsung, tiada masalah untuk menggunakan laluan mutlak fail kod sumber sebagai parameter. Malah, laluan relatif atau laluan mutlak mana-mana fail kod sumber Go atau direktori yang mengandungi fail kod sumber bahasa Go boleh digunakan sebagai parameter perintah gofmt. Apabila menggunakan laluan mutlak atau laluan relatif bagi direktori yang mengandungi fail kod sumber bahasa Go sebagai parameter, arahan gofmt akan menggunakan fail kod sumber bahasa Go dalam direktori ini sebagai fail kod sumber sasaran.

Tanda yang ditambahkan di dalam program arahan go fmt apabila melaksanakan arahan gofmt dibetulkan. Jika kita ingin menggunakan set tag yang berbeza, kita mesti menggunakan arahan gofmt secara langsung. Sekarang mari kita lihat semua teg yang diterima oleh arahan gofmt. Seperti yang ditunjukkan dalam jadual di bawah.

Jadual 0-13 Perihalan teg perintah gofmt

标记名称 标记描述
-cpuprofile 把CPU概要写入指定文件。文件的路径应该作为此标记的值。
-d 显示格式化前后的不同(如果有的话),而不是直接格式化那些代码。
-e 报告目标源码文件中的所有错误。默认情况下,仅会显示前10个错误。
-l 仅把那些不符合格式化规范的、需要被命令程序改写的源码文件的绝对路径打印到标准输出。而不是把改写后的全部内容都打印到标准输出。
-r 添加形如“a[b:len(a)] -> a[b:]”的重写规则。如果我们需要自定义某些额外的格式化规则,就需要用到它。规则字符串应该作为此标记的值。
-s 简化文件中的代码。
-w 把改写后的内容直接写入到文件中,而不是作为结果打印到标准输出。

Selepas membaca maklumat dalam jadual di atas, kita boleh memahami dengan mudah kelakuan arahan go fmt. Kerana ia melaksanakan perintah gofmt secara dalaman dan menambah bendera -l dan -w. Ini akan menyebabkan program arahan mencetak laluan mutlak ke fail yang perlu ditulis semula kepada output standard dan menulis kandungan yang diformatkan terus ke fail asal. Secara lalai, arahan gofmt akan mencetak kandungan terformat terus ke output standard.

Malah, atur cara arahan akan menghuraikan kandungan fail kod sumber sasaran ke dalam pepohon sintaks abstrak. Apabila ralat sintaks ditemui semasa proses penghuraian, atur cara arahan akan memaparkan mesej ralat dan keluar. Secara lalai, semua ralat sintaks dalam fail kod sumber sasaran tidak akan dipaparkan. Kita boleh menambah bendera -e untuk menyebabkan program arahan mencetak semua ralat ke output standard.

Kendalian penulisan semula tersuai

Secara lalai, operasi penulisan semula arahan gofmt bagi fail kod sumber bahasa Go termasuk aspek berikut:

  • Isih susunan laluan import pakej kod dalam blok penyata import pakej dependensi dalam susunan leksikografi.

  • Piawaikan lekukan, ruang dan pemisah baris antara bahasa individu atau blok pernyataan. Contohnya, tukarkan semua rn kepada n.

  • Pembetulan kecil pada sintaks kod. Contohnya, hapuskan kurungan berlebihan dalam blok pernyataan suis yang digunakan untuk menentukan jenis pembolehubah.

Jika anda ingin menyesuaikan operasi penulisan semula tambahan, anda perlu menggunakan bendera -r. Nilai bendera -r mesti mengandungi "->", seperti a[b:len(a)] -> Bahagian kiri "->" hendaklah menjadi contoh ungkapan yang perlu diganti, dan bahagian kanan hendaklah menjadi contoh ungkapan yang digunakan untuk menggantikan ungkapan di sebelah kiri "->".

Jika kita menggunakan bendera -r, atur cara arahan akan menghuraikan ungkapan yang diganti dan ungkapan penggantian dalam nilai bendera ini ke dalam nod ungkapan pepohon sintaks abstrak sebelum menghuraikan fail kod sumber. Jika penghuraian tidak berjaya, ini bermakna operasi penggantian seterusnya tidak dapat dilakukan, dan atur cara arahan akan keluar selepas mencetak mesej ralat. Jika penghuraian berjaya, program arahan akan melaksanakan operasi penggantian ungkapan selepas berjaya menghuraikan fail kod sumber. Program arahan akan mencari nod dalam pepohon sintaks abstrak bagi fail kod sumber yang sepadan dengan ungkapan yang diganti dan menggantikannya dengan ungkapan gantian. Perintah gofmt sudah menyokong tetapi tidak terhad kepada operasi penggantian tersuai berikut:

  • Penggantian nama entiti program. Entiti program termasuk pembolehubah, pemalar, fungsi, struktur dan antara muka. Contohnya: -r=array1->array2 dan -r=FuncA->FuncB.

  • Penggantian jenis entiti program, yang juga termasuk penggantian parameter fungsi dan jenis hasil. Contohnya: -r=string->bool dan -r=interface{}->int.

  • Alih keluar kurungan berlebihan. Sebagai contoh: jika kita menetapkan tanda -r=(x)->x seperti ini, a = (-x.s) dalam kod sasaran akan ditulis semula sebagai a = -x.s, dan ia juga akan menjadikan ((b = - x.f()) dalam kod )) ditulis semula sebagai b = -x.f(), yang juga akan menyebabkan c = -(x).f ditulis semula sebagai c = -x.f, tetapi d = (&x).s dan e = (-x).f tidak akan dialih keluar kurungan dalam (). Dalam erti kata lain, program arahan akan mengalih keluar kurungan berlebihan daripada kod tanpa mengubah semantik dan mewujudkan kekaburan tatabahasa.

  • Penggantian operasi berangka. Sebagai contoh: Jika kita menetapkan bendera -r=x+x->x*2 seperti ini, semua x + x dalam kod akan digantikan dengan x * 2. Selain itu, jika ungkapan yang akan diganti mengandungi ulasan, ulasan ini akan dialih keluar semasa operasi penggantian. Contohnya, dengan tetapan teg yang sama, x /* Ia ulasan */ + x masih akan digantikan dengan x * 2.

  • Penggantian panggilan fungsi berdasarkan senarai parameter. Sebagai contoh: jika kita menetapkan bendera -r='funcA(a)->FuncA(a, c)' seperti ini, maka pernyataan dalam kod sasaran yang memanggil fungsi funcA dan mengambil pembolehubah sebagai parameter akan diganti dengan memanggil fungsi FuncA dengan pernyataan A dengan pembolehubah a dan pembolehubah c sebagai parameter. Ambil perhatian bahawa a sebagai parameter dalam ungkapan yang digantikan hanya menunjukkan bahawa fungsi funcA mempunyai parameter, dan tidak peduli apa nama parameter itu. Maksudnya, dengan tetapan bendera yang sama, funcA(b) atau funcA(x) dalam kod sasaran akan digantikan dengan FuncA(a, c). Atau, jika kita menetapkan bendera -r='funB(x...)->FunC(x)' seperti ini, kemudian funB(x...) atau funB(y...) atau fungsi panggilan Serupa yang lain akan digantikan dengan FunC(x). Antaranya, apabila parameter tatasusunan/slice jenis diikuti oleh tiga noktah separuh lebar Inggeris "...", ia menunjukkan bahawa setiap elemen dalam parameter ini perlu dihantar ke dalam fungsi sebagai parameter yang berasingan. Oleh itu, kaedah penggantian ini boleh digunakan untuk susulan kelompok dan membetulkan kod yang memanggil fungsi selepas nama fungsi dan/atau senarai parameter ditukar.

Operasi Penyederhanaan Kod

Apabila kita menambah bendera -s apabila melaksanakan arahan gofmt, atur cara arahan akan mencari kod sumber sasaran mudahkan kod dan mudahkannya. Penyederhanaan termasuk:

  • Menghapuskan pengisytiharan jenis yang tidak perlu dalam pemulaan tatasusunan/slice.

  • Hapuskan pengisytiharan jenis yang tidak perlu dalam permulaan kamus.

  • Hapuskan spesifikasi indeks yang tidak diperlukan semasa operasi penghirisan tatasusunan/hirisan.

  • 消除迭代时的非必要临时变量赋值操作。

这些操作基本上都是出于尽量使用Go语言的语法糖已达到减少代码量的目的。我们在编写Go语言代码的时候应该直接使用这些语法糖而不应该依赖使用gofmt命令来简化。这里所说的Go语言的语法糖,我们在第3章中已经有所介绍。

我们在本小节中详细介绍了go fmt命令和gofmt命令。下面我们再汇总一下这两个命令可以为我们做的事情。如下表。

表0-14 go fmt命令和gofmt命令的功能

功能 go fmt命令 gofmt命令
格式化代码
列出不规范的源码文件
自动改写源码文件
显示对比信息 ×
提示全部错误 ×
简化代码 ×
自定义替换/重构辅助 ×
CPU概要记录 ×

最后,值得一提的是,当我们执行gofmt命令且没有加任何参数的时候,该命令将会进入到交互模式。在这种模式下,我们可以直接在命令行界面中输入源码,并以Ctrl-d结束。在Linux操作系统下,Ctrl-d代表EOF(End Of File,中文译为文件结束符)。需要注意的是,如果在一行的中间按下Ctrl-d,则表示输出“标准输入”的缓存区,所以这时必须连续按两次Ctrl-d。另外,在Windows操作系统下,Ctrl-z代表EOF,所以需要以Ctrl-z结束。在这之后,gofmt命令会像从源码文件中读取源码那样从命令行界面(也称为标准输入)读取源码,并在格式化后将结果打印到命令行界面(也称为标准输出)中。示例如下:

hc@ubt:~$ gofmt -r=&#39;fmt.Println(a)->fmt.Printf("%s\n", a)&#39;
if a=="print" {fmt.Println(a)}                            <----- 在此行的末尾键入回车和Ctrl-d。
warning: rewrite ignored for incomplete programs          <----- 此行及以下就是命令输出的内容。
if a == "print" {
        fmt.Println(a)
}

由上述示例可知,我们可以使用gofmt命令的交互模式格式化任意的代码片段。虽然会显示一行警告信息,但是格式化后的结果仍然会被打印出来。并且,在交互模式下,当我们输入的代码片段不符合Go语言的语法规则时,命令程序也会打印出错误提示信息。在其它方面,命令程序在交互模式与普通模式下的行为也是基本一致的。

【相关推荐:Go视频教程编程教学

Atas ialah kandungan terperinci Apakah fungsi arahan go fmt. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Apakah kegunaan go clean?Artikel seterusnya:Apakah kegunaan go clean?