programing tip

Go 언어의 할당 연산자

itbloger 2020. 10. 16. 07:14
반응형

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

반응형