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 프로그램은 다음 두 가지 규칙을 사용하여 이러한 세미콜론을 대부분 생략 할 수 있습니다.
따라서 괄호 뒤에 개행 문자를 삽입하면 알 수 있듯이 )
세미콜론 ;
이 자동으로 삽입되므로 다음 행은 이전 행의 연속으로 처리되지 않습니다. 이것은 귀하의 경우 일어로 시작하고 다음 줄이 그래서 무엇을 .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,
)
답변
언급했듯이 이것은 스타일 선호도의 문제입니다. 바둑의 창작자들이 내가 배운 경험을 바탕으로 한 스타일을 제안했지만 내 경험에서 내 스타일을 일부 유지한다는 것을 이해합니다.
다음은 이것을 포맷하는 방법입니다.
err := database.
QueryRow("select * from users where user_id=?", id).
Scan(
&ReadUser.ID,
&ReadUser.Name,
&ReadUser.First,
&ReadUser.Last,
&ReadUser.Email,
)