개요
Go 언어에서 정수 타입은 크게 두 가지 범주로 나눌 수 있어요.
- 아키텍처 독립적 타입 (Architecture-independent types)
- 아키텍처 의존적 타입 (Architecture-dependent types)
해당 부분에 대해서 알아보겠습니다.
1. 아키텍처 독립적 타입
이 타입들은 CPU 아키텍처와 관계없이 항상 동일한 크기를 가집니다:
- int8, uint8 (별칭: byte): 항상 1바이트
- int16, uint16: 항상 2바이트
- int32 (별칭: rune), uint32: 항상 4바이트
- int64, uint64: 항상 8바이트
2. 아키텍처 의존적 타입
이 타입들은 CPU 아키텍처에 따라 크기가 달라집니다:
- int, uint:
- 32비트 시스템에서 4바이트
- 64비트 시스템에서 8바이트
- uintptr: 포인터를 저장할 수 있는 부호 없는 정수 타입으로, int/uint와 동일한 크기
'int' 타입의 특징
- 크기 변동
- 32비트 시스템: int는 32비트 (4바이트)
- 64비트 시스템: int는 64비트 (8바이트)
- 사용 시 주의사항
- 크로스 플랫폼 개발 시 int의 크기 변동을 고려해야 함
- 정확한 크기가 필요한 경우 int32나 int64 같은 명시적 타입 사용 권장
- 예시
import "unsafe"
func main() {
var i int
fmt.Printf("Size of int: %d bytes\n", unsafe.Sizeof(i))
// 32비트 시스템에서: "Size of int: 4 bytes"
// 64비트 시스템에서: "Size of int: 8 bytes"
}
정리
- rune (int32), int8, int16, int64 등은 아키텍처와 무관하게 고정된 크기
- int와 uint는 CPU 아키텍처에 따라 크기가 변동됨
- 크로스 플랫폼 호환성이 중요한 경우, 명시적 크기의 타입 (int32, int64 등) 사용 권장
- int 타입은 일반적인 용도로 효율적이지만, 정확한 크기가 필요한 경우 주의 필요
'프로그래밍 > Golang' 카테고리의 다른 글
Golang Error 인터페이스 (0) | 2024.08.07 |
---|---|
Golang에서 문자열 자르기 (0) | 2024.08.07 |
Golang string 과 rune / 한글(멀티바이트) 이슈 (0) | 2024.08.06 |
Golang: 동일성(Identity) vs 동등성(Equality) (0) | 2024.08.03 |
Golang 값을 전달할까, 포인터를 전달할까? (0) | 2024.08.02 |