Cách định dạng Go Source cho mã nhất quán sạch hơn
Định dạng mã của bạn là một cách quan trọng để nâng cao khả năng đọc, tính nhất quán và khả năng sử dụng lại của nó. Mã được định dạng đúng sẽ dễ hiểu, sửa đổi và bảo trì hơn.
Một trong những tính năng tuyệt vời của Go là các quy ước định dạng được xác định rõ ràng. Bạn có thể sử dụng gói định dạng tích hợp sẵn và lệnh go fmt để tự động định dạng mã của mình. Điều này sẽ giúp đảm bảo rằng các lập trình viên Go khác có thể đọc nó dễ dàng nhất có thể.
Mục Lục
Gói định dạng và Lệnh fmt
Các định dạng gói triển khai định dạng chuẩn cho mã nguồn Go. Gói tương tác với đi định dạng công cụ dòng lệnh để linh hoạt trong việc định dạng mã Go.
Gói định dạng là một mô hình con trong gói go. Đây là cách bạn có thể nhập nó:
import "go/format"
Bạn có thể duyệt tài liệu của lệnh go fmt bằng cách chỉ định Cứu giúp lệnh trước khi fmt chỉ huy:
go help fmt
Chỉ định tên tệp sau lệnh fmt để định dạng tệp đó. Điều này sẽ điều chỉnh khoảng trắng và thụt đầu dòng trong mã của bạn để phù hợp với các tiêu chuẩn của Go.
go fmt main.go
Đằng sau hậu trường, go fmt là bí danh cho lệnh gofmt, cụ thể:
gofmt -l -w
Những cờ đó khiến gofmt ghi bất kỳ thay đổi nào đối với từng tệp bạn cung cấp và liệt kê tên của các tệp mà nó thay đổi.
Bạn có thể thêm -x gắn cờ cho lệnh fmt. Cờ -x giúp ghi các thay đổi từ bộ định dạng vào tệp gốc.
go fmt -x main.go
Các -N cờ hoạt động tương tự như -x, nhưng nó không tạo ra thay đổi. Thay vào đó, nó hiển thị các lệnh go fmt sẽ chạy mà không có -n:
go fmt -n main.go
Cờ báo cho bộ định dạng hiển thị các thay đổi, điều này cho phép bạn xem lại chúng trước khi áp dụng chúng.
Đây là một chương trình Go đơn giản lặp qua các số nguyên từ 0 đến 5 và in ra chuỗi “Xin chào thế giới!”.
package main
import "fmt"
func main() {
var x int=5
for i:=0;i<x;i++{
fmt.Println("Hello World!")
}
}
Định dạng Go Mã nguồn
Gói định dạng chứa một Nguồn chức năng định dạng các tệp Go từ các chương trình. Bạn sẽ phải đọc tệp và chuyển nội dung dưới dạng đối số cho hàm Nguồn.
Hàm Nguồn sẽ trả về nội dung tệp được định dạng mà bạn có thể ghi vào tệp hoặc tệp mới.
Bạn có thể đọc các tập tin với Đọc tài liệu chức năng của ioutil bưu kiện. Hàm ReadFile nhận tên tệp và trả về nội dung tệp và lỗi để xử lý.
fileContent, err := ioutil.ReadFile("main.go")if err != nil {
log.Fatalln("There was an error reading the file", err)
}
Truyền nội dung tệp cho hàm Nguồn trả về nội dung tệp được định dạng và lỗi để xử lý.
formatted, err := format.Source(fileContent)if err != nil {
log.Fatalln("There was a formatting error with the source function", err)
}
Bạn có thể ghi nội dung tệp được định dạng vào tệp bằng Viết tập tin chức năng của ioutil bưu kiện. Hàm WriteFile lấy tên tệp, nội dung và chế độ cấp phép tệp, trả về bất kỳ (các) lỗi nào. Chế độ quyền chỉ phù hợp nếu tệp không tồn tại, trong trường hợp đó, WriteFile sẽ tạo tệp đó.
Các 0644 chế độ cho phép tập tin cung cấp:
- Chủ sở hữu tập tin quyền đọc và ghi.
- Đọc quyền cho người dùng khác trong cùng một nhóm với chủ sở hữu.
- Không có quyền cho người dùng khác.
err = ioutil.WriteFile("main.go", formatted, 0644)if err != nil {
log.Fatalln("There was an error writing the file", err)
}
Ngoài ra, bạn có thể chuyển mã nguồn Chuyển đến hàm Nguồn để định dạng. Bạn có thể chỉ định mã trong lát cắt byte bằng cách sử dụng dấu (`):
package mainimport (
"fmt"
"go/format"
)
func main() {
formatted, err := format.Source([]byte(`
package main
import(
"fmt"
"math"
)
func main(){
var a float64=3
var b float64=4
var c float64=5
var s float64=(a+b+c)/2
var area float64=math.Sqrt(s*(s-a)*(s-b)*(s-c))
fmt.Println("The area of the triangle is: ",area)
}
`))
if err != nil {
log.Fatalln("There was a formatting error with the source function", err)
} else {
fmt.Println(string(formatted))
}
}
Về định dạng, bạn sẽ cần chuyển đổi lát byte thành chuỗi bằng chuỗi hàm số. Đây là mã nguồn được định dạng.
Tùy chỉnh quá trình định dạng
Bạn có thể tùy chỉnh quá trình định dạng với gói định dạng cấu hình cấu trúc. Cấu trúc Cấu hình chứa các trường nơi bạn có thể chỉ định các tùy chọn định dạng khi khởi tạo.
import "go/format"config := &format.Config{
Tabwidth: 8,
UseTabs: false,
TabIndent: true,
NoFinalTab: true,
Spaces: true,
NoTrimTrailingSpace: false,
}
Bạn có thể sử dụng các trường để tùy chỉnh hành vi của trình định dạng của mình bằng cách đặt các tùy chọn dựa trên yêu cầu của bạn.
Sau đó, bạn có thể sử dụng phương thức Nguồn của cấu trúc này để định dạng một lát cắt byte dựa trên cấu hình của bạn.
func main() {
fileContent, err := ioutil.ReadFile("main.go")
formatted, err := config.Source(fileContent)
if err != nil {
log.Fatalln("There was a formatting error with the config type", err)
}
ioutil.WriteFile("main.go", formatted, 0644)
}
Gọi hàm config.Source() như thế này sẽ định dạng nội dung của chính.go tập tin bằng cách sử dụng các tùy chọn cấu hình. Nó trả về nội dung được định dạng dưới dạng một lát byte và một lỗi.
Bạn có thể định dạng và thao tác chuỗi trong Go
Gói định dạng và lệnh go fmt có thể giúp bạn tự động hóa quy trình định dạng mã của mình.
Go cũng cung cấp gói fmt để định dạng chuỗi và gói chuỗi để thao tác chuỗi.
Gói fmt thực hiện I/O được định dạng đơn giản hơn với các hàm tương tự như hàm printf và scanf của C. Hàm chuỗi triển khai các hàm đơn giản để thao tác với các chuỗi được mã hóa UTF-8.