1. 변수의 특성
변수는 이름, 값, 주소, 타입 이라는 4가지 속성을 가지고 있다.
이름 과 값은 기초 -2 에 있다.
주소 : 메모리상의 위치를 나타내기 위해서는 주소가 필요하다. 1바이트씩 주소를 매기는데 변수는 주소를 가진다.
타입 : 변수의 타입(정수,실수,문자열 등) -> 타입은 사이즈를 가지고 있고 그 사이즈는 고정되어 있다.
(int32-> 사이즈 : 4바이트)
var a(이름) int(타입) = 10(값)
2. 타입
(1) 숫자 타입 : 정수, 실수
uint8, uint16, uint32, uint64 : unsigned integer의 약자로 부호없는 정수이다.
int8, int16, int32, int64 : integer의 약자로 부호 있는 정수이다.
float32, float64 : 실수 , 소수점이 있는 숫자를 나타낼때
바이트 : uint8과 같다 -> 부호없는 1바이트
rune : 문자 1개를 나타내는 타입
int : 사이즈가 플랫폼에 따라서 달라진다 -> 32비트 컴퓨터라면 int32, 64비트 컴퓨터라면 int64이다.
uint : int와 동일한 방법으로 사이즈를 가진다.
(2) 그 외 타입
bool : true 또는 false를 값으로 가진다.
string : 문자열
배열 : [] -> 같은 타입의 요소를 여러개 가짐
슬라이스 : 사이즈가 정해져있지 않은 배열
구조체, 포인터, 함수타입, 맵, 인터페이스, 채널 등등이 있다.
(3) 별칭 타입
rune : int32
byte : uint8 등등
type Myint int 라고 정해주면 int나 Myint로 적어줄 수 있다.
3. 여러가지 변수 선언법
var a int = 10
var a int : a는 기본값 0을 가짐
var a = 10 : 뒤의 값의 타입과 같아짐 -> a는 int를 가진다 -- 타입을 생략하면 반드시 초기값을 적어줘야 한다.
a:=10 : 선언 대입문으로 변수를 선언하면서 대입하는 것이다 var a = 10 과 같은 의미이다. 이 형태를 많이 쓴다.
4. 여러가지 선언
package main
import "fmt"
func main(){
var a int = 3
var b int
var c = 4
d := 5
var e = "Hello"
f := 3.14
fmt.Println(a,b,c,d,e,f)
}
5. 타입 변환
package main
import "fmt"
func main (){
a := 3 // 3은 int 따라서 나는 64비트컴퓨터이기 때문에 int64와 같지만 정확히는 int이다.
var b float64 = 3.5
var c int = int(b) // 실수를 정수로 바꾸면 소숫점 아래값은 사라진다 (버림)
d := float64(a) * b
var e int64 = 7
f := a * int(e)
// int가 int64라도 int와 int64는 다른 타입으로 받아들인다.
fmt.Println(a,b,c,d,e,f)
// 3 3.5 3 10.5 7 21
}
// 타입 변환도 int를 string으로 바꾸는건 안된다 : go에서 허용하는 타입변환만 가능
6. 타입별 값의 범위
자료형 | 저장범위 | 설명 |
uint8 | 0 ~ 255 | 부호 없는 8비트 정수형 |
uint16 | 0 ~ 65,535 | 부호 없는 16비트 정수형 |
uint32 | 0 ~ 4,294,967,295 | 부호 없는 32비트 정수형 |
uint64 | 0 ~ 18,446,744,073,709,551,615 | 부호 없는 64비트 정수형 |
uint | 32비트 or 64비트 | |
int8 | -128 ~ 127 | 부호 있는 8비트 정수형 |
int16 | -32,768 ~ 32,767 | 부호 있는 16비트 정수형 |
int32 | -2,147,483,648 ~ 2,147,483,647 | 부호 있는 32비트 정수형 |
int64 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 부호 있는 64비트 정수형 |
int | 32비트 or 64비트 | |
float32 | 32비트, 소수점7자리까지 표현 | |
float64 | 64비트, 소수점15자리까지 표현 | |
complex64 | float32 실수,허수로 구성된 복소수 | |
complex128 | float64 실수,허수로 구성된 복소수 | |
uintptr | uint와 같은 크기의 포인터형 | |
bool | true or false값의 8비트 자료형 | |
byte | 8비트 자료형 | |
rune | 유니코드 저장 자료형, uint와 크기동일 | |
string | 문자열을 저장하기 위한 자료형 |
7. 타입변환 주의사항
float을 int로 바꾸면 소숫점이 날아감
큰그릇의 값을 작은그릇에 옮기려면 큰그릇의 값이 버려질수 있다.
작은 그릇의 값을 큰그릇의 값에 롬기면 다 들어간다.
package main
import "fmt"
func main(){
var a int16 = 3456 //a는 int16타입 -> 2바이트 정수
var b int8 = int8(a) // int16-> int8
fmt.Println(a,b) // 3456 -128
}
2진수로 표현된 1바이트 1바이트 로 구성되있다가 작은 1바이트 하나로 값을 옮기려면 앞의 바이트가 날아간다.
-> 상위 1바이트가 없어진다. -> 큰타입에서 작은타입으로 값을 이동할 때 값이 짤릴수 있다.
8. 변수 범위
package main
import "fmt"
var g int = 10
func main(){
var m int = 20
{
var s int = 50
fmt.Println(m,s,g)
}
m = s + 20 //에러난다.
}
g 는 패키지 전역변수이다. package안에서 모두 사용할수 있다.
s 는 {}안에 있기 때문에 그 변수는 {}안에서만 유효하다. 이를 지역변수라 한다.
9. 숫자타입 표현
2진수 정수 표현
0 000000000110000
맨앞의 0을 부호비트라고 하는데 부호비트가1이면 음수이다.
2진수 실수 표현
float 32비트 소수부 : 7자리까지 가능
float 64비트 소수부 : 15자리까지 가능
부호비트 지수부(8비트) 소수부(23비트)
152.345 = 0.152345 x 10의 3승 => 지수표현이라고 한다
152345, 3 두숫자만 알면 숫자 표현 가능
float은 소숫점 자리수가 한정되어 있기 때문에 소숫점 계산을 하면 할수록 오차가 심해질수 있다.
이를 생각하면서 코드를 짜야한다.
'개발 > Go' 카테고리의 다른 글
[Go] 연산자 (0) | 2022.08.10 |
---|---|
[Go] Golang fmt 패키지 (0) | 2022.08.03 |
[Go] Golang 기초 - 2 (0) | 2022.08.02 |
[Go] Golang 기초 - 1 (0) | 2022.07.26 |
[Go] Go 설치 및 기초 (0) | 2022.07.25 |