>백엔드 개발 >Golang >Go 언어에는 들여쓰기가 있나요?

Go 언어에는 들여쓰기가 있나요?

青灯夜游
青灯夜游원래의
2022-12-01 18:54:576588검색

Go 언어에는 들여쓰기가 있습니다. Go 언어에서는 gofmt 도구를 사용하여 들여쓰기 형식을 직접 지정할 수 있습니다(gofmt는 들여쓰기에 탭을 사용함). gofmt 도구는 표준 스타일 들여쓰기 및 수직 정렬을 사용하여 소스 코드 형식을 지정하며 필요한 경우 주석 형식도 다시 지정합니다.

Go 언어에는 들여쓰기가 있나요?

이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.

Go 언어 코드 스타일

(1) 들여쓰기 및 줄바꿈

들여쓰기는 gofmt 도구를 사용하여 직접 형식을 지정할 수 있습니다(gofmt는 탭 들여쓰기를 사용합니다). gofmt는 표준 스타일의 들여쓰기 및 수직 정렬을 사용하여 소스 코드의 형식을 지정하고 필요한 경우 주석 형식도 다시 지정하는 도구입니다.

줄 바꿈의 경우 한 줄의 최대 길이가 120자를 초과할 수 없습니다. 이를 초과하는 경우 줄 바꿈을 사용하여 표시하고 형식을 최대한 우아하게 유지하세요

저희는 GoLand 개발 도구를 사용하며 단지 바로가기 키(Ctrl+Alt+L)를 사용하세요.

(2) 명령문의 끝

Go 언어에서는 Java와 마찬가지로 세미콜론으로 끝날 필요가 없습니다. 기본적으로 한 줄은 하나의 데이터입니다.

한 줄에 여러 문장을 작성하려면 반드시 사용해야 합니다.

(3) 대괄호 및 공백

대괄호 및 공백의 경우 gofmt 도구를 사용하여 직접 형식을 지정할 수도 있습니다(go는 왼쪽 중괄호를 강제로 줄 바꿈하지 않고 줄 바꿈하면 구문 오류가 발생함). 모든 연산자와 피연산자 사이에 공백을 두십시오.

//正确的方式
if a > 0 {

}
//错误的方式
if a>0  // a,>,0之间应该使用空格
{       //左大括号不可以换行,会报语法错误
	
}

(4) 가져오기 사양

여러 줄을 가져오는 경우 goimports가 자동으로 형식을 지정합니다. 파일에 패키지를 삽입하는 경우 다음 형식을 사용하는 것이 좋습니다.

import {
	"fmt"
}

패키지가 표준 라이브러리 패키지, 프로그램 내부 패키지, 타사 패키지의 세 가지 유형을 소개하는 경우 다음과 같은 방식으로 패키지를 구성하는 것이 좋습니다.

inport{
	"encoding/json"
	"strings"
	
	"myproject/models"
	"myproject/controller"
	
	"github.com/astaxie/beego"
}

패키지를 순서대로 소개하세요. 첫 번째는 실제로 준 라이브러리이고, 두 번째는 프로젝트 패키지이고, 세 번째는 타사 패키지입니다. [관련 권장 사항: Go 비디오 튜토리얼]

프로젝트에 패키지를 소개할 때 상대 경로를 사용하지 마세요

(5) 오류 처리

오류 처리의 원칙은 오류를 반환하는 호출을 삭제하지 않는 것입니다. _discard 를 사용하지 말고 전체를 처리해야 합니다. 오류가 발생하면 err을 반환하거나 로그를 사용하여 기록하세요.

  • 가능한 한 빨리 반환: 오류가 발생하면 즉시 반환하세요.

  • 무슨 일을 하고 있는지 알지 못하면 패닉을 사용하지 마세요.

  • 영어로 소문자여야 하고 구두점 끝이 필요하지 않은 경우 오류 설명

  • 처리를 위해 독립적인 오류 스트림 사용

// 错误写法
if err != nil {
	// error handing
} else {
	//normal code
}

// 正确写法
if err != nil {
	// error handing
	return // or continue, etc.
}
//  normal code

(6) Test

단위 테스트 파일 명명 규칙은 example_test.go입니다.

테스트 케이스의 함수 이름은 각 중요한 함수에 사용해야 합니다. 테스트 케이스는 회귀 테스트를 용이하게 하기 위해 일반 코드와 함께 제출되어야 합니다.

gofmt는 Go 소스 코드를 포맷하는 데 사용되는 별도의 명령입니다. 들여쓰기에는 탭을 사용하고 정렬에는 공백을 사용합니다. 정렬에서는 편집기가 고정 너비 글꼴을 사용한다고 가정합니다. 경로가 명시적으로 지정되지 않으면 표준 입력을 처리합니다. 파일이 있으면 해당 파일을 처리합니다. 폴더가 있으면 폴더 아래의 모든 .go 파일(숨겨진 파일 제외)을 반복적으로 처리합니다. 기본적으로 gofmt는 (소스 파일을 직접 업데이트하는 대신) 형식이 변경된 코드를 표준 출력으로 인쇄합니다. 사용법은 다음과 같습니다.

gofmt [flags] [path ...]
플래그는 다음과 같습니다.

-d 형식이 변경된 코드는 더 이상 표준 출력으로 인쇄되지 않습니다. 파일 코드 형식이 gofmt와 일치하지 않으면 표준 출력에 차이점을 인쇄합니다(이 플래그는 git diff 명령과 유사합니다).

    -e 모든 오류(잘못된 오류 포함)를 인쇄합니다.
  • -l 형식이 변경된 코드는 더 이상 표준 출력으로 인쇄되지 않습니다. 파일 코드 형식이 gofmt와 일치하지 않으면 파일 이름을 표준 출력으로 인쇄합니다.
  • -r 규칙은 소스 파일을 다시 포맷하기 전에 지정된 다시 쓰기 규칙을 적용합니다.
  • -s 규칙(있는 경우)을 적용한 후 코드를 단순화해 보세요.
  • -w 형식이 변경된 코드는 더 이상 표준 출력으로 인쇄되지 않습니다. 파일 코드 형식이 gofmt와 일치하지 않는 경우 gofmt 버전을 사용하여 다시 작성하세요. 다시 쓰는 과정에서 오류가 발생하면 자동 백업을 통해 원본 파일을 복원합니다.
  • 디버깅 지원:
  • -cpuprofile filename 지정된 파일에 cpuprofile을 씁니다.

    참고: -r 플래그로 지정된 다시 쓰기 규칙은 문자열 형식이어야 합니다.
  • 패턴 및 교체 부분은 유효한 Go 표현식이어야 합니다. 패턴에서는 단일 문자 소문자 식별자가 와일드카드로 사용되어 대체 시 동일한 식별자로 대체될 하위 표현식을 일치시킵니다.
  • 当gofmt从标准输入读取时,即接受一个完整的Go程序,也可以是一个程序片段。程序片段必须是语法上有效的声明列表,语句列表或表达式。格式化这种片段时,gofmt会保留前导缩进和前后的空格,以便Go程序的各个部分可以通过gofmt来格式化。

    示例

    假设源文件(hello.go)内容如下:

    package main
    
    import "fmt"
    
    func main() {
    
        x := 2
    y := 3// 该行未对齐
    
        str := "Hello Golang~"
        var greeting string
    
        greeting = (str)// 本行含有不必要的括号
    
        fmt.Println(greeting)
        fmt.Println("x*y =", ((x) * y))// 本行含有不必要的括号
    
        s := []int{1, 3, 5, 6, 7}// 切片
    
        start := 2
    
        sub := s[start:len(s)]// 本行可以优化切片s上界
    
        fmt.Println(s)
        fmt.Println(sub)
    }

    1.检查文件中不必要的括号(如果有,则输出文件名):

    gofmt -r '(a) -> a' -l *.go

    将会输出hello.go

    2.移除括号:

    gofmt -r '(a) -> a' -w *.go

    源文件将变成如下格式:

    package main
    
    import "fmt"
    
    func main() {
    
        x := 2
        y := 3 // 该行未对齐
    
        str := "Hello Golang~"
        var greeting string
    
        greeting = str // 本行含有不必要的括号
    
        fmt.Println(greeting)
        fmt.Println("x*y =", x*y) // 本行含有不必要的括号
    
        s := []int{1, 3, 5, 6, 7} // 切片
    
        start := 2
    
        sub := s[start:len(s)] // 本行可以优化切片s上界
    
        fmt.Println(s)
        fmt.Println(sub)
    }

    注意看带注释的行发生的变化。

    3.当前目录下,从显式切片上界转换为隐式切片上界:

    gofmt -r 'α[β:len(α)] -> α[β:]' -w ./

    源文件第22行将变成如下:

        sub := s[start:] // 本行可以优化切片上限

    代码简化

    使用-s调用gofmt时,将尽可能进行以下转换:

    以下数组,切片或映射的复合字面量形式:

        []T{T{}, T{}}

    将被简化为:

        []T{{}, {}}

    以下切片表达式形式:

        s[a:len(s)]

    将被简化为:

        s[a:]

    以下range形式:

        for x, _ = range v {...}

    将被简化为:

        for x = range v {...}

    以下range形式:

        for _ = range v {...}

    将被简化为:

        for range v {...}

    注意:这些改变可能与早期版本的Go不兼容。另外,官方文档中指出:

    • -r标识性能有点慢;

    • -w如果失败,还原后的源文件可能会丢失某些文件属性。

    更多编程相关知识,请访问:编程视频!!

위 내용은 Go 언어에는 들여쓰기가 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.