var slice = []int{1,2,3}
slice2 := append(slice,4)
var array = [...]int{1,2,3} // 길이가 3인 배열
var slice = []int{1,2,3} // 슬라이스
var map1 map[string]int = make(map[string]int)
var map2 = make(map[string]int) // 자료형 생략
map3 := make(map[string]int) // 리터럴 형
여러 변수의 타입을 담아 하나의 형태로 만들 때 사용, 데이터 필드의 모음, 고정된 고유 필드 집합을 구성하여 선언
type Persons struct {
Name string
Age int
Pnum string
}
var pers Persons
pers.Name = "codz"
pers.Age = 23
pers.Pnum = "01098765432"
new를 이용해 구조체를 할당받아 각 요소별 초기화하는 과정 및 형식
// 방법 1
p1 := new(Persons)
// 방법 2
var p2 = new(Persons)
// 방법 3
var p3 = &Persons{"test", 17, "01045673210"}
// 방법 4 - 배열 형식
p4 := []Persons{
Persons{
Name: "p1",
Age: 10,
Pnum: "9876",
},
Persons{
Name: "p2",
Age: 9,
Pnum: "8765",
},
}
인터페이스는 메서드의 집합, 메서드의 원형(prototype, 메서드 자체를 구현하지는 않음)들의 집합
type Persons interface {
Student() int
Player() string
}
함수 매개변수, 리턴 값, 구조체 필드등으로 사용가능 → 어떤 타입으로도 변환이 가능하다
모든 타입을 나타내기 위해 빈 인터페이스를 사용한다.
package main
import "fmt"
func main() {
var a interface{}
printInterface(a)
a = 7.5
printInterface(a)
a = "Golange"
printInterface(a)
a = true
printInterface(a)
a = nil
printInterface(a)
}
func printInterface(v interface{}) {
fmt.Printf("Type : (%T) ", v) // 원본타입
fmt.Println("입력된 값 : ", v)
}
interface.(type)을 이용하면 형변환 하여 사용할 수 있다.
실행(Runtime) 시에는 인터페이스에 할당한 변수를 실제 타입으로 변환 후 사용해야 하는 경우
인터페이스.(타입) 형태로 사용
package main
import (
"fmt"
"reflect"
)
func main() {
var a interface{} = 15
b := a
c := a.(int)
fmt.Println("a : ", a)
fmt.Println("a Type : ", reflect.TypeOf(a))
fmt.Println("b : ", b)
fmt.Println("b Type : ", reflect.TypeOf(b))
fmt.Println("c : ", c)
fmt.Println("c Type : ", reflect.TypeOf(c))
fmt.Println()
// 저장된 실제 타입 검사
if v, ok := a.(int); ok {
fmt.Println("반환된 값은? : ", v, "반환 여부 : ", ok)
}
}
switch 타입 검사를 할 수 있다.
어떤 타입이든 받을 수 있기 때문에 아래 예제처럼 타입별로 결과를 다르게 처리할 수 있다.
package main
import (
"fmt"
)
func checkType(arg interface{}) {
switch arg.(type) {
case bool:
fmt.Println("bool type : ", arg)
case int, int8, int16, int32, int64:
fmt.Println("int type : ", arg)
case float64:
fmt.Println("float type : ", arg)
case string:
fmt.Println("string type :", arg)
case nil:
fmt.Println("nil type :", arg)
default:
fmt.Println(arg)
}
}
func main() {
checkType(false)
checkType(1)
checkType(11.111)
checkType(nil)
checkType("Hello!")
}
new() : 메모리를 할당하는 내장 함수
특정 데이터 타입에 대해서는 초기화를 해주는 작업이 필요하다 이때 사용하는 함수가 make() 함수