변수란 값을 저장하는 메모리 상의 공간.
값에 접근해 값을 변경하는데 사용한다. 변수는 이름, 값, 타입, 주소 속성을 갖으며 변수 간 값의 전달은 항상 복사로 일어남
// 변수 선언
var num0 int
var : 변수를 선언하는 키워드
num0 : 변수명
int : 변수 타입
초깃값 생략. 초깃값은 타입별 기본값으로 대체
// 변수 선언 및 초기화
var num1 int = 10
var num2 = 20
var num2의 경우처럼 타입을 생략해도 자체적으로 변수 타입을 추론. 변수 타입은 우변 값의 타입이 됨
// 변수에 값 할당
num2 = 22
var 키워드와 타입을 선언하고 변수를 선언 가능
// 짧은 변수 선언
num2 := 30
선언 대입문 :=을 사용해서 var 키워드와 타입 생략
📌선언 대입문 :=
선언 대입문이랑 말 그대로 선언과 대입을 한꺼번에 하는 구문.
선언 대입문을 사용하면 var 키워드와 타입을 생략해 변수를 선언 가능var b = 3.1415 // b는 float64 타입으로 자동 지정 c := 365 // c는 int 타입으로 자동 지정 s := "hello world" // s는 string 타입으로 자동 지정
// 변수 묶어서 선언 및 초기화
var num3, num4, int = 30, 40
var (
num5 int = 50
num6 int = 60
)
num7, num8 := 10, 20
상수는 변하지 않는 값. 변수는 대입문을 통해서 값을 수시로 바꿀 수 있지만 상수는 초기화된 값이 변하지 않음.
정수, 실수, 문자열 등 기본 타입값들만 상수로 선언될 수 있다.
구조체, 배열 등 기본타입 외의 타입에는 상수를 사용할 수 없음.
Go 언어에서 상수로 사용될 수 있는 타입
- 불리언
- 룬(rune)
- 정수
- 실수
- 복소수
- 문자열
// 상수 선언
const PI int = 3.14
// 재할당 불가
PI = 3.1415 //error
숫자를 증가시키면서 상수를 초기화
const (
a = iota
b
c
d
)
fmt.Println(a,b,c,d) //0 1 2 3
| 기본값 | 값의 범위 | 설명 |
|---|---|---|
| uint8 | 0 ~ 255 | 1바이트 부호 없는 정수 |
| uint16 | 0 ~ 65,535 | 2바이트 부호 없는 정수 |
| uint32 | 0 ~ 4,294,967,295 | 4바이트 부호 없는 정수 |
| uint64 | 0 ~ 18,446,744,073,709,551,615 | 8바이트 부호 없는 정수 |
| uint | 32비트 컴퓨터에서는 uint32 / 64비트 컴퓨터에서는 uint64 | |
| int8 | -128 ~ 127 | 1바이트 부호 있는 정수 |
| int16 | -32,768 ~ 32,767 | 2바이트 부호 있는 정수 |
| int32 | -2,147,483,648 ~ 2,147,483,647 | 4바이트 부호 있는 정수 |
| int64 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 8바이트 부호 있는 정수 |
| int | 32비트 컴퓨터에서는 int32 / 64비트 컴퓨터에서는 int64 | |
| float32 | 4바이트 실수 | IEEE-754 32 비트 실수/ 부동소수점, 7자리 정밀도 |
| float64 | 8바이트 실수 | IEEE-754 64 비트 실수 / 부동소수점, 12자리 정밀도 |
| complex64 | 8바이트 복소수 (진수, 가수) | float32 크기의 실수부와 허수부로 구성된 복소수 |
| complex128 | 16바ㅣ트 복소수 (진수, 가수) | float64 크기의 실수부와 허수부로 구성된 복소수 |
| uintptr | uint와 같은 크기를 갖는 포인터형 | |
| bool | 참, 거짓을 표현하기 위한 8비트 자료형 | |
| byte | 8비트 자료형 | |
| rune | 유니코드 저장을 위한 자료형 / int32의 별칭. UTF-8로 문자 하나를 나타낼 때 사용 | |
| string | 문자열을 저장하기 위한 자료형 |
var float1 float64 = 3.14
var num1 int = int(float1)
package main
import "fmt"
func main() {
var float1 float32 = 3.14
var int1 int = int(float1)
fmt.Printf(int1) // 3
fmt.Printf("%T \n", int1) // int
%T : 타입을 확인하는 기능
type MyInt int
var num1 MyInt = 10
num2 := MyInt(30)
package main
import "fmt"
func main() {
type MyInt int
var num1 MyInt = 10
num2 := MyInt(20)
fmt.Println(num1) //10
fmt.Println(num2) //20
fmt.Printf("%T %T \n", num1, num2) //main.MyInt main.MyInt
}