더 깔끔한 일관된 코드를 위해 Go 소스를 포맷하는 방법
코드 서식 지정은 가독성, 일관성 및 재사용성을 향상시키는 중요한 방법입니다. 올바른 형식의 코드는 이해, 수정 및 유지 관리가 더 쉽습니다.
Go의 뛰어난 기능 중 하나는 잘 정의된 서식 지정 규칙입니다. 기본 제공 형식 패키지와 go fmt 명령을 사용하여 코드 형식을 자동으로 지정할 수 있습니다. 이렇게 하면 다른 Go 프로그래머가 가능한 한 쉽게 읽을 수 있습니다.
Format 패키지 및 fmt 명령
format 패키지 는 Go 소스 코드에 대한 표준 형식을 구현합니다. 이 패키지는 Go 코드 형식의 유연성을 위해 go 형식 명령줄 도구와 상호 운용됩니다.
format 패키지는 go 패키지의 하위 모듈입니다. 가져오는 방법은 다음과 같습니다.
import "go/format"
fmt 명령 앞에 help 명령 을 지정하여 go fmt 명령의 설명서를 찾아볼 수 있습니다 .
go help fmt
해당 파일을 형식화하려면 fmt 명령 다음에 파일 이름을 지정하십시오. 이렇게 하면 Go 표준을 준수하도록 코드의 공백과 들여쓰기가 조정됩니다.
go fmt main.go
배후에서 go fmt는 gofmt 명령의 별칭입니다. 구체적으로 다음과 같습니다.
gofmt -l -w
이러한 플래그로 인해 gofmt는 사용자가 제공한 각 파일에 변경 사항을 기록하고 변경된 파일의 이름을 나열합니다.
-x 플래그를 fmt 명령에 추가할 수 있습니다 . -x 플래그는 포맷터에서 원본 파일로 변경 사항을 기록하는 데 도움이 됩니다.
go fmt -x main.go
-n 플래그 는 -x와 유사하게 작동하지만 변경하지는 않습니다. 대신 -n 없이 실행되는 go fmt 명령을 표시합니다.
go fmt -n main.go
플래그는 변경 사항을 표시하도록 포맷터에 지시하므로 변경 사항을 적용하기 전에 먼저 검토할 수 있습니다.
다음은 0에서 5까지의 정수를 반복하고 문자열 “Hello World!”를 인쇄하는 간단한 Go 프로그램입니다.
// formatting a file named main.go as shown in the example above
package main
import "fmt"
func main() {
var x int=5
for i:=0;i<x;i++{
fmt.Println("Hello World!")
}
}
Go 소스 코드 포맷
format 패키지에는 프로그램에서 Go 파일을 포맷하기 위한 소스 기능이 포함되어 있습니다. 파일을 읽고 내용을 Source 함수의 인수로 전달해야 합니다.
Source 함수는 파일 또는 새 파일에 쓸 수 있는 형식화된 파일 콘텐츠를 반환합니다.
ioutil 패키지 의 ReadFile 기능으로 파일을 읽을 수 있습니다 . ReadFile 함수는 파일 이름을 받아 파일 내용과 처리 오류를 반환합니다.
fileContent, err: = ioutil.ReadFile("main.go")
if err! = nil {
log.Fatalln("There was an error reading the file", err)
}
파일 콘텐츠를 Source 함수에 전달하면 형식이 지정된 파일 콘텐츠와 처리 오류가 반환됩니다.
formatted, err: = format.Source(fileContent)
if err! = nil {
log.Fatalln("There was a formatting error with the source function", err)
}
ioutil 패키지 의 WriteFile 기능을 사용하여 형식이 지정된 파일 내용을 파일에 쓸 수 있습니다 . WriteFile 함수는 파일 이름, 내용 및 파일 권한 모드를 가져와 모든 오류를 반환합니다. 권한 모드는 파일이 존재하지 않는 경우에만 관련이 있으며 이 경우 WriteFile이 파일을 생성합니다.
0644 파일 권한 모드는 다음을 제공합니다 .
- 파일 소유자 읽기 및 쓰기 권한.
- 소유자와 동일한 그룹의 다른 사용자에 대한 읽기 권한.
- 다른 사용자에게 권한이 없습니다.
err = ioutil.WriteFile("main.go", formatted, 0644)
if err! = nil {
log.Fatalln("There was an error writing the file", err)
}
또는 서식 지정을 위해 Go 소스 코드를 Source 함수에 전달할 수 있습니다. 틱( ` ) 을 사용하여 바이트 슬라이스에 코드를 지정할 수 있습니다 .
package main
import (
"fmt"
"go/format"
)
func main() {
// simple program that calculates the area of a triangle with the math
// function
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))
}
}
서식 지정 시 문자열 함수 를 사용하여 바이트 슬라이스를 문자열로 변환해야 합니다 . 형식화된 소스 코드는 다음과 같습니다.
포맷 프로세스 사용자 지정
format 패키지의 Config 구조체 를 사용하여 포맷 프로세스를 사용자 정의할 수 있습니다 . Config 구조체에는 인스턴스화 시 형식 옵션을 지정할 수 있는 필드가 포함되어 있습니다.
import "go/format"
config: = &format.Config{
// Tabwidth sets the number of spaces per tab.
Tabwidth: 8,
// UseTabs indicates whether the formatter should use tabs instead of
// spaces.
UseTabs: false,
// TabIndent is used to determine if the initial indentation should be
// done using tabs or spaces.
TabIndent: true,
// NoFinalTab specifies whether a final tab should be removed from
// lines before they are formatted.
NoFinalTab: true,
// Spaces specifies whether spaces should be used for alignment.
Spaces: true,
// NoTrimTrailingSpace specifies whether trailing white space should
// be trimmed from lines before they are formatted.
NoTrimTrailingSpace: false,
}
필드를 사용하여 요구 사항에 따라 옵션을 설정하여 포맷터의 동작을 사용자 정의할 수 있습니다.
그런 다음 이 구조체의 Source 메서드를 사용하여 구성에 따라 바이트 슬라이스의 형식을 지정할 수 있습니다.
func main() {
fileContent, err: = ioutil.ReadFile("main.go")
// note that this is a Source method of the `config` type, not from the
// `format` package itself although the functionality is the same, you'll
// need to adhere to this if you need to configure the formatter
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)
}
이와 같이 config.Source() 함수를 호출하면 구성 옵션을 사용하여 main.go 파일의 내용을 형식화합니다. 포맷된 내용을 바이트 슬라이스 및 오류로 반환합니다.
Go에서 문자열의 형식을 지정하고 조작할 수 있습니다.
format package 및 go fmt 명령을 사용하면 코드 서식 지정 프로세스를 자동화할 수 있습니다.
Go는 또한 문자열 포매팅을 위한 fmt 패키지와 문자열 조작을 위한 strings 패키지를 제공합니다.
fmt 패키지는 C의 printf 및 scanf 기능과 유사한 기능을 사용하여 더 간단한 형식의 I/O를 구현합니다. strings 함수는 UTF-8로 인코딩된 문자열을 조작하는 간단한 함수를 구현합니다.
답글 남기기