var 키워드 사용한 변수 선언
var 변수이름 타입
값의 할당
var 변수이름 타입
변수이름 = 값
선언과 할당의 통합
var 변수이름 타입 = 값
| := 단축 선언 연산자 사용
- 변수 선언 시 := 를 사용하여 타입을 생략하고 값을 자동으로 추론
- 이 방법은 함수 내부에서만 사용 가능
- 권장X
변수이름 := 값
예시
x := 10 // x는 int 타입으로 자동 추론
| 여러 변수 선언
예시
var x, y int
var x, y int = 100, 200
x, y := 10, 20
| 상수 선언
const 키워드 사용
const Pi = 3.14
| 전역 변수 선언
- 전역 변수는 var 키워드 사용하여 함수 외부에서 선언
- 모든 함수에서 접근 가능
데이터 타입 (C와 많이 비슷)
- 기본형 (Primitive Types): Go에서 제공하는 기본 데이터 타입으로, 숫자, 문자열, 논리형, 복소수 등 포함.
- 연속형 (Composite Types): 여러 값들을 묶어서 다룰 수 있는 데이터 타입으로, 배열, 슬라이스, 맵, 구조체, 채널 등 포함.
메모리 크기
- int와 uint는 플랫폼에 따라 다르므로 32비트 플랫폼에서는 4바이트, 64비트 플랫폼에서는 8바이트로 할당된다.
- 슬라이스의 크기는 기본적으로 슬라이스 자체가 24바이트로 시작하고, 그 이후 요소들이 추가됨에 따라 크기가 달라진다.
- 배열은 고정된 크기를 가지므로 크기는 요소 수 * 요소 크기로 계산된다. 예를 들어 int 배열은 각 요소가 4바이트이므로, n개의 요소를 가진 배열은 n * 4 바이트가 된다.
unsigned int 는 sql에서도 사용할 수 있다. => 프로그램 자료공간을 더 효율적으로 쓸 수 있다.
// 동일 폴더 내의 같은 패키지는 하나의 실행 파일로 묶인다.
// 이 때, main함수는 하나만 존재해야 하므로 폴더를 구분하여 main의 중복 선언 문제를 해결한다.
package main
import "fmt"
func main() {
var unitName string = "Marine"
var unitHP int = 40
var unitAttack uint = 6
var unitArmor uint = 0
var attackSpeed float32 = 0.86
var isFlying bool = false
fmt.Println("유닛 정보:")
fmt.Println("이름:", unitName)
fmt.Println("체력:", unitHP)
fmt.Println("공격력:", unitAttack)
fmt.Println("방어력:", unitArmor)
fmt.Println("공격 속도:", attackSpeed)
fmt.Println("공중 유닛 여부:", isFlying)
}
var marineAttack int8 = 6 // 마린 공격력 (int8)
var marineHP int16 = 40 // 마린 체력 (int16)
var zerglingAttack int8 = 5 // 저글링 공격력 (int8)
var zerglingHP int16 = 35 // 저글링 체력 (int16)
var siegeTankAttack int32 = 70 // 시즈탱크 공격력 (int32)
var siegeTankHP int64 = 150 // 시즈탱크 체력 (int64)
fmt.Println("유닛 기본 속성: ")
fmt.Println("마린 - 공격력: ", marineAttack, "\t체력: ", marineHP)
fmt.Println("저글링 - 공격력:", zerglingAttack, "\t체력:", zerglingHP)
fmt.Println("시즈탱크 - 공격력:", siegeTankAttack, "\t체력:", siegeTankHP)
// 복소수 complex
var marinePosition complex64 = 5 + 2i // 마린의 위치
var zerglingPosition complex64 = 3 + 4i // 저글링의 위치
var siegeTankPosition complex128 = 7 + 10i // 시즈탱크의 위치
// 유니코드 아이콘 (문자 데이터 타입) rune
var marineIcon rune = '⚔' // 마린 아이콘 (검 모양)
var zerglingIcon rune = '🐜' // 저글링 아이콘 (개미 모양)
var siegeTankIcon rune = '🚜' // 시즈탱크 아이콘 (탱크 상징)
fmt.Println("\n유닛 아이콘:")
fmt.Println("마린 아이콘:", string(marineIcon))
fmt.Println("저글링 아이콘:", string(zerglingIcon))
fmt.Println("시즈탱크 아이콘:", string(siegeTankIcon))
// 포인터 크기 데이터 타입
var mapIdentifier uintptr = 12345678 // 맵의 고유 식별자
fmt.Println("\n맵 정보:")
fmt.Println("맵 식별자:", mapIdentifier)
// 배열 array : 고정 크기의 배열
var unitHP [3]int = [3]int{40, 35, 150} // 유닛 체력 배열
fmt.Println("유닛 체력 (배열):")
fmt.Println("마린 체력:", unitHP[0])
fmt.Println("저글링 체력:", unitHP[1])
// 슬라이스 slice : 가변 크기의 배열
var unitNames []string = []string{"Marine", "Zergling", "Siege Tank"}
fmt.Println("\n유닛 이름 (슬라이스):")
fmt.Println("첫 번째 유닛:", unitNames[0])
fmt.Println("두 번째 유닛:", unitNames[1])
fmt.Println("세 번째 유닛:", unitNames[2])
// map[키타입][값타입]
var unitAttack map[string]int = map[string]int{
"Marine": 6,
"Zergling": 5,
"Siege Tank": 70,
}
fmt.Println("\n유닛 공격력 ")
fmt.Println("마린 공격력: ", unitAttack["Marine"])
fmt.Println("저글링 공격력:", unitAttack["Zergling"])
fmt.Println("시즈탱크 공격력:", unitAttack["Siege Tank"])
// 구조체 struct
type Unit struct {
Name string
HP int
Attack int
IsFlying bool
}
var marine Unit = Unit{Name: "Marine", HP: 40, Attack: 6, IsFlying: false}
var zergling Unit = Unit{Name: "Zergling", HP: 35, Attack: 5, IsFlying: false}
var siegeTank Unit = Unit{Name: "Siege Tank", HP: 150, Attack: 70, IsFlying: false}
fmt.Println("\n유닛 상세 정보 (구조체):")
fmt.Println("마린 이름:", marine.Name, "체력:", marine.HP, "공격력:", marine.Attack, "공중 여부:", marine.IsFlying)
fmt.Println("저글링 이름:", zergling.Name, "체력:", zergling.HP, "공격력:", zergling.Attack, "공중 여부:", zergling.IsFlying)
fmt.Println("시즈탱크 이름:", siegeTank.Name, "체력:", siegeTank.HP, "공격력:", siegeTank.Attack, "공중 여부:", siegeTank.IsFlying)
struct
- 멤버변수만 있는 클래스
- 구조체는 여러 필드를 그룹화하여 하나의 복합 데이터 타입을 만드는 데 사용된다.
- type 키워드를 사용하여 새로운 타입을 정의한다.
'IT > Go' 카테고리의 다른 글
메서드 리시버 (0) | 2025.01.29 |
---|---|
Golang Live Reloading command line utility (0) | 2025.01.23 |
Java Spring Boot 애플리케이션에서 Go REST API 호출 (0) | 2025.01.22 |
Go 언어 개발 환경 구성 (1) | 2024.12.26 |
Go언어란 (0) | 2024.12.26 |