Golang zero-value 알아보기백엔드/Golang2024. 7. 9. 21:01
Table of Contents
반응형
Golang에서 zero-value는 변수의 타입에 따라서 할당되는 기본 초기값을 의미합니다.
Go에서 변수 선언시 초기값을 지정하지 않으면 해당 변수는 그 타입의 zero-value로 자동 초기화됩니다.
왜냐면 go는 empty, null 혹은 undefined의 개념이 없기 때문이죠
아래와 같은 이유로 Zero-value는 중요합니다.
- 예상 가능한 기본값: 초깃값을 명시하지 않아도 프로그램의 동작이 예측 가능하게 합니다.
- 명시적인 초기화 코드 감소: 명시적인 초기화를 생략할 수 있어 코드가 더 간결해집니다.
The Go Programming Language Specification - The Go Programming Language
Golang 타입별 Zero-value
boolean | false |
numeric | 0 |
string | "" |
pointer | nil |
function | nil |
interface | nil |
slice | nil |
channel | nil |
map | nil |
floating point number | 0.0 |
예시
package main
import "fmt"
func main() {
var i int // zero-value: 0
var f float64 // zero-value: 0.0
var b bool // zero-value: false
var s string // zero-value: ""
var p *int // zero-value: nil
var arr []int // zero-value: nil
var m map[string]int // zero-value: nil
var ch chan int // zero-value: nil
var fn func() // zero-value: nil
var iface interface{} // zero-value: nil
fmt.Printf("int: %d\n", i)
fmt.Printf("float64: %f\n", f)
fmt.Printf("bool: %t\n", b)
fmt.Printf("string: %q\n", s)
fmt.Printf("pointer: %v\n", p)
fmt.Printf("slice: %v\n", arr)
fmt.Printf("map: %v\n", m)
fmt.Printf("channel: %v\n", ch)
fmt.Printf("func: %v\n", fn)
fmt.Printf("interface: %v\n", iface)
}
var myBool bool
fmt.Printf("Zero value boolean: %#v", myBool)
// Output: Zero value boolean: false
var mySlice []int
fmt.Printf("Zero value slice: %#v", mySlice)
// Output: Zero value slice: []int(nil)
Gorm이나 go swagger에도 이런 zero-value를 기반으로 구현이 되어있어 자세히 살펴보면 재밌는 점이 많습니다.
1. API response의 param에 omitempty tag를 붙이고 거기에 zero-value값을 넘겨주면 없는 값 처럼 처리되기도 하고
2. db에 gorm을 통해서 zero-value를 쓰려고 하면 무시하기도 합니다.
참조
https://go.dev/ref/spec#The_zero_value
반응형
'백엔드 > Golang' 카테고리의 다른 글
Golang 에러 처리 - (1) Google Guide/Best Practice 찾아보기 (2) | 2024.09.07 |
---|---|
[번역] Golang vs Spring boot native 성능 비교해보기 - Hello world 케이스 (0) | 2024.07.08 |
Golang init() 사용법 및 주의 사항 (0) | 2024.05.16 |
우리 프로젝트에서 Golang DB 처리 시에 GORM을 사용 해야 하는 이유 (0) | 2024.05.01 |
@ray5273 :: Micro Changes, Macro Impact
개발 및 IT 관련 포스팅을 작성 하는 블로그입니다.
IT 기술 및 개인 개발에 대한 내용을 작성하는 블로그입니다. 많은 분들과 소통하며 의견을 나누고 싶습니다.