Go 언어의 할당 연산자
최근에 저는 구글의 새로운 프로그래밍 언어 인 Go를 가지고 놀았습니다.
할당 연산자 :=
가 등호 앞에 콜론이있는 이유가 궁금 =
했습니다. 언어 작성자가 name := "John"
대신 사용하려는 특별한 이유가 있습니까?name = "John"
:=
표기법 선언 같이 초기화로서 모두 작용한다.
foo := "bar"
다음과 같다
var foo = "bar"
foo = "bar"
스크립팅 언어에서 like 만 사용하지 않는 이유 는 무엇입니까? 글쎄, 그것은 오타를 피하기위한 것입니다.
foo = "bar"
fooo = "baz" + foo + "baz" // Oops, is fooo a new variable or did I mean 'foo' ?
name := "John"
단지 구문상의 설탕입니다.
var name string
name = "John"
Go는 정적으로 입력되므로 변수를 선언해야합니다.
:=
할당 연산자가 아닙니다. 짧은 변수 선언입니다. =
할당 연산자입니다.
짧은 변수 선언은 다음 구문을 사용합니다.
ShortVarDecl = IdentifierList ":=" ExpressionList .
이니셜 라이저 표현식이 있지만 유형이없는 정규 변수 선언의 속기입니다.
"var" IdentifierList = ExpressionList .
Assignment = ExpressionList assign_op ExpressionList .
assign_op = [ add_op | mul_op ] "=" .
이동에 name := "John"
대한 속기 var name = "John"
.
Rob Pike 는 Go의 :=
"Origins of Go"(2010) 강연에서 Go의 이유를 설명합니다 .
:=
Newsquek (1989)라고하는 Pike가 코드 서명 한 다른 언어의 의사 연산자였습니다. Pascal-ish 표기법이 있고 관용구를 선언하고 초기화하기 위해 유형을 추론하는 기능이 있습니다. ( 15 페이지 )
// variable: [type] = value
x: int = 1
x := 1
한계 메모 : Robert Griesemer 는 :=
"Go에서 꺼내는 한 가지는 무엇입니까?"라는 질문에 대답하는 운영자를 불러옵니다. Google I / O 2013에서 QA 세션 중에 . 편리하지만 문제가 있다고 언급했습니다 .
둘 다 Go 언어에서 변수 선언의 다른 기술입니다.
var name = "John" // is a variable declaration
과
name := "John" // is a short variable declaration.
짧은 변수 선언은 이니셜 라이저 표현식이 있지만 유형이없는 정규 변수 선언의 속기입니다.
자세한 내용은 아래를 참조하십시오.
답변에 대한 중요한 배경 :
:=
변수 초기화를위한 속기 연산자입니다. 에서 이동 , 다음 작업은 동일합니다 :
var myNumb String = "one"
myNumb := "one"
대답:
이제 내포 된 질문은 "왜 ? :=
가 :
앞에있는 속기 표기법 을 디자인 =
했는가?"입니다. 그 이유는 만연한 오타를 방지하기 위함입니다. 속기 할당 연산자가 just =
이면 다음과 같은 상황이 발생할 수 있습니다.
var myNumb String = "one"
myNumb = "two"
Now did the user who created that code intend to reassign two
to myNumb
, or did he mistype myNumb
instead of correctly typing myNumbTwo
? By including the colon in :=
, the programmer would have to commit two errors (forget the colon and forget the var
) in order to have a bug, hence decreasing the probability of doing so drastically.
There is at least one subtle difference between
name := "John"
and
var name = "John"
The former is a non-declaration statement and not allowed outside of a function body, whereas the latter is a valid statement at the package level.
참고URL : https://stackoverflow.com/questions/16521472/assignment-operator-in-go-language
'programing tip' 카테고리의 다른 글
scikit-learn을 사용하여 여러 범주로 분류 (0) | 2020.10.16 |
---|---|
Android 방송 수신기 대 서비스 (0) | 2020.10.16 |
긴 함수 이름을 여러 줄로 나눌 수 있습니까? (0) | 2020.10.16 |
Python의 교차 플랫폼 / dev / null (0) | 2020.10.16 |
.NET clr20r3 예외 매개 변수 P1..P10 해독 (0) | 2020.10.16 |