바둑에서의 변수 작용역

11749 단어 gobeginners
프로그램의 어느 지점에서 변수를 설명하고 다른 곳에서 코드에 접근하려고 시도할 수도 있지만, 아직 정의되지 않았거나 접근할 수 없습니다.당황하지 마라, 이것이 바로 범위의 개념이다.
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)
}
  • Values는 우리가 계산하고자 하는 값을 포함하는 슬라이스입니다
  • .
  • 사용자가 계산 중인 값을 알 수 있도록 이러한 값을 인쇄합니다
  • .
  • 우리는 순환값
  • 을 통해values 구조의 모든 원소를sum로 덧붙인다
  • 통지금액은 for블록밖에 신고
  • 우리가 계산한 총계는len 방법으로 되돌아오는 값의 개수를 나누고 평균값
  • 을 출력할 것이다
  • Go는 정적 유형의 언어로 변수에 잘못된 유형을 사용하면 프로그램이 실패할 수 있습니다.필름을 플로트 64 방법
  • 에 전달함으로써 플로트 64 형식의 길이를 확보하는 방법에 주의하십시오

    전 세계
    전역적으로 변수를 설명하면 프로그램의 모든 부분에서 변수에 접근할 수 있으며, 이러한 변수는 프로그램의 전체 생명 주기 내에 사용할 수 있다.
    패키지를 프로그램으로 가져올 때, 패키지의 방법은 전역적으로 사용할 수 있고, 점 기호로 접근할 수 있습니다.
    우리의 예시 프로그램에서 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
         }
    }
    
    예시 프로그램에서 우리는 몇 가지 다른 변수를 숨겼지만, 변수가 숨긴 유형, 함수, 패키지에 접근하려고 하면 컴파일 오류가 발생할 수 있습니다.
  • 값은 현재 함수 주 역할 영역
  • 에 문자열 형식을 가지고 있습니다
  • 문자열은 문자열 형식이 아닌 성명된 변수를 인용합니다
  • fmt는 현재 성명된 변수와 가져온 fmt 패키지
  • 를 가리킨다
  • 함수 주 범위 내의 fmt 변수에서Println에 접근할 수 없습니다. 현재 인용된 것은 문자열 변수이기 때문입니다
  • 우리는 문자열을 순환할 수 없기 때문에 for 순환이 코드를 끊는다
  • 지금 상상하고 있는 바와 같이 변수를 숨기는 것은 곧 나쁜 일이 되고 프로그램이 의외로 실패할 수 있습니다. 따라서 변수에 충돌하지 않는 이름을 사용해야 합니다. 예를 들어 커뮤니티 표준, 되돌아오는 오류를 가져올 때 error 대신 error를 사용해야 합니다. 오류 형식과 충돌하기 때문입니다.

    결론
    현재, 당신은 고의 전체 국면과 국부 변수 범위를 이해했고, 음영 변수도 이해했다. 그것은 기존 변수보다 우선하고, 이런 상황을 어떻게 피하는지.
    자신에게 커피를 따르라--이것은 네가 마땅히 해야 할 일이다!😉
    이 글을 좋아하고, 평론하고, 공유하는 것을 잊지 말고, 트위터 @robogeke95, LinkedIn, Github에서 연락 주세요.
    이 글을 좋아하고 평론하며 공유하는 것을 잊지 마라🙏😊 트위터 @robogeke95,LinkedIn,Github에서 연락 주세요.

    좋은 웹페이지 즐겨찾기