바둑에서의 변수 작용역
Go에서 변수는 패키지 레벨, 함수 레벨, 블록 레벨에서 성명할 수 있는데 그 중에서 성명된 변수는 프로그램 내에서 변수에 접근하는 방식과 위치, 그리고 변수의 생명 주기를 결정하는데 이를 작용역이라고 부른다.
본고에서 Go의 변수 작용역의 개념과 간단한 명령행 응용 프로그램을 구축할 때 이를 숨기는 방법을 연구하고 이 응용 프로그램은 제공된 값의 평균 값을 계산할 것이다.
블록 및 가변 범위
성명한 모든 변수는 변수에 접근할 수 있는 위치의 경계를 정의하는 것과 같은 역할 영역을 가지고 있습니다.범위 밖의 변수에 접근할 수 없습니다. 이렇게 하면 오류가 발생할 수 있습니다.
변수의 역할 영역은 해당 변수가 선언한 블록과 블록에 중첩된 블록으로 구성됩니다.
평균 계산기
go의 범위를 더 잘 이해하도록 하기 위해서, 사용자가 숫자를 입력하고, 입력한 숫자의 평균값을 알려줄 수 있는 프로그램을 만들어야 합니다.이 숫자들의 평균치를 얻기 위해서, 우리는 이 값의 총계를 이 값의 개수로 나누기만 하면 된다.
그래서 우리 프로그램은 데이터를 수신하고 계산하며 명령줄에 정보를 되돌려야 한다. 이것은 우리가 해야 할 첫 번째 일이다.
새 파일 생성
average.go
//average returns the average of numbers supplied
package main
import (
"fmt"
)
values:= []float64{9.42, 16.56, 27.01}
fmt.Println("values:", values)
func main() {
var sum float64 = 0
for _, value : range values {
sum += value
}
average := sum/float64(len(numbers))
fmt.Println("average": average)
}
전 세계
전역적으로 변수를 설명하면 프로그램의 모든 부분에서 변수에 접근할 수 있으며, 이러한 변수는 프로그램의 전체 생명 주기 내에 사용할 수 있다.
패키지를 프로그램으로 가져올 때, 패키지의 방법은 전역적으로 사용할 수 있고, 점 기호로 접근할 수 있습니다.
우리의 예시 프로그램에서 fmt 패키지,values 변수,main 함수, 내장 변수와 유형은 모두 전역 범위 내에 있습니다.이것은 프로그램의 모든 부분에서 접근할 수 있다는 것을 의미한다
//average returns the average of numbers supplied
package main
import (
"fmt"
)
values:= []float64{9.42, 16.56, 27.01}
fmt.Println("values:", values)
func main() {
var sum float64 = 0
//values here is from the global scope
for _, value : range values {
sum += value
}
average := sum/float64(len(numbers))
fmt.Println("average": average)
}
국부 범위
함수 레벨이나 블록 레벨에서 변수를 성명할 때, 그것들은 국부 작용 영역이 되고, 국부 작용 영역이나 블록 레벨에서만 접근할 수 있다.
국부 작용역 변수는 더 이상 필요하지 않을 때 쓰레기로 수집되어 메모리 소모를 줄이는 데 도움이 된다.
우리의 일반 프로그램에서 주함수에 명시된 모든 변수는 주함수 블록에서 사용할 수 있고 주함수 블록 밖에서 접근할 수 없다. 이것은 그들이 모두 주함수의 국부 범위 내에 있다는 것을 의미한다.
//average returns the average of numbers supplied
package main
import (
"fmt"
)
//values is undefined and cannot be accessed from this scope
fmt.Println("values:", values)
func main() {
values:= []float64{9.42, 16.56, 27.01}
var sum float64 = 0
//values here is from the global scope
for _, value : range values {
sum += value
}
average := sum/float64(len(numbers))
fmt.Println("average": average)
}
우리는values 변수 성명을 이동했기 때문에, 그 작용역은 국부적인 주함수입니다.외부 범위에서 접근하면 오류가 발생합니다. 현재 범위를 넘어섰기 때문에, 이 문제를 해결하는 방법은 평균 변수 성명을 전체 범위로 옮기는 것입니다.그림자 변수
우리는 내부 역할 영역에서 외부 역할 영역에 접근하는 변수를 토론했다.변수를 선언할 때 기존 변수, 함수, 패키지, 유형 또는 다른 모든 변수와 이름이 같지 않도록 해야 합니다. 그렇지 않으면 기존 변수가 숨겨집니다. 즉, 기존 변수보다 우선합니다.
Go가 오류를 되돌려 불평하기를 원할 수도 있지만, 이것은 단지 두 변수가 같은 범위에 존재할 때, 내부 범위 내에 같은 이름으로 성명된 새로운 변수가 존재하는 경우, Go는 새로운 값을 분배하고 전체 내부 범위를 두루 훑어보기만 하면, 내부 범위 내에서 이 변수를 방문할 때, 새로운 값을 얻을 수 있지만, 외부 범위는 변하지 않는다.
//average returns the average of numbers supplied
package main
import (
"fmt"
)
values:= []float64{9.42, 16.56, 27.01}
func main() {
//values shadows the one declared in the outer variable
var values string = "go"
//string would now refers to a declared variable
var string string = "hello"
//fmt is now a variable of string type
var fmt string = "shadowed variable"
//this returns 2
fmt.Println("value:", values)
var sum float64 = 0
//Oops! valuesrefer to a string in this scope and you can't loop through it
for _, value : range values {
sum += value
}
}
예시 프로그램에서 우리는 몇 가지 다른 변수를 숨겼지만, 변수가 숨긴 유형, 함수, 패키지에 접근하려고 하면 컴파일 오류가 발생할 수 있습니다.결론
현재, 당신은 고의 전체 국면과 국부 변수 범위를 이해했고, 음영 변수도 이해했다. 그것은 기존 변수보다 우선하고, 이런 상황을 어떻게 피하는지.
자신에게 커피를 따르라--이것은 네가 마땅히 해야 할 일이다!😉
이 글을 좋아하고, 평론하고, 공유하는 것을 잊지 말고, 트위터 @robogeke95, LinkedIn, Github에서 연락 주세요.
이 글을 좋아하고 평론하며 공유하는 것을 잊지 마라🙏😊 트위터 @robogeke95,LinkedIn,Github에서 연락 주세요.
Reference
이 문제에 관하여(바둑에서의 변수 작용역), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/robogeek95/go-variable-scope-16ln텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)