Go에서는 기본적으로 두 가지 할당 방법이 존재한다. 바로 new와 make이다.
new는 메모리를 할당하는 내장 함수이긴 하지만 다른 언어에서의 new와는 좀 다르다.
Go언어의 new는 메모리를 초기화(Initialize)하는 것이 아니라 제로값(zero)로 설정함
즉, new(T) 는 T라는 타입의 새로운 item을 위해 제로 값으로 세팅된 메모리 공간을 할당하고 그 주소(*T)를 반환함
여기서 제로 값은 T타입의 제로 값을 의미함.
new에 의해 제로 값으로 세팅 된 메모리가 반환 되기 때문에 데이터 구조체를 설계할 때 별도의 초기화가 필요하지 않음
new로 구조체를 생성한 후 바로 사용할 수 있음
때로는 제로 값만으로 충분하지 않고 생성자를 초기화 하는 것이 필요한 경우도 존재함
func NewFile(fd int, name string) *File {
if fd < 0 {
return nil
}
f := new(File)
f.fd = fd
f.name = name
f.dirinfo = nil
f.nepipe = 0
return f
}
func NewFile(fd int, name string) *File {
if fd < 0 {
return nil
}
f := File{fd, name, nil, 0}
return &f
}