programing

Golang에서 긴 코드 줄을 끊는 방법은 무엇입니까?

nasanasas 2020. 10. 19. 08:08
반응형

Golang에서 긴 코드 줄을 끊는 방법은 무엇입니까?


Python에서 왔기 때문에 80 열보다 긴 코드 줄을 보는 데 익숙하지 않습니다. 그래서 이것을 만나면 :

err := database.QueryRow("select * from users where user_id=?", id).Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email)

나는 그것을 깨려고 노력했다

err := database.QueryRow("select * from users where user_id=?", id) \
    .Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email)

하지만 나는

 syntax error: unexpected \

나는 또한 엔터를 치면서 줄을 끊고 끝에 세미콜론을 넣었습니다.

err := database.QueryRow("select * from users where user_id=?", id) 
.Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email);

그러나 나는 다시 얻는다 :

syntax error: unexpected .

그래서 나는 그렇게하는 골 랑어 방법이 무엇인지 궁금합니다.


먼저 몇 가지 배경. Go의 공식 문법은 ";"많은 프로덕션에서 세미콜론 을 종결 자로 사용 하지만 Go 프로그램은 대부분을 생략 할 수 있습니다 (더 명확하고 쉽게 읽을 수있는 소스를 가져야하며 gofmt불필요한 세미콜론도 제거함).

사양은 정확한 규칙을 나열합니다. 사양 : 세미콜론 :

형식 문법은 세미콜론 ";"을 사용합니다. 여러 프로덕션에서 종결 자로 사용됩니다. Go 프로그램은 다음 두 가지 규칙을 사용하여 이러한 세미콜론을 대부분 생략 할 수 있습니다.

  1. 입력이 토큰으로 분할 될 때 해당 토큰이 다음과 같은 경우 라인의 최종 토큰 바로 뒤에 세미콜론이 토큰 스트림에 자동으로 삽입됩니다.

  2. 복잡한 문이 한 줄을 차지할 수 있도록 닫는 ")"또는 "}"앞에 세미콜론을 생략 할 수 있습니다.

따라서 괄호 뒤에 개행 문자를 삽입하면 알 수 있듯이 )세미콜론 ;이 자동으로 삽입되므로 다음 행은 이전 행의 연속으로 처리되지 않습니다. 이것은 귀하의 경우 일어로 시작하고 다음 줄이 그래서 무엇을 .Scan(&ReadUser.ID,...당신에게로이 서로 컴파일 타임 오류 줄 것 자체가 (이전 라인이없는 것은) 컴파일 타임 오류가 발생합니다 :syntax error: unexpected .

따라서 1.위의 항목에 나열된 규칙과 충돌하지 않는 경우 언제든지 줄을 끊을 수 있습니다 .

일반적으로는 쉼표 후 라인을 깰 수 ,후, 여는 괄호 예를 들어 (, [, {, 및 점 이후에 .일부 값의 필드 나 메소드를 참조 할 수있다. 이항 연산자 (2 개의 피연산자가 필요한 연산자) 뒤에 줄을 끊을 수도 있습니다. 예 :

i := 1 +
        2
fmt.Println(i) // Prints 3

여기서 주목할 가치가있는 한 가지는 초기 값을 나열하는 구조체 또는 슬라이스 또는 맵 리터럴이 있고 마지막 값을 나열한 후 줄을 끊으려면 ,이것이 마지막 값이고 아니요 인 경우에도 필수 쉼표를 넣어야한다는 것 입니다. 더 많은 것들이 뒤따를 것입니다.

s := []int {
    1, 2, 3,
    4, 5, 6,  // Note it ends with a comma
}

이는 세미콜론 규칙을 따르고 마지막 쉼표를 추가 / 제거하지 않고도 새 줄을 재 배열하고 추가 할 수 있도록하기위한 것입니다. 예를 들어 새 쉼표를 제거하고 추가하지 않고도 두 줄을 간단히 바꿀 수 있습니다.

s := []int {
    4, 5, 6,
    1, 2, 3,
}

함수 호출에 인수를 나열 할 때도 마찬가지입니다.

fmt.Println("first",
    "second",
    "third",       // Note it ends with a comma
)

가장 간단한 방법은 .첫 번째 줄에 연산자 ( )를 그대로 두는 것 입니다.

\ 줄 연속은 많은 파이썬 스타일 가이드에서 권장되지 않습니다.이 기술은 두 언어 모두에서 작동하므로 go와 python 사이를 앞뒤로 이동하는 경우 전체 표현식을 괄호로 감쌀 수 있습니다.


스타일의 문제이지만 저는 다음을 좋아합니다.

err := database.QueryRow(
    "select * from users where user_id=?", id,
).Scan(
    &ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email,
)

As mentioned, this is a matter of style preference. I understand that the creators of Go have suggested a style based on their experience of which I learn from but also keep some of my own style from my experience.

Below is how I would format this:

err := database.
  QueryRow("select * from users where user_id=?", id).
  Scan(
    &ReadUser.ID,
    &ReadUser.Name,
    &ReadUser.First,
    &ReadUser.Last,
    &ReadUser.Email,
  )

참고URL : https://stackoverflow.com/questions/34846848/how-to-break-a-long-line-of-code-in-golang

반응형