반응형
변수
변수는 값을 저장하는 메모리 공간을 가리키는 이름이다. Go에서 변수 선언은 아래와 같은 형태로 선언한다
var (변수명) (자료형) = (초기화값)
변수의 4가지 속성
- 이름 : 프로그래머는 이름을 통해 값이 저장된 멤리 공간에 쉽게 접근이 가능하다
- 값 : 변수가 가리키는 메모리 공간에 저장된 값이다
- 주소 : 변수가 저장된 메모리 공간의 시작 주소를 말한다. 변수 이름이 메모리 시작 주소인 것이다.
- 타입 : 변수값의 형태를 말한다. 정수타입, 실수타입, 문자열타입 등 다양한 타입이 있다.
대입연산자는 다른 프로그래밍 언어와 동일하게 '='이다. 그리고 Go언어의 자료형 종류에는 아래 링크를 참조하자
변수 선언의 다른 형태
Go언어에는 다양한 형태의 변수 선언 방법이 있다.
func var3(){
var a int = 3 // 기본 형태의 변수선언이다.
var b int // 초기화 과정을 생략해줄 수 있다.
var c = 4 // 타입을 생략할 수 있다. 변수타입은 우변의 값의 타입에 따라 결정된다. 정수형은 기본 자료형이 int, 실수형은 기본 자료형이 float64이다.
d := 5 // 선언대입문이다. 선언과 대입을 한꺼번에 하는 구문이다. 선언 대입문을 사용하면 var키워드와 타입지정 과정을 생략해 선언할 수 있다.
fmt.Println(a,b,c,d)
}
여기서 눈여겨 볼것은 네번째의 := 이다.
선언 대입문 ':='
선언대입문은 선언과 대입을 한번에 하는 구문이다. 선언대입문을 사용하면 var 키워드와 타입을 생략해 변수를 선언할 수 있다. 아래 두 코드는 동일한 코드이다. 선언대입문은, 타입을 생략하는 방식이므로, 우변의 데이터에 따라 타입이 결정된다. 만약 정수형인 경우에는 int로, 실수인 경우에는 float64로 결정된다.
var a int = 10
a := 10
타입 변환
Go는 강타입 언어중에서도 매우 강한 강타입 언어이다. 어느정도냐면 int64, int8 모두 정수형이지만, 이 두가지 자료형끼리 연산하는것이 불가능하다. 서로 완전한 동일한 자료형이어야만 가능하다. Go에서 형변환을 하기 위해서는 타입명을 적고 괄호안에 변수를 넣어준다.
package main
import "fmt"
func var4(){
// Go언어는 강타입중에서도 타입검사를 강하게 하는 최강타입 언어이다.
a := 3 // int
var b float64 = 3.5 // float64
// var c int = b; // float64변수를 int에 대입 불가
// d := a * b // int, float64 : 다른 타입의 변수간 연산 불가
var e int64 = 7
// f := a * e // int, int64동일한 숫자형 타입이지만, 타입이 다르기 때문에 연산 불가.
// 같은 숫자값이라도 타입이 다르면 연산이 안된다. 이럴때는 형변환을 해주어야한다.
// 이러한 것을 타입 반환 이라고 한다. 타입명을 적고 ()안에 변수를 적어주면된다.
d := a * int(b) // 실수형을 int형으로 바꾸면 정수부분만 남음
f := int64(a) * e
fmt.Println(a,d,f)
}
변수 Scope
변수 스코프는 다른 프로그래밍 언어와 같다. 해당 변수가 선언된 코드 블록내에서만 접근이 가능하다. 그리고 Go언어에도 전역변수가 있다. 정확히는 패키지 전역변수 선언이라고 한다. 패키지 전역변수는 동일한 패키지 내에서 어디서든지 접근할 수 있다. 단 주의할 점은 패키지 전역변수는 선언대입문(:=)으로 초기화할 수 없고, 일반적인 변수 선언 리터럴혀애로 선언해야한다.
package main
import "fmt"
var g int = 10 // 패키지 전역변수이다. 동일한 패키지 내에서 어디서든 접근이 가능하다.
//g1 := 20 // 패키지 전역변수 선언시에는 선언대입문을 사용하면 안된다. 일반 변수 리터럴을 사용해야한다.
func var5(){
var m int = 20
{
var s = 50
fmt.Println(m,s,g)
}
//m = s + 20 // s는 내부 스코프 안에서 소멸되므로 사용할 수 없다.
}
반응형
'Language > GO' 카테고리의 다른 글
[GO] 함수 (0) | 2022.02.16 |
---|---|
[GO] fmt패키지를 이용한 텍스트 입출력하기 (0) | 2022.02.16 |
[Go] 패키지 (0) | 2022.02.16 |
[GO] Hello GO (0) | 2022.01.28 |
[GO] GO 시작하기(feat. Apple Sillicon, 개발환경 구축, hello world출력) (0) | 2022.01.28 |