20241223

타입 및 변수 관련- go 언어

 Go 언어의 타입 과 변수 변수선언 관련

- 어쩌면, 프로그래밍 서적 대부분이, 개념 설명 보다가, 설치하고, 변수관련 설명쯤 볼때즘, 우선 책을 잠시 덥어두는듯 합니다. 그래서, 책은 매우 얇은, 아주 아주 액기스 같은 기본골격만 있는 책이, 가장 좋은책 같아요. 악세사리가 많은 책은, 공부에 방해가 된다고 생각합니다. 그러나, 저는 액기스가 뭔지를 모릅니다. ^^


기본타입: 정수, 부동소수점, 문자열, 불리언

복합타입: 배열, 슬라이스, 맵, 구조체, 인터페이스


reflect.TypeOf(알고자 하는 숫자나 문자 값) 

package main

import (

               "fmt"

               "reflect"

)

-------------------------------------------------------

int - 정수(기본 정수 타입)

int81바이트-128 ~ 127
int162바이트-32,768 ~ 32,767
int324바이트-2,147,483,648 ~ 2,147,483,647
int648바이트-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

uint플랫폼 종속부호 없는 기본 정수
uint81바이트0 ~ 255
uint162바이트0 ~ 65,535
uint324바이트0 ~ 4,294,967,295
uint648바이트0 ~ 18,446,744,073,709,551,615

float64 - 부동 소숫점, 숫자, 소숫점 있는 숫자

float324바이트단정밀도 부동소수점
float648바이트배정밀도 부동소수점

bool - 참, 거짓 둘중에 하나만 가짐

string - 문자, 글짜, 문자열

string: UTF-8 문자열을 저장.

byte: uint8의 별칭. ASCII나 바이트 데이터를 저장.

rune: int32의 별칭. UTF-8 인코딩의 문자를 저장.


배열 (Array)- 고정 크기를 가지며, 동일한 타입의 데이터를 저장.

문법: [크기]타입

var arr [3]int = [3]int{1, 2, 3}

슬라이스 (Slice)- 배열의 가변 크기 버전으로, 길이가 동적으로 변경 가능. 

문법: []타입

var slice []int = []int{1, 2, 3}


맵 (Map)- 키-값 쌍을 저장하는 해시 테이블.

문법: map[키_타입]값_타입

var m map[string]int = map[string]int{"a": 1, "b": 2}


구조체 (Struct)- 여러 필드를 묶어서 정의.

문법: type 이름 struct

type Person struct
     Name string 
     Age int
var p Person = Person{Name: "Alice", Age: 25}
fmt.Println(p)

포인터 (Pointer)- 값의 메모리 주소를 저장.

문법: *타입

var x int = 42  //명시적 선언
var p *int = &
fmt.Println(*p)


타입 변환- Go에서는 명시적 타입 변환만 허용됩니다. 암시적 변환은 허용되지 않습니다.

var a int = 10 // 명시적 선언 var b float64 = float64(a) // int -> float64 fmt.Println(b)


타입 추론- var 키워드나 :=를 사용하면 Go가 자동으로 타입을 추론합니다.

var a = 10 // int로 추론, 타입 추론 b := "Hello" // 짧은선언, string으로 추론 var 키워드 없이, 함수안에서만 사용함. fmt.Println(a, b)


인터페이스 타입- Go는 빈 인터페이스 (interface{})를 통해 모든 타입을 받을 수 있습니다.커스텀 인터페이스를 정의하면 특정 메서드를 구현하는 타입에 제한을 걸 수 있습니다.

reflect 패키지의 TypeOf() 함수로 - 타입을 알아볼수도 있습니다.

type Speaker interface {

    Speak() string

}

type Dog struct{}

func (d Dog) Speak() string {

    return "Woof"

}

func main() {

    var s Speaker = Dog{}

    fmt.Println(s.Speak()) // Woof

}


사용자 정의 타입- type 키워드를 사용해 새로운 타입을 정의할 수 있습니다.

type MyInt int

var x MyInt = 10

fmt.Println(x) // 10


변수(varible) = 값이 있는 저장소

변수는 var로 선언하고, 변수이름, 변수 타입순서로 작성 합니다.변수는 문자로 시작하며, 첫글짜가 대문자면[외부 패키지에서 접근 가능], 첫글짜가 소문자면[동일한 패키지에서만 접근 가능]하고, 변수는 공백이 없어야 하고, 타입이 같아야 하며,타입 변환이 가능함.

선언된 변수가 사용되지 않으면, 에러가 발생되기에, 프로그램에서 삭제합니다.

변수 선언 = 변수에 이름을 부여하는것

var = 키워드로 변수를 선언할때 사용함. 

         명시적선언: 초기값 지정

         초기값 없으면: 기본값 사용됨.

[변수 선언]

var name int // var 변수선언 키워드, 변수 이름, 변수 타입 지정

var count1, count2 float64 // 동일한 타입은 끝에 한번만 입력으로 선언도 가능

[변수에 값 할당]

count1, count2 = 1.1, 1.2 // 여러 변수를 한꺼번에 할당 가능

                                         // 변수와 값의 갯수가 일치해야 됨.

[변수 선언과 값 할당]

var count int = 2

var count1, count2 float64 = 1.1, 1.2

[단축 변수 선언]

count := 2 //변수를 선언과 동시에 값을 할당, 짧은 선언(타입 자동 추론).

                   // var를 생략하고 사용하며, 함수내에서만 사용할수 있습니다.

                  // 함수(func) 밖에서는, var를 사용해야 합니다.

count = 2 // 변수를 선언한것이 아니라, 값만 할당한것임. 문제됨.

 

[표준 라이브러리의 기능적인 타입]

var now time.Time = time.Now()
fmt.Println(now)

time.Time 는 now 변수의 타입입니다. 없어도 자동 추론 됩니다.

Go 언어의 표준 라이브러리인 time 패키지에서 제공하는 구조체 타입입니다.

time.Time, http.Request 는, 표준 라이브러리의 기능적인 타입이라고 합니다.

int, float64, bool, string 는, 기본 데이타 타입(Primitive Type)이라고 합니다.