golang 기초 - 변수와 상수, 타입

한나리·2023년 6월 16일

Go

목록 보기
1/19
post-thumbnail

변수와 상수, 타입

변수

변수란 값을 저장하는 메모리 상의 공간.
값에 접근해 값을 변경하는데 사용한다. 변수는 이름, 값, 타입, 주소 속성을 갖으며 변수 간 값의 전달은 항상 복사로 일어남

// 변수 선언
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

📝 추가 학습

* iota

숫자를 증가시키면서 상수를 초기화

const (
	a = iota
    b
    c
    d
)
fmt.Println(a,b,c,d) //0 1 2 3

데이터 타입

기본값값의 범위설명
uint80 ~ 2551바이트 부호 없는 정수
uint160 ~ 65,5352바이트 부호 없는 정수
uint320 ~ 4,294,967,2954바이트 부호 없는 정수
uint640 ~ 18,446,744,073,709,551,6158바이트 부호 없는 정수
uint32비트 컴퓨터에서는 uint32 / 64비트 컴퓨터에서는 uint64
int8-128 ~ 1271바이트 부호 있는 정수
int16-32,768 ~ 32,7672바이트 부호 있는 정수
int32-2,147,483,648 ~ 2,147,483,6474바이트 부호 있는 정수
int64-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,8078바이트 부호 있는 정수
int32비트 컴퓨터에서는 int32 / 64비트 컴퓨터에서는 int64
float324바이트 실수IEEE-754 32 비트 실수/ 부동소수점, 7자리 정밀도
float648바이트 실수IEEE-754 64 비트 실수 / 부동소수점, 12자리 정밀도
complex648바이트 복소수 (진수, 가수)float32 크기의 실수부와 허수부로 구성된 복소수
complex12816바ㅣ트 복소수 (진수, 가수)float64 크기의 실수부와 허수부로 구성된 복소수
uintptruint와 같은 크기를 갖는 포인터형
bool참, 거짓을 표현하기 위한 8비트 자료형
byte8비트 자료형
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
   
}
    
profile
내가 떠나기 전까지는 망하지 마라, 블록체인 개발자

0개의 댓글