Go-변수

변수는 프로그램이 조작 할 수있는 저장 영역에 주어진 이름 일뿐입니다. Go의 각 변수에는 변수 메모리의 크기와 레이아웃, 해당 메모리 내에 저장할 수있는 값 범위, 변수에 적용 할 수있는 작업 집합을 결정하는 특정 유형이 있습니다.

변수 이름은 문자, 숫자 및 밑줄 문자로 구성 될 수 있습니다. 문자 또는 밑줄로 시작해야합니다. Go는 대소 문자를 구분하기 때문에 대문자와 소문자는 구별됩니다. 이전 장에서 설명한 기본 유형에 따라 다음과 같은 기본 변수 유형이 있습니다.

Sr. 아니요 유형 및 설명
1

byte

일반적으로 단일 옥텟 (1 바이트)입니다. 이것은 바이트 유형입니다.

2

int

기계에서 가장 자연스러운 정수 크기입니다.

float32

단 정밀도 부동 소수점 값.

Go 프로그래밍 언어를 사용하면 열거 형, 포인터, 배열, 구조 및 유니온과 같은 다양한 유형의 변수를 정의 할 수 있습니다. 이에 대해서는 다음 장에서 설명합니다. 이 장에서는 기본적인 변수 유형에만 초점을 맞출 것입니다.

Go의 변수 정의

변수 정의는 컴파일러에게 변수에 대해 생성 할 저장소의 위치와 양을 알려줍니다. 변수 정의는 데이터 유형을 지정하고 다음과 같이 해당 유형의 하나 이상의 변수 목록을 포함합니다.

var variable_list optional_data_type;

여기, optional_data_type byte, int, float32, complex64, boolean 또는 모든 사용자 정의 개체 등을 포함하는 유효한 Go 데이터 유형입니다. variable_list쉼표로 구분 된 하나 이상의 식별자 이름으로 구성 될 수 있습니다. 몇 가지 유효한 선언이 여기에 표시됩니다.

var  i, j, k int;
var  c, ch byte;
var  f, salary float32;
d =  42;

진술 “var i, j, k;”변수 i, j 및 k를 선언하고 정의합니다. 컴파일러가 int 유형의 i, j 및 k라는 변수를 생성하도록 지시합니다.

변수는 선언에서 초기화 (초기 값 할당) 할 수 있습니다. 변수의 유형은 전달 된 값에 따라 컴파일러에 의해 자동으로 판단됩니다. 이니셜 라이저는 다음과 같이 등호와 상수 표현식으로 구성됩니다.

variable_name = value;

예를 들면

d = 3, f = 5;    // declaration of d and f. Here d and f are int

이니셜 라이저가없는 정의 : 정적 저장 기간이있는 변수는 암시 적으로 nil로 초기화됩니다 (모든 바이트의 값은 0). 다른 모든 변수의 초기 값은 데이터 유형의 0 값입니다.

Go의 정적 유형 선언

정적 유형 변수 선언은 주어진 유형 및 이름으로 사용 가능한 하나의 변수가 있음을 컴파일러에 보장하므로 컴파일러는 변수의 완전한 세부 사항없이 추가 컴파일을 진행할 수 있습니다. 변수 선언은 컴파일시에만 의미가 있으며 컴파일러는 프로그램 연결시 실제 변수 선언이 필요합니다.

변수가 유형으로 선언되고 주 함수 내부에서 초기화 된 다음 예제를 시도해보십시오.

package main

import "fmt"

func main() {
   var x float64
   x = 20.0
   fmt.Println(x)
   fmt.Printf("x is of type %T\n", x)
}

위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.

20
x is of type float64

Go의 동적 유형 선언 / 유형 추론

동적 유형 변수 선언은 컴파일러가 전달 된 값에 따라 변수 유형을 해석해야합니다. 컴파일러는 필수 요구 사항으로 정적으로 유형을 갖는 변수가 필요하지 않습니다.

변수가 유형없이 선언 된 다음 예제를 시도하십시오. 유형 추론의 경우 변수를 초기화했습니다.y : = 연산자와 함께 x = 연산자를 사용하여 초기화됩니다.

package main

import "fmt"

func main() {
   var x float64 = 20.0

   y := 42 
   fmt.Println(x)
   fmt.Println(y)
   fmt.Printf("x is of type %T\n", x)
   fmt.Printf("y is of type %T\n", y)	
}

위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.

20
42
x is of type float64
y is of type int

Go의 혼합 변수 선언

유형 추론을 사용하여 한 번에 여러 유형의 변수를 선언 할 수 있습니다.

package main

import "fmt"

func main() {
   var a, b, c = 3, 4, "foo"  
	
   fmt.Println(a)
   fmt.Println(b)
   fmt.Println(c)
   fmt.Printf("a is of type %T\n", a)
   fmt.Printf("b is of type %T\n", b)
   fmt.Printf("c is of type %T\n", c)
}

위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.

3
4
foo
a is of type int
b is of type int
c is of type string

Go의 lvalue와 rvalue

Go에는 두 종류의 표현이 있습니다.

  • lvalue− 메모리 위치를 참조하는 표현식을 "lvalue"표현식이라고합니다. lvalue는 할당의 왼쪽 또는 오른쪽으로 나타날 수 있습니다.

  • rvalue− rvalue라는 용어는 메모리의 일부 주소에 저장된 데이터 값을 의미합니다. rvalue는 할당 된 값을 가질 수없는 표현식입니다. 이는 rvalue가 할당의 왼쪽이 아닌 오른쪽에 나타날 수 있음을 의미합니다.

변수는 lvalue이므로 할당의 왼쪽에 나타날 수 있습니다. 숫자 리터럴은 r 값이므로 할당 할 수 없으며 왼쪽에 표시 할 수 없습니다.

다음 진술은 유효합니다-

x = 20.0

다음 문은 유효하지 않습니다. 컴파일 타임 오류를 생성합니다-

10 = 20