English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 기본 강의

Golang 제어 문

Golang 함수 & 메서드

Golang 구조체

Golang 슬라이스 & 배열

Golang 문자열(String)

Golang 포인터

Golang 인터페이스

Golang 동기

Golang 예외(Error)

Golang 기타Misc

Go 언어 변수 범위

필수 조건:Go 언어 변수

변수의 범위는 특정 변수에 접근할 수 있는 프로그램의 일부로 정의될 수 있습니다. 클래스, 메서드, 루프 등에서 변수를 정의할 수 있습니다. C와 마찬가지로 / C ++같습니다Golang에서는 모든 식별자가 레퍼런스적(또는 정적) 범위를 가지고 있으며, 즉 변수의 범위는 컴파일 시에 결정될 수 있습니다. 또는 다른 말로 하면, 변수는 정의된 코드 블록에서만 호출될 수 있습니다.

Golang 변수의 범위 규칙은 변수가 선언된 위치에 따라 두 가지로 나눌 수 있습니다:

  • 지역 변수(블록이나 함수 내부에서 선언)

  • 전역 변수(블록이나 함수 외부에서 선언)

지역 변수

  • 함수나 블록 내에서 선언된 변수는 지역 변수라고 합니다. 이들은 함수나 블록 밖에서 접근할 수 없습니다.

  • 이 변수들은 함수 내부의 for, while 문 등 내부 문장에서도 선언할 수 있습니다.

  • 그러나 이러한 변수는 함수 내의 중첩 코드 블록에 의해 접근될 수 있습니다.

  • 이러한 변수는 블록 변수라고도 합니다.

  • 동일한 이름으로 이러한 변수를 동일한 범위에서 두 번 선언하면 컴파일 시에 오류가 발생합니다.

  • 함수가 실행되고 나면 이러한 변수는 존재하지 않습니다.

  • 루프 밖에 정의된 변수는 중첩 루프 내에서도 접근할 수 있습니다. 이는 모든 메서드와 루프가 전역 변수를 접근할 수 있다는 의미입니다. 지역 변수는 루프에서 접근되고 그 함수 내에서 실행됩니다.

  • 루프 내에 정의된 변수는 루프 밖에서는 접근할 수 없습니다.

//지역 변수
package main
import "fmt"
//메인 함수
func main() {
    //이곳부터 메인 함수의 지역 범위가 시작됩니다
    //메인 함수 내의 지역 변수
    var myvariable1, myvariable2 int = 69, 145
    // 변수의 값을 표시
    fmt.Printf("myvariable1 변수의 값 : %d\n", myvariable1)
    fmt.Printf("myvariable2 변수의 값 : %d\n", myvariable2)
} // 여기서 메인 함수의 지역 범위가 끝납니다

출력:

myvariable1 변수의 값 : 69
myvariable2 변수의 값 : 145

전역 변수

  • 함수나 블록 밖에 정의된 변수는 전역 변수라고 합니다.

  • 이는 프로그램의 전체 라이프사이클 동안 사용할 수 있습니다.

  • 이는 모든 함수나 블록 밖의 프로그램의 상단에 선언됩니다.

  • 이는 프로그램의 어떤 부분에서든 접근할 수 있습니다.

//전역 변수
package main
import "fmt"
// 전역 변수 선언
var myvariable1 int = 100
func main() {
    // 메인 함수 내의 지역 변수
    var myvariable2 int = 200
    //전역 변수 표시
    fmt.Printf("전역 변수 myvariable1 의 값은 : %d\n", myvariable1)
    //지역 변수 표시
    fmt.Printf("지역 변수 myvariable2 의 값은 : %d\n", myvariable2)
    //함수 호출
    display()
}
func display() {
    // 전역 변수 표시
    fmt.Printf("전역 변수 myvariable1 의 값은 : %d\n", myvariable1)
}

출력:

전역 변수 myvariable1 의 값은 : 100
지역 변수 myvariable2 의 값은 : 200
전역 변수 myvariable1 의 값은 : 100

주의:함수 내에 전역 변수와同名의 지역 변수가 있는 경우 어떻게 될까요?

답은 간단합니다. 즉, 컴파일러는 지역 변수를 우선 선택합니다. 일반적으로 동일한 이름을 가진 두 개의 변수가 정의되면 컴파일러는 컴파일 시에 오류를 발생시킵니다. 그러나 변수가 다른 범위에서 정의되면 컴파일러는 그것을 허용합니다. 전역 변수와同名의 지역 변수가 정의되면 컴파일러는 그 지역 변수를 우선 고려합니다.

예제:아래의 프로그램에서 출력을 명확히 볼 수 있습니다. myvariable1의 값은200, 이는 함수 main에서 제공됩니다. 따라서 지역 변수가 전역 변수보다 높은 우선순위를 가질 수 있다고 말할 수 있습니다.

//Go 프로그램은 컴파일러의 우선순위를 표시합니다
//전역 변수 상의 지역 변수
package main
import "fmt"
//전역 변수 선언
var myvariable1 int = 100
func main() {
    //메인 함수 내의 지역 변수
    //전역 변수와 같습니다
    var myvariable1 int = 200
    // 표시
    fmt.Printf("변수 myvariable1 의 값은 : %d\n", myvariable1)
}

출력:

변수 myvariable1 의 값은 : 200