๋๋ ๊ทธ ์ด๊ฑฐํ์ type
์ ํน๋ณํ ์ข
๋ฅ๋ก Go์ ์ถ๊ฐํ๋ ๊ฒ์ ์ ์ํ๊ณ ์ถ์ต๋๋ค. ์๋ ์์ ๋ protobuf ์์ ์์ ์ฐจ์ฉํ์ต๋๋ค.
type SearchRequest int
var (
SearchRequestUNIVERSAL SearchRequest = 0 // UNIVERSAL
SearchRequestWEB SearchRequest = 1 // WEB
SearchRequestIMAGES SearchRequest = 2 // IMAGES
SearchRequestLOCAL SearchRequest = 3 // LOCAL
SearchRequestNEWS SearchRequest = 4 // NEWS
SearchRequestPRODUCTS SearchRequest = 5 // PRODUCTS
SearchRequestVIDEO SearchRequest = 6 // VIDEO
)
type SearchRequest string
var (
SearchRequestUNIVERSAL SearchRequest = "UNIVERSAL"
SearchRequestWEB SearchRequest = "WEB"
SearchRequestIMAGES SearchRequest = "IMAGES"
SearchRequestLOCAL SearchRequest = "LOCAL"
SearchRequestNEWS SearchRequest = "NEWS"
SearchRequestPRODUCTS SearchRequest = "PRODUCTS"
SearchRequestVIDEO SearchRequest = "VIDEO"
)
// IsValid has to be called everywhere input happens, or you risk bad data - no guarantees
func (sr SearchRequest) IsValid() bool {
switch sr {
case SearchRequestUNIVERSAL, SearchRequestWEB...:
return true
}
return false
}
enum SearchRequest int {
0 // UNIVERSAL
1 // WEB
2 // IMAGES
3 // LOCAL
4 // NEWS
5 // PRODUCTS
6 // VIDEO
}
enum SearchRequest string {
"UNIVERSAL"
"WEB"
"IMAGES"
"LOCAL"
"NEWS"
"PRODUCTS"
"VIDEO"
}
์ด ํจํด์ ํน์ ์ผ์ด์ค๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํ ๋งํผ ์ถฉ๋ถํ ์ผ๋ฐ์ ์ด๋ฉฐ ์ฝ๋๋ฅผ ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค. ๊ตฌํ ๊ณ์ธต์์ ๋๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ๋ฅผ ์ปดํ์ผ ํ์์ ํ์ธํ ์ ์๋ค๊ณ ์์ํ ์ ์์ต๋๋ค. ๊ทธ ์ค ์ผ๋ถ๋ ์ด๋ฏธ ์ค๋๋ ๋ฐ์ํ๊ณ ๋๋จธ์ง๋ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๊ฑฐ๋ ์๋นํ ์ ์ถฉ์ด ํ์ํฉ๋๋ค.
SearchRequest(99)
๋๋ SearchRequest("MOBILEAPP")
ํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๊ฒ์ ์์ต๋๋ค. ํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์๋ ์ต์
์ ์ฌ์ฉํ์ฌ ๋ด๋ณด๋ด์ง ์์ ์ ํ์ ๋ง๋๋ ๊ฒ์ด ํฌํจ๋์ง๋ง ๊ฒฐ๊ณผ ์ฝ๋๋ฅผ ์ฌ์ฉ/๋ฌธ์ํํ๊ธฐ๊ฐ ๋ ์ด๋ ค์์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.enum
๋ฅผ ๊ตฌํํจ์ผ๋ก์จ ์ด๊ฒ์ด ํน๋ณํ ๋์๋ฌธ์๋ฅผ ํ์๋ก ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๋๊ตฐ๊ฐ nil
๊ฐ ์ ํจํ๊ธฐ๋ฅผ ์ํ๋ฉด ์ด๊ฑฐํ์ ํฌ์ธํฐ๋ก ์ ์ํด์ผ ํฉ๋๋ค.๋๋ ๊ตฌ๋ฌธ์ ๋ํด ๊ฐํ ์๊ฒฌ์ด ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ์ ์ํ๋ ์ ์๊ณ ์ํ๊ณ์ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค.
@derekparker #19412์์ Go2 ์ ์์ ๋ํ ํ ๋ก ์ด ์์ต๋๋ค.
์ค๋ ์ผ์ฐ ์ฝ์์ง๋ง ์ ํจํ ์ ํ ๊ฐ์ ์ค์ ์ ๋ ์ ํจํ ์ ํ์ ๋ ์ด์ ์ ๋ง์ถ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ง๋ ์ด๊ฒ์ ๊ทธ ์ ์์ ํ์ ์งํฉ์ผ ์๋ ์์ง๋ง ์ค๋๋ Go์ ํฌํจ๋ ์ ์๋ ์ ํ ์์คํ ์ ๋ํ ๋ ๊ด๋ฒ์ํ ๋ณ๊ฒฝ์ด๊ธฐ๋ ํฉ๋๋ค.
์ด๊ฑฐํ์ ๋ชจ๋ ์ ํ์ด ๋์ผํ๊ณ ๋ฉ์๋์ ์ํด ๊ฐ๊ฐ์ ์ฐ๊ฒฐ๋ ๊ฐ์ด ์๋ ํฉ๊ณ ์ ํ์ ํน๋ณํ ๊ฒฝ์ฐ์ ๋๋ค. ๋ ์ ๋ ฅํด์ผ ํ์ง๋ง ํจ๊ณผ๋ ๋์ผํฉ๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ , ๊ทธ๊ฒ์ ํ๋ ๋๋ ๋ค๋ฅธ ๊ฒ์ด ๋ ๊ฒ์ด๋ฉฐ, ํฉ๊ณ ์ ํ์ ๋ ๋ง์ ๊ทผ๊ฑฐ๋ฅผ ๋ค๋ฃจ๋ฉฐ ํฉ๊ณ ์ ํ์กฐ์ฐจ๋ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ต๋๋ค. Go1 ํธํ์ฑ ๊ณ์ฝ์ผ๋ก ์ธํด Go2๊น์ง๋ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค. ์ด์จ๋ ์ด๋ฌํ ์ ์์๋ ์ต์ํ ์ ํค์๋๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ถฉ๋ถํ ๊ณตํํ์ง๋ง ์ด๋ฌํ ์ ์ ์ค ์ด๋ ๊ฒ๋ ํธํ์ฑ ๊ณ์ฝ์ ์๋ฐํ์ง ์์ต๋๋ค. ํฉ๊ณ ์ ํ์ด Go1์ ์ถ๊ฐํ๊ธฐ์๋ "๋๋ฌด ํฝ๋๋ค"๋ผ๋ ์๊ฒฌ์ด ์์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด ์ ์์ Go2์์ ์ ์ฒด ๊ธ์ก ์ ํ์ผ๋ก ๊ฐ๋ ๋๋ค๋์ด ๋ ์ ์๋ ๊ท์คํ ์ค๊ฐ ์ง์ ์ ๋๋ค.
๋ ๋ค ์๋ณ์๋ก ์ฌ์ฉํ์ฌ ์ ํจํ Go1 ์ฝ๋๋ฅผ ๊นจ๋จ๋ฆด ์ ํค์๋๊ฐ ํ์ํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ํด๊ฒฐ ๋ ์ ์๋ค๊ณ ์๊ฐํ๋ค.
์๋ก์ด ์ธ์ด ๊ธฐ๋ฅ์๋ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๊ฐ ํ์ํฉ๋๋ค. ๋ชจ๋ ์ธ์ด ๊ธฐ๋ฅ์ ์ ์ฉํ๊ฑฐ๋ ์๋ฌด๋ ์ ์ํ์ง ์์ต๋๋ค. ๋ฌธ์ ๋ ์ธ์ด๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ค๊ณ ๋ชจ๋ ์ฌ๋์ด ์๋ก์ด ๊ฐ๋ ์ ๋ฐฐ์ฐ๋๋ก ์๊ตฌํ๋ ๊ฒ์ ์ ๋นํํ ๋งํผ ์ ์ฉํฉ๋๊น? ์ฌ๊ธฐ์ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ ๋ฌด์์ ๋๊น? ์ฌ๋๋ค์ ์ด๊ฒ์ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊น์? ์๋ฅผ ๋ค์ด, ์ฌ๋๋ค์ ์ ํจํ ์ด๊ฑฐํ ๊ฐ ์งํฉ์ ๋ฐ๋ณตํ ์ ์๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ํ์๊ฒ ์ต๋๊น? ์ด ์ ์์ด ์ผ๋ถ ์ค์์น์ ๊ธฐ๋ณธ ์ผ์ด์ค๋ฅผ ์ถ๊ฐํ์ง ์๋๋ก ํ๋ ๊ฒ ์ด์์ ์ํํฉ๋๊น?
ํ์ฌ Go์์ ์ด๊ฑฐํ์ ์์ฑํ๋ ๊ด์ฉ์ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
type SearchRequest int
const (
Universal SearchRequest = iota
Web
Images
Local
News
Products
Video
)
์ด๊ฒ์ OR:ed(์ฐ์ฐ์ |
์ฌ์ฉ)ํ ์ ์๋ ํ๋๊ทธ๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
type SearchRequest int
const (
Universal SearchRequest = 1 << iota
Web
Images
Local
News
Products
Video
)
enum
ํค์๋๋ฅผ ๋์
ํ๋ฉด ํจ์ฌ ๋ ์งง์์ง ๊ฒ ๊ฐ์ง ์์ต๋๋ค.
@md2perpe ์ด๊ฑฐํ์ด ์๋๋๋ค.
```๊ฐ๋ค
ํจํค์ง ๋ฉ์ธ
์์
(
"fmt"
)
ํจ์ ๋ฉ์ธ() {
์ ํ SearchRequest ์ ์
์์ (
๋ฒ์ฉ ๊ฒ์ ์์ฒญ = iota
ํธ๋ฌผ
)
const (
Another SearchRequest = iota
Foo
)
fmt.Println("Should be false: ", (Web == Foo))
// Prints: "Should be false: true"
}
````
Go๊ฐ ์ผ๋ฅ ์๋ฏผ์ผ๋ก์ ์ผ๋ถ ์ด๊ฑฐํ์ด ํ์ํ๋ค๋ @derekperkins ์ ๋ง์ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ์ด๋ป๊ฒ ์๊ฒผ์์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, Go 1 ์ ๋ฆฌ์ง์ ๋ถ์์ง ์๊ณ ๋ ๊ฐ๋ฅํ ๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@md2perpe iota
๋ ์ด๊ฑฐํ์ ์ ๊ทผํ๋ ๋งค์ฐ ์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ ํ๋ ์ํฉ์์ ์ ์๋ํฉ๋๋ค.
int
๊ฐ ํ์ํฉ๋๋ค.์ธ๋ถ ํ๋๊ทธ์ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ๋ฌธ์์ด์ด๋ ๋ค๋ฅธ ์ ํ์ ๋ํ๋ด์ผ ํ๋ ์ฆ์ iota
๋ ์๋ํ์ง ์์ต๋๋ค. ์ธ๋ถ/๋ฐ์ดํฐ๋ฒ ์ด์ค ํํ๊ณผ ์ผ์น์ํค๋ ค๋ฉด iota
๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒ์
๋๋ค. ์๋ํ๋ฉด ์์ค ์ฝ๋์์ ์์๋ฅผ ์ง์ ํ๊ณ ์ฌ์ ๋ ฌํ๋ฉด ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด๊ฒ์ ๋จ์ํ ์ฝ๋๋ฅผ ๋ ์งง๊ฒ ๋ง๋ค๊ธฐ ์ํ ํธ์์์ ๋ฌธ์ ๊ฐ ์๋๋๋ค. ์ด๊ฒ์ ์ค๋๋ ์ธ์ด๋ก ์ํํ ์ ์๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ํ์ฉํ๋ ์ ์์ ๋๋ค.
@ianlancetaylor
์๋ฅผ ๋ค์ด, ์ฌ๋๋ค์ ์ ํจํ ์ด๊ฑฐํ ๊ฐ ์งํฉ์ ๋ฐ๋ณตํ ์ ์๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ํ์๊ฒ ์ต๋๊น?
@bep์ด ์ธ๊ธํ ๊ฒ์ฒ๋ผ ๊ฒฌ๊ณ ํ ์ฌ์ฉ ์ฌ๋ก๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ณต์ ํ์ค Go ๋ฃจํ์ฒ๋ผ ๋ณด์ด๊ณ ์ ์๋ ์์๋๋ก ๋ฐ๋ณต๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
for i, val := range SearchRequest {
...
}
Go์์ iota ์ด์์ ์ถ๊ฐํ๋ค๋ฉด ๊ทธ ์์ ์์ ๋์ ๋ฐ์ดํฐ ์ ํ์ ์ ํํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ ์ ์์์ ๋ฐ๋ฅธ ์ ๋ ฌ์ ํ์ฅํ๊ณ protobuf์ ์๋ฅผ ๋ฐ๋ฅด๋ฉด ํ๋์ ๊ธฐ๋ณธ๊ฐ์ ์ฒซ ๋ฒ์งธ ์ ์๋ ํ๋๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@bep ํธ๋ฆฌํ์ง๋ ์์ง๋ง ๋ค์ ์์ฑ์ ๋ชจ๋ ์ป์ ์ ์์ต๋๋ค.
package main
var SearchRequests []SearchRequest
type SearchRequest struct{ name string }
func (req SearchRequest) String() string { return req.name }
func Request(name string) SearchRequest {
req := SearchRequest{name}
SearchRequests = append(SearchRequests, req)
return req
}
var (
Universal = Request("Universal")
Web = Request("Web")
Another = Request("Another")
Foo = Request("Foo")
)
func main() {
fmt.Println("Should be false: ", (Web == Foo))
fmt.Println("Should be true: ", (Web == Web))
for i, req := range SearchRequests {
fmt.Println(i, req)
}
}
์ปดํ์ผ ํ์ ์ฒดํฌ๋ ์ด๊ฑฐํ์ ์ข์ ์๊ฐ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ go๊ฐ ๋ฐ๋ก ์ง๊ธ ์ด๊ฒ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ๋ฏฟ์ต๋๋ค. ๋ด ์ถ๋ก ์
์ ๋ฐ์ ์ผ๋ก ์ ์๊ฒ๋ ์์ฒญ๋ -1์ ๋๋ค. ์๋ฌด๊ฒ๋ ์ถ๊ฐํ์ง ์์ ๋ฟ๋ง ์๋๋ผ; ์ ๊ทน์ ์ผ๋ก ์ํ๋ค.
Go์ ํ์ฌ ์ด๊ฑฐํ ๊ตฌํ์ ๋งค์ฐ ๊ฐ๋จํ๊ณ ์ถฉ๋ถํ ์ปดํ์ผ ์๊ฐ ๊ฒ์ฌ๋ฅผ ์ ๊ณตํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ค์ ๋ก ๊ธฐ๋ณธ ํจํด ์ผ์น๊ฐ ์๋ ์ผ์ข ์ Rust ์ด๊ฑฐํ์ ๊ธฐ๋ํ์ง๋ง Go1 ๋ณด์ฆ์ ๊นจ๋จ๋ฆด ์ ์์ต๋๋ค.
์ด๊ฑฐํ์ ํฉ๊ณ ์ ํ์ ํน๋ณํ ๊ฒฝ์ฐ์ด๊ณ ์ผ๋ฐ์ ์ธ ์งํ๋ ํฉ๊ณ ์ ํ์ ์๋ฎฌ๋ ์ดํธํ๊ธฐ ์ํด ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ ๊ฒ์ด๋ฏ๋ก ๋๋ต์ ๋ถ๋ช ํ https://play.golang.org/p/1BvOakvbj2 ์ ๋๋ค.
(ํ์คํ์ง ์์ ๊ฒฝ์ฐ: ์, ๋๋ด์ ๋๋ค. ๊ณ ์ ์ ์ธ ํ๋ก๊ทธ๋๋จธ ๋ฐฉ์์์๋ ํ ๋จ๊ณ ๋ ๋์๊ฐ๊ฒ ์ต๋๋ค.)
์ง์งํ๊ฒ ๋งํ์๋ฉด, ์ด ์ค๋ ๋์์ ๋ ผ์๋ ๊ธฐ๋ฅ์ ๊ฒฝ์ฐ ๋ช ๊ฐ์ง ์ถ๊ฐ ๋๊ตฌ๊ฐ ์ ์ฉํ ๊ฒ์ ๋๋ค.
์คํธ๋ง๊ฑฐ ๋๊ตฌ์ ๋ง์ฐฌ๊ฐ์ง๋ก "๋ ์ธ์ " ๋๊ตฌ๋ ์์์ ๋งํฌํ ์ฝ๋์์ Iter
func์ ํด๋นํ๋ ๊ธฐ๋ฅ์ ์์ฑํ ์ ์์ต๋๋ค.
์ ์ ์ ํตํด ๋ ์ฝ๊ฒ ๋ณด๋ผ ์ ์๋๋ก {Binary,Text}{Marshaler,Unmarshaler} ๊ตฌํ์ ์์ฑํ ์ ์์ต๋๋ค.
๋๋ ๊ฐ๋ ์์ฃผ ์ ์ฉํ ์ด์ ๊ฐ์ ์์ ๊ฒ๋ค์ด ๋ง์ด ์์ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค.
์ธํฐํ์ด์ค๋ก ์๋ฎฌ๋ ์ด์ ๋ ํฉ๊ณ ์ ํ์ ์ฒ ์ ํ ๊ฒ์ฌ๋ฅผ ์ํ ๋ช ๊ฐ์ง ๊ฒ์ฌ/๋ฆฐํฐ ๋๊ตฌ๊ฐ ์์ต๋๋ค. ์ผ์ด์ค๊ฐ ๋๋ฝ๋๊ฑฐ๋ ์๋ชป๋ ํ์ํ๋์ง ์์ ์์๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ฅผ ์๋ ค์ฃผ๋ iota ์ด๊ฑฐํ์ ๋ํ ๊ฒ์ด ์์ ์ด์ ๊ฐ ์์ต๋๋ค(์๋ง๋ 0 ์ด์ธ์ ๋ค๋ฅธ ๊ฐ์ ๋ณด๊ณ ํด์ผ ํฉ๋๊น?).
์ธ์ด ๋ณ๊ฒฝ ์์ด๋ ๊ฐ์ ์ ์ฌ์ง๊ฐ ๋ถ๋ช ํ ์์ต๋๋ค.
์ด๊ฑฐํ์ ์ด๋ฏธ ํ๋ฆฝ๋ ์ ํ ์์คํ ์ ๋ณด์ํฉ๋๋ค. ์ด ๋ฌธ์ ์ ๋ง์ ์์์ ๋ณด์ฌ์ฃผ๋ฏ์ด ์ด๊ฑฐํ์ ๊ตฌ์ฑ ์์๋ ์ด๋ฏธ ์กด์ฌํฉ๋๋ค. ์ฑ๋์ด ๋ ๋ง์ ๊ธฐ๋ณธ ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋์ ์์ค์ ์ถ์ํ์ธ ๊ฒ์ฒ๋ผ ์ด๊ฑฐํ๋ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋น๋๋์ด์ผ ํฉ๋๋ค. ์ธ๊ฐ์ ์ค๋งํ๊ณ ์ํฌ๋ฅด๋ฉฐ ๊ฑด๋ง์ฆ์ด ์์ต๋๋ค. ์ด๊ฑฐํ๊ณผ ๊ฐ์ ๋ฉ์ปค๋์ฆ์ ์ธ๊ฐ ํ๋ก๊ทธ๋๋จธ๊ฐ ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
@bep ๋๋ ๋น์ ์ ์ธ ๊ฐ์ง ์์ ์ ๋ชจ๋ ๋์ํ์ง ์์ต๋๋ค. Go ๊ด์ฉ์ ์ด๊ฑฐํ์ ์ ํจํ ๊ฐ์ ๋ฐ๋ณต์ด ์๊ณ ๋ฌธ์์ด๋ก์ ์๋ ๋ณํ์ด ์์ผ๋ฉฐ ๋ฐ๋์ ๊ณ ์ ํ ID๋ฅผ ๊ฐ์ง ์๋ C ์ด๊ฑฐํ๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค.
๋ฐ๋ณต์ ์์ผ๋ฉด ์ข์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฐ๋ณต์ ์ํ ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ ๊ฐ๊ณผ ๋ง์ง๋ง ๊ฐ์ ๋ํด ์์๋ฅผ ์ ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. iota
๋ ์๋์ผ๋ก ๋ง์ง๋ง ๊ฐ์ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ์ ๊ฐ์ ์ถ๊ฐํ ๋ ์
๋ฐ์ดํธํ ํ์๊ฐ ์๋ ๋ฐฉ์์ผ๋ก ๊ทธ๋ ๊ฒ ํ ์๋ ์์ต๋๋ค. ์ธ์ด ์ง์์ด ์๋ฏธ ์๋ ์ฐจ์ด๋ฅผ ๋ง๋๋ ์ํฉ์ ์ด๊ฑฐํ ๊ฐ์ด ์ฐ์์ ์ด์ง ์์ ๊ฒฝ์ฐ์
๋๋ค.
๋ฌธ์์ด๋ก์ ์๋ ๋ณํ์ ์์ ๊ฐ์ผ ๋ฟ์ ๋๋ค. ํนํ ์ด ์ ์์์ ๋ฌธ์์ด ๊ฐ์ int ๊ฐ์ ํด๋นํ๋๋ก ์์ฑ๋์ด์ผ ํ๋ฏ๋ก ์ง์ ๋ฌธ์์ด ๊ฐ ๋ฐฐ์ด์ ๋ช ์์ ์ผ๋ก ์์ฑํ๋ ๊ฒ๋ณด๋ค ์ป์ ์ ์๋ ๊ฒ์ ๊ฑฐ์ ์์ต๋๋ค. ๋ค๋ฅธ ์ ์์์๋ ๋ ๋ง์ ๊ฐ์น๊ฐ ์์ ์ ์์ง๋ง ๋ณ์ ์ด๋ฆ์ด ๋ฌธ์์ด ํํ๊ณผ ์ผ์นํ๋๋ก ๊ฐ์ ํ๋ ๊ฒ์๋ ๋จ์ ์ด ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก, ๊ณ ์ ํ ์ ์ฒด์ฑ์ ์ ํ ์ ์ฉํ ๊ธฐ๋ฅ์ธ์ง ํ์ ์ด ์์ง ์์ต๋๋ค. ์ด๊ฑฐํ์ Haskell๊ณผ ๊ฐ์ ํฉ๊ณ ์ ํ์ด ์๋๋๋ค. ๊ทธ๋ค์ ์ด๋ฆ์ด ์ง์ ๋ ์ซ์์
๋๋ค. ์๋ฅผ ๋ค์ด ์ด๊ฑฐํ์ ํ๋๊ทธ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ผ๋ฐ์ ์
๋๋ค. ์๋ฅผ ๋ค์ด, ReadWriteMode = ReadMode | WriteMode
๋ฅผ ๊ฐ์ง ์ ์๊ณ ์ด๊ฒ์ ์ ์ฉํ ๊ฒ์
๋๋ค. ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ง ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด DefaultMode = ReadMode
๊ฐ ์์ ์ ์์ต๋๋ค. ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก๋ ๋๊ตฐ๊ฐ๊ฐ const DefaultMode = ReadMode
๋ฅผ ์ฐ๋ ๊ฒ์ ๋ง์ ์๋ ์์ต๋๋ค. ๋ณ๋์ ์ ์ธ์์ ๋ฐ์ํ๋๋ก ์๊ตฌํ๋ ๋ฐ ์ด๋ค ๋ชฉ์ ์ด ์์ต๋๊น?
@bep ๋๋ ๋น์ ์ ์ธ ๊ฐ์ง ์์ ์ ๋ชจ๋ ๋์ํ์ง ์์ต๋๋ค. Go ๊ด์ฉ์ ์ด๊ฑฐํ์ ์ ํจํ ๊ฐ์ ๋ฐ๋ณต์ด ์๊ณ ๋ฌธ์์ด๋ก์ ์๋ ๋ณํ์ด ์์ผ๋ฉฐ ๋ฐ๋์ ๊ณ ์ ํ ID๋ฅผ ๊ฐ์ง ์๋ C ์ด๊ฑฐํ๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค.
@alercah , ์ด idomatic Go
๋ฅผ "์น๋ฆฌ์ ์ธ ๋
ผ์"์ผ๋ก ๋
ผ์์ ๋์ด๋ค์ด์ง ๋ง์ญ์์ค. Go์๋ ๋ด์ฅ๋ Enum์ด ์์ผ๋ฏ๋ก ์กด์ฌํ์ง ์๋ ์ผ๋ถ idom์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒ์ ๊ฑฐ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
Go๋ ๋ ๋์ C/C++ ๋๋ ๋ ์ฅํฉํ Java ๋ก ์ ์๋์์ผ๋ฏ๋ก ํ์์ ๋น๊ตํ๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ Java์๋ Enum type
๊ฐ ๋ด์ฅ๋์ด ์์ต๋๋ค("Java ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ด๊ฑฐํ ์ ํ์ ๋ค๋ฅธ ์ธ์ด์ ์ด๊ฑฐํ ์ ํ๋ณด๋ค ํจ์ฌ ๊ฐ๋ ฅํฉ๋๋ค. "): https://docs.oracle.com/javase/tutorial/java /javaOO/enum.html
๊ทธ๋ฆฌ๊ณ "ํจ์ฌ ๋ ๊ฐ๋ ฅํ ๋ถ๋ถ"์ ๋์ํ์ง ์์ ์ ์์ง๋ง Java Enum
์ ํ์๋ ๋ด๊ฐ ์ธ๊ธํ ์ธ ๊ฐ์ง ๊ธฐ๋ฅ์ด ๋ชจ๋ ์์ต๋๋ค.
๋๋ Go๊ฐ ๋ ๊ฐ๋ณ๊ณ ๋จ์ํ๋ค๋ ์ฃผ์ฅ์ ๊ฐ์ฌํ ์ ์์ผ๋ฉฐ, ์ด ๋ฐฉ์์ ์ ์งํ๋ ค๋ฉด ์ฝ๊ฐ์ ํํ์ด ํ์ํ๋ฉฐ, ์ด ์ค๋ ๋์์ ์๋ํ๋ ๋ช ๊ฐ์ง ํดํน ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ณด์์ง๋ง iota
int๋ง์ผ๋ก๋ ์ด๊ฑฐํ์ ๋ง๋ค ์ ์์ต๋๋ค.
์ด๊ฑฐ ๋ฐ ์๋ ๋ฌธ์์ด ๋ณํ์ '์์ฑ ์ด๋' ๊ธฐ๋ฅ์ ์ข์ ํ๋ณด์
๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ๋ช ๊ฐ์ง ์๋ฃจ์
์ ๊ฐ์ง๊ณ ์์ต๋๋ค. Java ์ด๊ฑฐํ์ ๊ณ ์ ์ ์ธ ์ด๊ฑฐํ๊ณผ ํฉ๊ณ ์ ํ์ ์ค๊ฐ์ ์์ต๋๋ค. ๊ทธ๋์ ์ ์๊ฐ์๋ ๋์ ์ธ์ด ๋์์ธ์
๋๋ค.
๊ด์ฉ์ ์ธ Go์ ํต์ฌ์ X ์ธ์ด์์ Y ์ธ์ด๋ก ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ณต์ฌํด์ผ ํ๋ ๊ฐ๋ ฅํ ์ด์ ๊ฐ ์๋๋๋ค. ๋๊ตฐ๊ฐ์๊ฒ ์ต์ํ๋ค๋ ์ด์ ๋๋ฌธ์
๋๋ค.
Java ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ด๊ฑฐํ ์ ํ์ ๋ค๋ฅธ ์ธ์ด์ ์ด๊ฑฐํ๋ณด๋ค ํจ์ฌ ๊ฐ๋ ฅํฉ๋๋ค.
๊ทธ๊ฒ์ 10๋ ์ ์ ์ฌ์ค์ด์์ต๋๋ค. ํฉ๊ณ ์ ํ ๋ฐ ํจํด ์ผ์น๋ก ๊ตฌ๋๋๋ Rust์ Option์ ์ต์ ์ ๋ก ๋น์ฉ ๊ตฌํ์ ์ฐธ์กฐํ์ญ์์ค.
๊ด์ฉ์ ์ธ Go์ ํต์ฌ์ X ์ธ์ด์์ Y ์ธ์ด๋ก ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ณต์ฌํด์ผ ํ๋ ๊ฐ๋ ฅํ ์ด์ ๊ฐ ์๋๋๋ค. ๋๊ตฐ๊ฐ์๊ฒ ์ต์ํ๋ค๋ ์ด์ ๋๋ฌธ์ ๋๋ค.
๋๋ ์ฌ๊ธฐ์ ์ฃผ์ด์ง ๊ฒฐ๋ก ์ ๊ทธ๋ค์ง ๋์ํ์ง ์์ง๋ง _ ๊ด์ฉ์ ๋ฐ๋_์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐ๋์ ์์ ์ ์ธ ๋ฐ์นจ๋ ์์ ์ฌ๋ ค๋๋ ๊ฒ์ ๋๋ค. ๋๋ถ๋ถ์ ์ํํธ์จ์ด ํ๋ก๊ทธ๋๋ฐ์ ์๋นํ ์ง๋ฃจํ๊ณ ์ค์ฉ์ ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ข ์ข ๋๋กญ๋ค์ด ์์๋ฅผ ์ด๊ฑฐํ์ผ๋ก ์ฑ์์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
//go:generate enumerator Foo,Bar
ํ ๋ฒ ์์ฑํ๋ฉด ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ์๋ ์ถ์์ ์์ ์ ์ํ์ญ์์ค.
@bep ์๋ ๋๊ธ์ ์๋ชป ์ฝ์ผ์ ๊ฒ ๊ฐ์ต๋๋ค. "Go idiomatic enums"๋ Foo int + const-decl + iota ์ ํ์ ์ฌ์ฉํ๋ ํ์ฌ ๊ตฌ์ฑ์ ์ฐธ์กฐํด์ผ ํ๋ฉฐ, "์ ์ํ๋ ๊ฒ์ด ๊ด์ฉ์ ์ด์ง ์์ต๋๋ค"๋ผ๊ณ ๋งํ๋ ๊ฒ์ด ์๋๋๋ค.
@rsc Go2
๋ ์ด๋ธ๊ณผ ๊ด๋ จํ์ฌ ์ด๋ ์ด ์ ์์ ์ ์ถํ ์ ์ถ๋ก ์ ์ด๊ธ๋ฉ๋๋ค. #19412๋ ์ ์ฒด ํฉ๊ณ ์ ํ ์ ์์ผ๋ก, ์ฌ๊ธฐ์์ ๋ด ๊ฐ๋จํ ์ด๊ฑฐํ ์ ์๋ณด๋ค ๋ ๊ฐ๋ ฅํ ์์ ์งํฉ์ด๋ฉฐ Go2์์ ๋ณด๊ณ ์ถ์ต๋๋ค. ๋ด ๊ด์ ์์ ๋ณผ ๋ ํฅํ 5๋
๋ด์ Go2๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ํฌ๋ฐํ๊ณ ๋ ์งง์ ์๊ฐ ๋ด์ ๋ฌด์ธ๊ฐ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ต๋๋ค.
์๋ก์ด ์์ฝ ํค์๋ enum
์ ๋ํ ์ ์ ์์ด BC์์ ๋ถ๊ฐ๋ฅํ๋ค๋ฉด ์์ ํ ์ธ์ด ํตํฉ์ด๋ go vet
์ ๋ด์ฅ๋ ๋๊ตฌ๋ ์ด๋ฅผ ๊ตฌํํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ฒ์์ ๋งํ๋ฏ์ด ๊ตฌ๋ฌธ์ ๋ํด์๋ ํน๋ณํ ์ ๊ฒฝ ์ฐ์ง ์์ง๋ง ์๋ก์ด ์ฌ์ฉ์์๊ฒ ์๋นํ ์ธ์ง ๋ถ๋ด์ ์ฃผ์ง ์์ผ๋ฉด์ ์ค๋๋ Go์ ๊ฐ์น ์๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ด ๋ ๊ฒ์ด๋ผ๊ณ ๊ตณ๊ฒ ๋ฏฟ์ต๋๋ค.
Go 2 ์ด์ ์๋ ์ ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. Go 1 ํธํ์ฑ ๋ณด์ฅ์ ๋ํ ๋ช ๋ฐฑํ ์๋ฐ์ ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก, ๋๋ ์์ง ์ด๊ฑฐํ์ ๋ํ ์ค๋๋ ฅ ์๋ ์ฃผ์ฅ์ ๋ณด์ง ๋ชปํ๊ณ ์์ต๋๋ค. ๊ทธ ๋ฌธ์ ์ ๊ดํด์๋ Go 2์ ๊ฒฝ์ฐ์๋ ํฉ๊ณ ์ ํ์ ๋ํ ๊ฒ์ ๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ์ผ์ด๋ ์ ์๋ค๊ณ ๋งํ๋ ๊ฒ์ด ์๋๋๋ค. ๊ทธ๋ฌ๋ Go ์ธ์ด์ ๋ชฉํ ์ค ํ๋๋ ์ธ์ด์ ๋จ์์ฑ์ ๋๋ค. ์ธ์ด ๊ธฐ๋ฅ์ด ์ ์ฉํ๋ค๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ๋ชจ๋ ์ธ์ด ๊ธฐ๋ฅ์ ์ ์ฉํฉ๋๋ค. ์ ์ฉํ์ง ์์ผ๋ฉด ์๋ฌด๋ ์ ์ํ์ง ์์ต๋๋ค. Go์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ค๋ฉด ๊ธฐ๋ฅ์ ์ธ์ด๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ค ๊ฐ์น๊ฐ ์์ ๋งํผ ์ถฉ๋ถํ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ด์ผ ํฉ๋๋ค. ๊ฐ์ฅ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ ์ ์ด๋ ์ง๊ธ์ ํฐ ์ด์ํจ์ด ์์ด๋ ๊ธฐ๋ฅ ์์ด๋ ์์ฑํ ์ ์๋ ์ฝ๋์ ๋๋ค.
Go์์ ์ด๊ฑฐํ์ ๋ณด๊ณ ์ถ์ต๋๋ค. ์ ํ๋ ์์ ์ ํจํ ์ ๋ ฅ์ด ์๋ ๋ ธ์ถ๋ API(๋๋ ๋ด ์ฑ ์ธ๋ถ์ ์ ํ๋ API๋ก ์์ )๋ฅผ ์ ํํ๊ณ ์ถ์ ์์ ์ ๋์์์ด ์ฐพ๊ณ ์์ต๋๋ค. ๋์๊ฒ ์ด๊ฒ์ ์ด๊ฑฐ ํ์์ํ ์๋ฒฝํ ์ฅ์์ ๋๋ค.
์๋ฅผ ๋ค์ด, ์ผ์ข
์ RPC ์คํ์ผ API์ ์ฐ๊ฒฐํ๊ณ ์ง์ ๋ ์์
/์๋ ์ฝ๋ ์งํฉ์ด ์๋ ํด๋ผ์ด์ธํธ ์ฑ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด const
๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ๋๊ตฐ๊ฐ(์ ๋ฅผ ํฌํจํ์ฌ!)๊ฐ ์๋ชป๋ ์ฝ๋๋ฅผ ๋ณด๋ด๋ ๊ฒ์ ๋ง๋ ๊ฒ์ ์์ต๋๋ค.
๋ฐ๋ฉด์ ๋์ผํ API์ ๋ํด ์๋ฒ ์ธก์ ์์ฑํ๋ ๊ฒฝ์ฐ ์ด๊ฑฐํ์ switch ๋ฌธ์ ์์ฑํ ์ ์์ผ๋ฉด ์ข์ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ฉด ์ปดํ์ผ๋ฌ ์ค๋ฅ(๋๋ ์ ์ด๋ ์ผ๋ถ go vet
๊ฒฝ๊ณ ) ์ด๊ฑฐํ์ ๋ชจ๋ ๊ฐ๋ฅํ ๊ฐ์ด ํ์ธ๋์ง ์์ ๊ฒฝ์ฐ(๋๋ ์ต์ํ default:
์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ).
๋๋ ์ด๊ฒ์ด (์ด๊ฑฐํ) Swift ๊ฐ ์ ๋ง๋ก ์ณ์ ๋ ์์ญ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ผ์ข ์ RPC ์คํ์ผ API์ ์ฐ๊ฒฐํ๊ณ ์ง์ ๋ ์์ /์๋ ์ฝ๋ ์งํฉ์ด ์๋ ํด๋ผ์ด์ธํธ ์ฑ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด const๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ๋๊ตฐ๊ฐ(์ ๋ฅผ ํฌํจํ์ฌ!)๊ฐ ์๋ชป๋ ์ฝ๋๋ฅผ ๋ณด๋ด๋ ๊ฒ์ ๋ง๋ ๊ฒ์ ์์ต๋๋ค.
์ด๊ฑฐํ์ผ๋ก ํด๊ฒฐํ๋ ๊ฒ์ ๋์ฐํ ์๊ฐ์ ๋๋ค. ์ฆ, ๊ฐ์๊ธฐ RPC๊ฐ ์คํจํ๊ฑฐ๋ ๋กค๋ฐฑ ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๊ฒ ๋๊ธฐ ๋๋ฌธ์ ์ด์ ์ ์ด๊ฑฐํ ๊ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. proto3 ์์ ์์ฑ๋ ์ด๊ฑฐํ ์ฝ๋๊ฐ "์ ์ ์๋ ์ฝ๋" ๊ฐ์ ์ง์ํด์ผ ํ๋ ์ด์ ๋ ์ด๊ฒ์ด ๊ณ ํต์ ํตํด ๋ฐฐ์ด ๊ตํ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค( proto2 ๊ฐ ์ด๊ฒ์ ํด๊ฒฐํ ๋ฐฉ๋ฒ๊ณผ ๋น๊ตํ๋ฉด ๋ ์ข์ง๋ง ์ฌ์ ํ ๋งค์ฐ ๋์จ). ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด ๊ฒฝ์ฐ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค.
@Merovius ๊ทํ์ ์๊ฒฌ์ ์กด์คํ์ง๋ง ์ ์คํ๊ฒ ๋์ํ์ง ์์ต๋๋ค. ์ ํจํ ๊ฐ๋ง ์ฌ์ฉ๋์๋์ง ํ์ธํ๋ ๊ฒ์ ์ด๊ฑฐํ์ ์ฃผ์ ์ฉ๋ ์ค ํ๋์ ๋๋ค.
์ด๊ฑฐํ์ ๋ชจ๋ ์ํฉ์ ์ ํฉํ์ง ์์ง๋ง ์ผ๋ถ ์ํฉ์๋ ์ ํฉํฉ๋๋ค! ์ ์ ํ ๋ฒ์ ๊ด๋ฆฌ ๋ฐ ์ค๋ฅ ์ฒ๋ฆฌ๋ ๋๋ถ๋ถ์ ์ํฉ์์ ์ ๊ฐ์ ์ฒ๋ฆฌํ ์ ์์ด์ผ ํฉ๋๋ค.
uh-oh ์ํ์ ์ธ๋ถ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด ๋น์ฐํ ํ์์ ๋๋ค.
์ด๊ฑฐํ(๋๋ ๋ณด๋ค ์ผ๋ฐ์ ์ด๊ณ ์ ์ฉํ ํฉ๊ณ ์ ํ)์ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ๋ฌ์์ ๊ฐ์ ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ ํฉ๊ณ/์ด๊ฑฐํ์ ๋ช ์์ "์ ์ ์๋" ์ฝ๋๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ธฐ๋กํ๊ณ ๋ค์ ์์ฒญ์ผ๋ก ์ด๋).
์ฒ๋ฆฌํด์ผ ํ๋ X ์ผ์ด์ค๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ ๋ ํฉ๊ณ ์ ํ์ด ํ๋ก์ธ์ค ๋ด๋ถ์ ๋ ์ ์ฉํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์์ X์ ๊ฒฝ์ฐ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ต์ง ์์ง๋ง ํฐ X์ ๊ฒฝ์ฐ ํนํ ๋ฆฌํฉํ ๋งํ ๋ ์ปดํ์ผ๋ฌ๊ฐ ์ ์๊ฒ ์๋ฆฌ๋ฅผ ์ง๋ฅด๋ ๊ฒ์ ๊ฐ์ฌํฉ๋๋ค.
API ๊ฒฝ๊ณ๋ฅผ ๋์ด ์ฌ์ฉ ์ฌ๋ก๋ ๋ ์ ๊ณ ํ์ฅ์ฑ ์ธก๋ฉด์์ ํญ์ ์ค๋ฅ๊ฐ ๋ฐ์ํด์ผ ํ์ง๋ง AST ๋๋ "day of ์ด ์์ ์์ ๋ฒ์๊ฐ ๊ฑฐ์ ํ์ ๋๋ ์ฃผ" ๊ฐ์ ๋๋ค(์บ๋ฆฐ๋ ์์คํ ์ ํ๊น์ง).
@jimmyfrasche ์์ผ์ ์๋ ค๋๋ฆด ์๋ ์์ง๋ง AST๋ ์ ๊ณตํ์ง ์์ต๋๋ค. ๋ฌธ๋ฒ์ ์งํํฉ๋๋ค. ์ค๋์ ์ ํจํ์ง ์์ ๊ฒ์ด ๋ด์ผ์ ์์ ํ ์ ํจํ ์ ์์ผ๋ฉฐ ์ฌ๊ธฐ์๋ AST์ ์๋ก์ด ๋ ธ๋ ์ ํ์ ์ถ๊ฐํ๋ ๊ฒ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ์ปดํ์ผ๋ฌ ๊ฒ์ฌ ํฉ๊ณ ์ ํ์ ์ฌ์ฉํ๋ฉด ํ์ ์์ด๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ด๊ฒ์ด ์์์ฌ ๊ฒ์ง์ผ๋ก ํด๊ฒฐํ ์ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ฒ ์ ํ ๊ฒฝ์ฐ์ ๋ํด ์๋ฒฝํ๊ฒ ์ ํฉํ ์ ์ ๊ฒ์ฌ๋ฅผ ์ ๊ณตํ๊ณ ์ ์ง์ ์ธ ์๋ฆฌ ๊ฐ๋ฅ์ฑ์ ์ ๊ณตํฉ๋๋ค.
์๋ฒ API์ฉ ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌํํ๋ ์์ ์ ํ๊ณ ์์ต๋๋ค. ์ผ๋ถ ์ธ์ ๋ฐ ๋ฐํ ๊ฐ์ API์ ์ด๊ฑฐํ์ ๋๋ค. ์ด 45๊ฐ์ ์ด๊ฑฐํ์ด ์์ต๋๋ค.
Go์์ ์ด๊ฑฐํ ์์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ค๋ฅธ ์ด๊ฑฐํ ์ ํ์ ๋ํ ์ผ๋ถ ๊ฐ์ด ๋์ผํ ์ด๋ฆ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ์ ๊ฒฝ์ฐ์๋ ์คํ ๊ฐ๋ฅํ์ง ์์ต๋๋ค. ์๋ ์์์ Destroy
๊ฐ ๋ ๋ฒ ๋ํ๋๋ฏ๋ก ์ปดํ์ผ๋ฌ์์ Destroy redeclared in this block
์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
type TaskAllowedOperations int
const (
_ TaskAllowedOperations = iota
Cancel
Destroy
)
type OnNormalExit int
const (
_ OnNormalExit = iota
Destroy
Restart
)
๋ฐ๋ผ์ ๋๋ ๋ค๋ฅธ ํํ์ ์๊ฐํด ๋ด์ผ ํ ๊ฒ์ ๋๋ค. ์ด์์ ์ผ๋ก๋ IDE๊ฐ ์ฃผ์ด์ง ์ ํ์ ๋ํด ๊ฐ๋ฅํ ๊ฐ์ ํ์ํ์ฌ ํด๋ผ์ด์ธํธ ์ฌ์ฉ์๊ฐ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค. Go์์ ์ผ๊ธ ์๋ฏผ์ผ๋ก enum์ ๊ฐ๋ ๊ฒ์ ๊ทธ๊ฒ์ ๋ง์กฑ์ํฌ ๊ฒ์ ๋๋ค.
@kongslund ์๋ฒฝํ ๊ตฌํ์ด ์๋๋ผ๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๊ทํ๊ฐ ๊ด์ฌ์ ๊ฐ์ง ๋งํ ์ฝ๋ ์์ฑ๊ธฐ๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ ํ ์ ์ธ ์์ ์ฃผ์์์ ์ด๊ฑฐํ์ ์ ์ธํ๊ธฐ๋ง ํ๋ฉด ๋๋จธ์ง๋ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
// ENUM(_, Cancel, Destroy)
type TaskAllowedOperations int
// ENUM(_, Destroy, Restart)
type OnNormalExit int
์์ฑํ ๊ฒ์ด๋ค
const(
_ TaskAllowedOperations = iota
TaskAllowedOperationsCancel
TaskAllowedOperationsDestroy
)
const(
_ OnNormalExit = iota
OnNormalExitDestroy
OnNormalExitRestart
)
๋ ๋์ ๋ถ๋ถ์ ์ ๋์ฌ๋ฅผ ์ ์ธํ๋ String()
๋ฉ์๋๋ฅผ ์์ฑํ์ฌ "Destroy"
๋ฅผ TaskAllowedOperations
๋๋ OnNormalExit
๋ก ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
https://github.com/abice/go-enum
์ด์ ํ๋ฌ๊ทธ๊ฐ ๋น ์ ธ์...
๋๋ ๊ฐ์ธ์ ์ผ๋ก enum์ด go ์ธ์ด์ ์ผ๋ถ๋ก ํฌํจ๋์ง ์์ ๊ฒ์ ๋ํด ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. ์ด๋ ๋ฌธ์ ์ ๋ํ ๋์ ์๋ ๋๋์ด ์๋๋๋ค. ์ฒ์ ๊ฐ์ ๋ ์ ๊ทธ๋ ๊ฒ ๋ง์ ์ ํ์ ํ๋์ง์ ๋ํด ์ข ์ข ํผ๋์ค๋ฌ์ด ๋ฐ์์ ๋ณด์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ ํ์๋ ๊ทธ ์ธ์ด๊ฐ ๊ณ ์ํ๋ ๋จ์ํจ์ ๊ฐ๋ ๊ฒ์ด ์ข์ผ๋ฉฐ, ์ถ๊ฐ๋ก ํ์ํ ๊ฒ์ด ์์ผ๋ฉด ๋ค๋ฅธ ๋๊ตฐ๊ฐ๋ ์ด๋ฅผ ํ์๋ก ํ๊ณ ํน์ ๋ฌธ์ ๋ฅผ ๋๊ธฐ ์ํด ๋ฉ์ง ํจํค์ง๋ฅผ ๋ง๋ค ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ๋ด ์ฌ๋์ ๋ฐ๋ผ ํฌ๋ฌํํธ์ ์์ ์ ์งํฉ๋๋ค.
์ด ํ ๋ก ์์ ๋ง์ ์ ํจํ ์์ ์ด ์ ๊ธฐ๋์์ต๋๋ค. ์ผ๋ถ๋ ์ด๊ฑฐํ ์ง์์ ์ฐฌ์ฑํ๊ณ ๋ง์ ์ฌ๋์ ๋ฐ๋ํฉ๋๋ค(์ต์ํ ์ ์์ด ์ฒ์์ "์ด๊ฑฐํ"์ด ๋ฌด์์ธ์ง์ ๋ํด ๋งํ ํ). ๋๋ฅผ ์ํด ํ์ด๋์จ ๋ช ๊ฐ์ง:
์๊ฐ ์์ (์ค๋๋ Go์ ์ด๊ฑฐํ)๋ ์คํด์ ์์ง๊ฐ ์์ต๋๋ค. ํด๋น ์ฝ๋๊ฐ ์์ฑ๋๊ณ ๊ฑฐ์ ์๋ฌด๋ ์์ผ๋ก ๊ทธ๋ฐ Go ์ฝ๋๋ฅผ ์์ฑํ์ง ์์ ๊ฒ์ ๋๋ค. ์ฌ์ค, ์ ์(์ธ์ด ์ง์์ผ๋ก ์ด๋ป๊ฒ ์๊ฒผ๋์ง)์ ์ค์ ๋ก Go์์ ์ด๋ฏธ ์ํํ ์์ ์ ํจ์ฌ ๋ ๊ฐ๊น์ต๋๋ค.
@jediorange ๋ Swift๊ฐ "์ ๋ง๋ก (์ด๊ฑฐํ) ์ณ์๋ค"๊ณ ์ธ๊ธํ์ต๋๋ค. ๊ทธ๋ด ์๋ ์์ง๋ง Swift ์ด๊ฑฐํ์ ๋ชจ๋ ์ข ๋ฅ์ ๊ฐ๋ ์ ํจ๊ป ํผํฉํ๋ ๋๋ผ์ธ ์ ๋๋ก ๋ณต์กํ ์ง์น์ ๋๋ค. Go์์ ์ฐ๋ฆฌ๋ ์๋์ ์ผ๋ก ๋ค๋ฅธ ์ธ์ด ๊ธฐ๋ฅ๊ณผ ๊ฒน์น๋ ๋ฉ์ปค๋์ฆ์ ํผํ๊ณ ๊ทธ ๋๊ฐ๋ก ๋ ๋ง์ ์ง๊ต์ฑ์ ์ป์์ต๋๋ค. ํ๋ก๊ทธ๋๋จธ์ ๊ฒฐ๊ณผ๋ ์ด๊ฑฐํ์ด๋ ํด๋์ค, ํฉ๊ณ ์ ํ(์๋ ๊ฒฝ์ฐ) ๋๋ ์ธํฐํ์ด์ค ์ค์์ ์ด๋ค ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค.
@ianlancetaylor ์ ์ธ์ด ๊ธฐ๋ฅ์ ์ ์ฉ์ฑ์ ๋ํ ์์ ์ ๊ฐ๋ณ๊ฒ ์ฌ๊ฒจ์๋ ์ ๋ฉ๋๋ค. ์๋ง์ ์ ์ฉํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๋ฌธ์ ๋ ์ด๋ค ๊ฒ์ด ์ง์ ์ผ๋ก ์ค๋๋ ฅ ์๊ณ ๋น์ฉ์ ๋ค์ผ ๋งํ ๊ฐ์น๊ฐ ์๋๊ฐ(์ธ์ด์ ๋ณต์ก์ฑ, ๋ฐ๋ผ์ ๊ฐ๋ ์ฑ, ๊ตฌํ์ ์ถ๊ฐ ๋ณต์ก์ฑ)์ ๋๋ค.
์ฌ์ํ ์ ์ผ๋ก, Go์ iota ์ ์ ์์๋ ๋ฌผ๋ก int๋ก ์ ํ๋์ง ์์ต๋๋ค. ์์์ธ ํ (์ด๋ฆ ์ง์ ๊ฐ๋ฅ) ๊ธฐ๋ณธ ์ ํ(float, ๋ถ์ธ, ๋ฌธ์์ด ํฌํจ: https://play.golang.org/p/lhd3jqqg5z)์ผ๋ก ์ ํ๋ฉ๋๋ค.
@merovius ๋ (์ ์ !) ์ปดํ์ผ ์๊ฐ ๊ฒ์ฌ์ ํ๊ณ์ ๋ํด ์ข์ ์ง์ ์ ํฉ๋๋ค. ํ์ฅํ ์ ์๋ ์ด๊ฑฐํ์ด ํ์ฅ์ด ๋ฐ๋์งํ๊ฑฐ๋ ์์๋๋(์ฅ์๋ช API ํ๋ฉด์ด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์งํํ๋) ์ฐ๊ฒฐ์ ์ ํฉํ์ง ๋งค์ฐ ์์ฌ์ค๋ฝ์ต๋๋ค.
์๋ฏธ ์๋ ์ง์ ์ด ์๊ธฐ ์ ์ ๋ต๋ณ์ด ํ์ํ๋ค๊ณ ์๊ฐํ๋ ์ด ์ ์์ ๋ํ ๋ช ๊ฐ์ง ์ง๋ฌธ์ด ์์ต๋๋ค.
1) ์ ์๋ ์ด๊ฑฐํ์ ๋ํ ์ค์ ๊ธฐ๋์น๋ ๋ฌด์์ ๋๊น? @bep ์ ์ด๊ฑฐ ๊ฐ๋ฅ์ฑ, ๋ฐ๋ณต ๊ฐ๋ฅ์ฑ, ๋ฌธ์์ด ํํ, ์ ์ฒด์ฑ์ ์ธ๊ธํฉ๋๋ค. ๋ ์๋์? ๋ ์์ต๋๊น?
2) 1)์ ๋ชฉ๋ก์ ๊ฐ์ ํ๋ฉด ์ด๊ฑฐํ์ ํ์ฅํ ์ ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ? (๊ฐ์ ํจํค์ง์? ๋ค๋ฅธ ํจํค์ง์?) ํ์ฅํ ์ ์๋ค๋ฉด ๊ทธ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ค๋ฌด์์ ๋ฌธ์ ๊ฐ ๋์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
3) ๋ค์์คํ์ด์ค: Swift์์ enum ์ ํ์ ์๋ก์ด ๋ค์์คํ์ด์ค๋ฅผ ๋์ ํฉ๋๋ค. ๋ค์์คํ์ด์ค ์ด๋ฆ์ด ๋ชจ๋ ๊ณณ์์ ๋ฐ๋ณต๋ ํ์๊ฐ ์๋๋ก ํ๋ ์ค์ํ ๊ธฐ๊ณ(๊ตฌ๋ฌธ ์คํ, ์ ํ ์ถ๋ก )๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Month ์ด๊ฑฐํ ๊ฐ์ ๊ฒฝ์ฐ ์ฌ๋ฐ๋ฅธ ์ปจํ ์คํธ์์ Month.January(๋๋ ๋ ๋์ ๊ฒฝ์ฐ MyPackage.Month.January) ๋์ .January๋ฅผ ์ธ ์ ์์ต๋๋ค. ์ด๊ฑฐํ ๋ค์์คํ์ด์ค๊ฐ ํ์ํฉ๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ด๊ฑฐํ ๋ค์์คํ์ด์ค๋ ์ด๋ป๊ฒ ํ์ฅ๋ฉ๋๊น? ์ค์ ๋ก ์ด ์์ ์ ์ํํ๋ ค๋ฉด ์ด๋ค ์ข ๋ฅ์ ๊ตฌ๋ฌธ ์คํ์ด ํ์ํฉ๋๊น?
4) ์ด๊ฑฐํ ๊ฐ์ด ์์์ ๋๊น? ๋ถ๋ณ์ ๊ฐ์น?
5) ์ด๊ฑฐํ ๊ฐ์ ๋ํด ์ด๋ค ์ข ๋ฅ์ ์ฐ์ฐ์ด ๊ฐ๋ฅํฉ๋๊น(์: ๋ฐ๋ณต ์ธ์): ํ๋๋ ์์ผ๋ก, ํ๋๋ ๋ค๋ก ์ด๋ํ ์ ์์ต๋๊น? ์ถ๊ฐ ๋ด์ฅ ํจ์ ๋๋ ์ฐ์ฐ์๊ฐ ํ์ํฉ๋๊น? (๋ชจ๋ ๋ฐ๋ณต์ด ์์๋๋ก ๋๋ ๊ฒ์ ์๋๋๋ค.) ๋ง์ง๋ง ์ด๊ฑฐํ ๊ฐ์ ์ง๋ ์์ผ๋ก ์ด๋ํ๋ฉด ์ด๋ป๊ฒ ๋ฉ๋๊น? ๋ฐํ์ ์ค๋ฅ์ธ๊ฐ์?
(https://github.com/golang/go/issues/19814#issuecomment-322771922์์ ๋ค์ ๋จ๋ฝ์ ํํ์ ์์ ํ์ต๋๋ค. ์๋์์ ๋ถ์ฃผ์ํ ๋จ์ด ์ ํ์ ๋ํด ์ฌ๊ณผ๋๋ฆฝ๋๋ค.)
์ด๋ฌํ ์ง๋ฌธ์ ์ค์ ๋ก ๋ตํ๋ ค๊ณ ํ์ง ์์ผ๋ฉด ์ด ์ ์์ ์๋ฏธ๊ฐ ์์ต๋๋ค("๋๋ ๋ด๊ฐ ์ํ๋ ๊ฒ์ ํ๋ ์ด๊ฑฐํ์ ์ํฉ๋๋ค"๋ ์ ์์ด ์๋๋๋ค).
์ด๋ฌํ ์ง๋ฌธ์ ์ค์ ๋ก ๋ตํ๋ ค๊ณ ํ์ง ์์ผ๋ฉด ์ด ์ ์์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
@griesemer ๋น์ ์ ๋ง์ ์์ /์ง๋ฌธ์ ๊ฐ์ง๊ณ ์์ต๋๋ค -- ํ์ง๋ง ์ด ์ง๋ฌธ์ ๋ตํ์ง ์๋๋ค๋ ์๋ฏธ๋ก ์ด ์ ์์ ๋ผ๋ฒจ์ ๋ถ์ด๋ ๊ฒ์ ๊ฑฐ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๊ธฐ์ฌ์ ๋ํ ๊ธฐ์ค์ ์ด ํ๋ก์ ํธ์์ ๋๊ฒ ์ค์ ๋์ด ์์ง๋ง ์ปดํ์ผ๋ฌ์์ ๋ฐ์ฌ ํ์ ์์ด๋ _๋ฌด์ธ๊ฐ๋ฅผ ์ ์_ํ ์ ์์ด์ผ ํ๋ฉฐ ์ ์์ด _๊ตฌํํ ์ค๋น๊ฐ ๋_ ๋์์ธ์ผ ํ์๋ ์์ต๋๋ค.
์๊ฐ ์์ (์ค๋๋ Go์ ์ด๊ฑฐํ)๋ ์คํด์ ์์ง๊ฐ ์์ต๋๋ค. ํด๋น ์ฝ๋๊ฐ ์์ฑ๋๊ณ ๊ฑฐ์ ์๋ฌด๋ ์์ผ๋ก ๊ทธ๋ฐ Go ์ฝ๋๋ฅผ ์์ฑํ์ง ์์ ๊ฒ์ ๋๋ค. ์ฌ์ค, ์ ์(์ธ์ด ์ง์์ผ๋ก ์ด๋ป๊ฒ ์๊ฒผ๋์ง)์ ์ค์ ๋ก Go์์ ์ด๋ฏธ ์ํํ ์์ ์ ํจ์ฌ ๋ ๊ฐ๊น์ต๋๋ค.
@griesemer ๋์ํ์ง ์์ต๋๋ค. Go ๋ณ์ ์ด๋ฆ์ ์ ์ฒด ๋๋ฌธ์๋ฅผ ๊ทธ๋๋ก ๋์ง ๋ง์์ด์ผ ํ๋๋ฐ, Go ์ปค๋ฎค๋ํฐ์์ ์กด๊ฒฝํ๋ Google ์ง์์ด ์์ฑํ ์๊ธ์จ ์ฝ๋๊ฐ ์ ์ ์๊ณผ ๊ฑฐ์ ๊ฐ์ ๋ณด์ด๋ ๊ณณ์ด ๋ง์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฝ๋๋ฒ ์ด์ค์์ ๋์ผํ ํจํด์ ๋งค์ฐ ์์ฃผ ๋ฐ๋ฆ ๋๋ค. ๋ค์์ Google Cloud Go ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ฐ์ ธ์จ ์์์ ๋๋ค.
// ACLRole is the level of access to grant.
type ACLRole string
const (
RoleOwner ACLRole = "OWNER"
RoleReader ACLRole = "READER"
RoleWriter ACLRole = "WRITER"
)
๊ทธ๋ค์ ์ฌ๋ฌ ์ฅ์์์ ๋์ผํ ๊ตฌ์ฑ์ ์ฌ์ฉํฉ๋๋ค.
https://github.com/GoogleCloudPlatform/google-cloud-go/blob/master/bigquery/table.go#L78 -L116
https://github.com/GoogleCloudPlatform/google-cloud-go/blob/master/storage/acl.go#L27 -L49
๋์ค์ iota
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ด์ฐฎ๋ค๋ฉด ์ํฉ์ ๋ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํ ํ ๋ก ์ด ์์์ต๋๋ค. ์ด๋ ๊ทธ ์์ฒด๋ก ์ ์ฉํ ์ ์์ง๋ง ์ ํ๋ ์ฌ์ฉ ์ฌ๋ก์ ํด๋นํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ด์ ๋๊ธ์ ์ฐธ์กฐํ์ธ์. https://github.com/golang/go/issues/19814#issuecomment -290948187
@bep ๊ณต์ ํ ํฌ์ธํธ; ๋ถ์ฃผ์ํ ๋จ์ด ์ ํ์ ๋ํด ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ์ด๋ฒ์๋ ์์ ๋ง์ง๋ง ๋จ๋ฝ์ ๋ ์ ์คํ๊ณ ๋ช ํํ๊ฒ ํํํ์ฌ ๋ค์ ์๋ํ๊ฒ ์ต๋๋ค.
์๋ฏธ ์๋ ์ง์ ์ ์ด๋ฃจ๊ธฐ ์ํด์๋ ์ด ์ ์์ ์ง์งํ๋ ์ฌ๋๋ค์ด ์ด๊ฑฐํ์ ์ค์ํ ๊ธฐ๋ฅ์ด๋ผ๊ณ ์๊ฐํ๋ ๊ฒ์ ๋ํด ์ข ๋ ์ ํํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค(์๋ฅผ ๋ค์ด https://github.xml์์ ๋ช ๊ฐ์ง ์ง๋ฌธ์ ๋ตํจ์ผ๋ก์จ). com/golang/go/issues/19814#issuecomment-322752526). ์ง๊ธ๊น์ง์ ๋ ผ์์์ ์ํ๋ ๊ธฐ๋ฅ์ด ์๋นํ ๋ชจํธํ๊ฒ ์ค๋ช ๋์ด ์์ต๋๋ค.
์๋ง๋ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ก ๊ธฐ์กด Go๊ฐ ์ด๋ป๊ฒ (์๋นํ) ๋ถ์กฑํ๊ณ ์ด๊ฑฐํ์ด ๋ฌธ์ ๋ฅผ ๋ ๋์/๋น ๋ฅธ/๋ช ํํ๊ฒ ํด๊ฒฐํ ์ ์๋์ง ๋ฑ์ ๋ณด์ฌ์ฃผ๋ ์ฌ๋ก ์ฐ๊ตฌ๋ฅผ ๊ฐ๋ ๊ฒ์ด ๋งค์ฐ ์ ์ฉํ ๊ฒ์ ๋๋ค. Gophercon์์ @rsc ์ ํ๋ฅญํ ๊ฐ์ฐ ์ ์ฐธ์กฐํ์ญ์์ค. Go2 ์ธ์ด ๋ณ๊ฒฝ์ ๋ํด.
@derekperkins ๋๋ ์ด๊ฑฐํ์ด ์๋ (์ ํ์ด ์ง์ ๋) ์์ ์ ์๋ฅผ ํธ์ถํฉ๋๋ค. ๋๋ ์ฐ๋ฆฌ์ ๋ถ์ผ์น๊ฐ "์ด๊ฑฐํ"์ด ๋ฌด์์ธ์ง์ ๋ํ ๋ค๋ฅธ ์ดํด๋ก ์ธํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ ์์ ์ง๋ฌธ์ ๋๋ค.
(๋ด ์ด์ https://github.com/golang/go/issues/19814#issuecomment-322774830์ @derekparker ๊ฐ ์๋๋ผ @derekperkins๋ก ๊ฐ์ด์ผ ํ์ต๋๋ค. ์๋ ์์ฑ์ ์ ๋ฅผ ์ด๊ฒผ์ต๋๋ค.)
@derekperkins ์ฝ๋ฉํธ์์ ํ๋จํ๊ณ ๋ด ์์ ์ ์ง๋ฌธ์ ๋ถ๋ถ์ ์ผ๋ก ๋ตํ๋ฉด Go "enum"์ด ์ต์ํ ๋ค์๊ณผ ๊ฐ์ ํน์ฑ์ ๊ฐ์ ธ์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ ์๋ฆฌ๊ฐ ๋ง์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ด ๋ชฉ๋ก์ ๋ฌด์์ ๋ ์ถ๊ฐํด์ผ ํฉ๋๊น?
๊ทํ์ ์ง๋ฌธ์ ๋ชจ๋ ์ข์ ์ง๋ฌธ์ ๋๋ค.
์ ์๋ ์ด๊ฑฐํ์ ๋ํ ์ค์ ๊ธฐ๋์น๋ ๋ฌด์์ ๋๊น? @bep ์ ์ด๊ฑฐ ๊ฐ๋ฅ์ฑ, ๋ฐ๋ณต ๊ฐ๋ฅ์ฑ, ๋ฌธ์์ด ํํ, ์ ์ฒด์ฑ์ ์ธ๊ธํฉ๋๋ค. ๋ ์๋์? ๋ ์์ต๋๊น?
1)์ ๋ชฉ๋ก์ ๊ฐ์ ํ๋ฉด ์ด๊ฑฐํ์ ํ์ฅํ ์ ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ? (๊ฐ์ ํจํค์ง์? ๋ค๋ฅธ ํจํค์ง์?) ํ์ฅํ ์ ์๋ค๋ฉด ๊ทธ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ค๋ฌด์์ ๋ฌธ์ ๊ฐ ๋์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ด๊ฑฐํ์ด ๋ ๊ฐ์ง ์ด์ ๋ก ํ์ฅ๋ ์ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
๋ค์์คํ์ด์ค: Swift์์ enum ์ ํ์ ์๋ก์ด ๋ค์์คํ์ด์ค๋ฅผ ๋์ ํฉ๋๋ค. ๋ค์์คํ์ด์ค ์ด๋ฆ์ด ๋ชจ๋ ๊ณณ์์ ๋ฐ๋ณต๋ ํ์๊ฐ ์๋๋ก ํ๋ ์ค์ํ ๊ธฐ๊ณ(๊ตฌ๋ฌธ ์คํ, ์ ํ ์ถ๋ก )๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Month ์ด๊ฑฐํ ๊ฐ์ ๊ฒฝ์ฐ ์ฌ๋ฐ๋ฅธ ์ปจํ ์คํธ์์ Month.January(๋๋ ๋ ๋์ ๊ฒฝ์ฐ MyPackage.Month.January) ๋์ .January๋ฅผ ์ธ ์ ์์ต๋๋ค. ์ด๊ฑฐํ ๋ค์์คํ์ด์ค๊ฐ ํ์ํฉ๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ด๊ฑฐํ ๋ค์์คํ์ด์ค๋ ์ด๋ป๊ฒ ํ์ฅ๋ฉ๋๊น? ์ค์ ๋ก ์ด ์์ ์ ์ํํ๋ ค๋ฉด ์ด๋ค ์ข ๋ฅ์ ๊ตฌ๋ฌธ ์คํ์ด ํ์ํฉ๋๊น?
๋ด๊ฐ ์ธ๊ธํ ๋ชจ๋ ์์์ ์ ํ ์ด๋ฆ์ ์ ๋์ฌ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ค์์คํ์ด์ค๊ฐ ์ด๋ป๊ฒ ์๊ฒจ๋ฌ๋์ง ์ดํดํฉ๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ๋ค์์คํ์ด์ค๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋ํด ๊ฐํ๊ฒ ๋๋๋ค๋ฉด ๋ฐ๋ํ์ง๋ ์๊ฒ ์ง๋ง, ์ด๋ ์ด ์ ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฉ๋๋ค. ์ ๋์ฌ๋ ํ์ฌ ์์คํ ์ ์ ๋ง์ต๋๋ค.
์ด๊ฑฐํ ๊ฐ์ ์์์ ๋๊น? ๋ถ๋ณ์ ๊ฐ์น?
๋๋ ์์๋ฅผ ์๊ฐํ ๊ฒ์ ๋๋ค.
์ด๊ฑฐํ ๊ฐ์ ๋ํด ์ด๋ค ์ข ๋ฅ์ ์์ ์ด ๊ฐ๋ฅํฉ๋๊น(์: ๋ฐ๋ณต ์ธ์): ํ๋๋ ์์ผ๋ก, ํ๋๋ ๋ค๋ก ์ด๋ํ ์ ์์ต๋๊น? ์ถ๊ฐ ๋ด์ฅ ํจ์ ๋๋ ์ฐ์ฐ์๊ฐ ํ์ํฉ๋๊น? (๋ชจ๋ ๋ฐ๋ณต์ด ์์๋๋ก ๋๋ ๊ฒ์ ์๋๋๋ค.) ๋ง์ง๋ง ์ด๊ฑฐํ ๊ฐ์ ์ง๋ ์์ผ๋ก ์ด๋ํ๋ฉด ์ด๋ป๊ฒ ๋ฉ๋๊น? ๋ฐํ์ ์ค๋ฅ์ธ๊ฐ์?
๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ๋ผ์ด์ค/๋ฐฐ์ด(๋งต์ด ์๋)์ ๋ํ ํ์ค Go ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ์ด๊ฑฐํ ๊ฐ์ ์ ์ธ ์์์ ๋ฐ๋ผ ๋ฐ๋ณต ๊ฐ๋ฅํฉ๋๋ค. ์ต์ํ ๋ฒ์ ์ง์์ด ์์ ๊ฒ์ ๋๋ค. ๋๋ ์ธ๋ฑ์ค๋ฅผ ํตํด ์ด๊ฑฐํ์ ์ก์ธ์คํ๋ ๊ฒ์ ํผํ์ง๋ง ๊ทธ๊ฒ์ ๋ํด ๊ฐํ๊ฒ ๋๋ผ์ง๋ ์์ต๋๋ค. ์ด๋ฅผ ์ง์ํ์ง ์์ผ๋ฉด ์ ์ฌ์ ์ธ ๋ฐํ์ ์ค๋ฅ๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค.
์ง์ ํ ๋น์ด๋ ์ ํ ์บ์คํ ์ด๋ ์๊ด์์ด ์ด๊ฑฐํ์ ์๋ชป๋ ๊ฐ์ ํ ๋นํ๋ฉด ์๋ก์ด ๋ฐํ์ ์ค๋ฅ(ํจ๋?)๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด๊ฒ์ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฝํ๋ฉด ์ ์ํ ์ด๊ฑฐํ ๊ฐ์ ์ ํ์ด ์ง์ ๋ ์์์ ๋น์ทํ์ง๋ง(์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ์ฉ์ ์ ์ ์์ ๊ฐ์ด ์์ ์ ์์) ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ทธ ๋ง์ด ๋ง๋ ๊ฒ ๊ฐ์ต๋๊น? (์ด๊ฒ์ Pascal์ด ์ฝ 45๋ ์ ์ ๊ฐ์ฒํ ์ด๊ฑฐํ์ ๋ํด ์ธ์ด๊ฐ ์ทจํ ๊ณ ์ ์ ์ธ ์ ๊ทผ ๋ฐฉ์๊ณผ ์ผ์นํฉ๋๋ค).
์, ๊ทธ๊ฒ์ด ๋ฐ๋ก ์ ๊ฐ ์ ์ํ๋ ๊ฒ์ ๋๋ค.
switch ๋ฌธ์ ์ด๋ป์ต๋๊น? ์ ์์ ์ฃผ์ ๋์ธ ์ค ํ๋์ธ AIUI.
์ด๊ฑฐํ์ ์ผค ์ ์๋ค๋ ๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌด์์ด๋ ์ผค ์ ์๊ธฐ ๋๋ฌธ์ ์์๋์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ค์์น์ ์ด๊ฑฐ ํ์ ์์ ํ ๋ง์กฑํ์ง ๋ชปํ ๊ฒฝ์ฐ swift์ ์ค๋ฅ๊ฐ ์์ง๋ง ์์์ฌ๊ฐ ์ฒ๋ฆฌ ํ ์ โโ์์ต๋๋ค.
@jediorange ๋๋ ํนํ ๋ง์ง๋ง ๋ถ๋ถ์ ๋ํ ์ง๋ฌธ, ์ฆ ์ ์์ ์์ ํ๊ฒ ์ ์งํ๊ธฐ ์ํด ์ฒ ์ ํ ๊ฒ์ฌ๊ฐ ์์ด์ผ ํ๋์ง ์ฌ๋ถ์ ๋ํด ์ธ๊ธํ์ต๋๋ค. "์๋์ค"๋ ๋ฌผ๋ก ์๋ฒฝํ๊ฒ ์ข์ ๋๋ต์ ๋๋ค.
์ด ๋ฌธ์ ์ ์๋ ๋ฉ์์ง ๋ protobuf๋ฅผ ๋๊ธฐ๋ก ์ธ๊ธํฉ๋๋ค. ๋๋ ์ง๊ธ ์ฃผ์ด์ง ์๋ฏธ๋ก ์ ์ฌ์ฉํ์ฌ protobuf-compiler๊ฐ ๋ชจ๋ ์ด๊ฑฐํ์ ๋ํด ์ถ๊ฐ "์ธ์ํ ์ ์๋" ๊ฒฝ์ฐ๋ฅผ ์์ฑํด์ผ ํ๋ค๋ ์ ์ ๋ช
์์ ์ผ๋ก ๋งํ๊ณ ์ถ์ต๋๋ค(์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํ ์ผ๋ถ ์ด๋ฆ ๋งน๊ธ๋ง ์ฒด๊ณ๋ฅผ ์๋ฏธํจ). ๋ํ ๋์ฝ๋ฉ๋ ์ด๊ฑฐํ ๊ฐ์ด ์ปดํ์ผ๋ ๋ฒ์์ ์๋ ๊ฒฝ์ฐ ์ด๊ฑฐํ์ ์ฌ์ฉํ์ฌ ์์ฑ๋ ๊ตฌ์กฐ์ฒด์ ์ถ๊ฐ ํ๋๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ํ์ฌ ์๋ฐ ์ ๋ํด ์ํ๋๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ๋๋ int
๋ฅผ ๊ณ์ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ด ๋ ๋์ต๋๋ค.
@Merovius ๋ด ์๋ ์ ์์ ์ ์์ ์ฃผ์ ๋๊ธฐ๊ฐ ์๋ ์๋ก protobufs๋ฅผ ์ธ๊ธํ์ต๋๋ค. ๋น์ ์ ๊ทธ ํตํฉ์ ๋ํด ์ข์ ์ง์ ์ ํ์ต๋๋ค. ์๋ง๋ ์ง๊ต ๋ฌธ์ ๋ก ์ทจ๊ธ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด๊ฐ ๋ณธ ๋๋ถ๋ถ์ ์ฝ๋๋ ์์ฑ๋ protobuf ์ ํ์ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ ํธํ๋ ์ฑ ์์ค ๊ตฌ์กฐ์ฒด๋ก ๋ณํํฉ๋๋ค. protobuf๊ฐ ๋ณ๊ฒฝ๋์ง ์๊ณ ๊ณ์๋ ์ ์๊ณ ์ฑ ์ ์์๊ฐ ์ด๋ฅผ Go ์ด๊ฑฐํ์ผ๋ก ๋ณํํ๋ ค๋ ๊ฒฝ์ฐ ๋ณํ ํ๋ก์ธ์ค์์ ๋ฐ์ํ๋ ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค๋ ๊ฒ์ด ์ ์๊ฐ์ ์ดํด๊ฐ ๋ฉ๋๋ค.
@derekperkins ์ถ๊ฐ ์ง๋ฌธ:
๋ช ์์ ์ผ๋ก ์ด๊ธฐํ๋์ง ์์ ์ด๊ฑฐํ ๋ณ์์ 0 ๊ฐ์ ๋ฌด์์ ๋๊น? ์ผ๋ฐ์ ์ผ๋ก 0์ด ๋ ์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค(๋ฉ๋ชจ๋ฆฌ ํ ๋น/์ด๊ธฐํ๋ฅผ ๋ณต์กํ๊ฒ ํจ).
์ด๊ฑฐํ ๊ฐ์ผ๋ก ์ ํ๋ ์ฐ์ ์ ์ํํ ์ ์์ต๋๊น? ์๋ฅผ ๋ค์ด, Pascal์์(๋ด๊ฐ ํ ๋ฒ ํ๋ก๊ทธ๋๋ฐํ ๊ฒ์ ์๋ ๋ก ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ฉด) ๋๋๊ฒ๋ 1๋จ๊ณ ์ด์์ผ๋ก ๋ฐ๋ณตํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค. ๋๋ก๋ ์ด๊ฑฐํ ๊ฐ์ ๊ณ์ฐํ๊ณ ์ถ์ ๋๋ ์์์ต๋๋ค.
๋ฐ๋ณต๊ณผ ๊ด๋ จํ์ฌ go ์์ฑ ์์ฑ ๋ฐ๋ณต(๋ฐ stringify) ์ง์์ด ์ถฉ๋ถํ์ง ์์ ์ด์ ๋ ๋ฌด์์ ๋๊น?
๋ช ์์ ์ผ๋ก ์ด๊ธฐํ๋์ง ์์ ์ด๊ฑฐํ ๋ณ์์ 0 ๊ฐ์ ๋ฌด์์ ๋๊น? ์ผ๋ฐ์ ์ผ๋ก 0์ด ๋ ์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค(๋ฉ๋ชจ๋ฆฌ ํ ๋น/์ด๊ธฐํ๋ฅผ ๋ณต์กํ๊ฒ ํจ).
์ด๊ธฐ ์ ์์์์ ์ธ๊ธํ๋ฏ์ด ์ด๊ฒ์ ๋ ์๊ฒฉํ ๊ฒฐ์ ์ค ํ๋์ ๋๋ค. ์ ์ ์์๊ฐ ๋ฐ๋ณต์ ์ค์ํ๋ค๋ฉด ์ฒซ ๋ฒ์งธ ์ ์๋ ๊ฐ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ํ๋ ๊ฒ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด๊ฑฐํ ๊ฐ์ผ๋ก ์ ํ๋ ์ฐ์ ์ ์ํํ ์ ์์ต๋๊น? ์๋ฅผ ๋ค์ด, Pascal์์(๋ด๊ฐ ํ ๋ฒ ํ๋ก๊ทธ๋๋ฐํ ๊ฒ์ ์๋ ๋ก ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ฉด) ๋๋๊ฒ๋ 1๋จ๊ณ ์ด์์ผ๋ก ๋ฐ๋ณตํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค. ๋๋ก๋ ์ด๊ฑฐํ ๊ฐ์ ๊ณ์ฐํ๊ณ ์ถ์ ๋๋ ์์์ต๋๋ค.
์ซ์ ๊ธฐ๋ฐ ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ ๋ฌธ์์ด ๊ธฐ๋ฐ ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ด๊ฑฐํ์ ์์์ 0 ๊ธฐ๋ฐ ์ธ๋ฑ์ค๊ฐ ์์์ ์๋ฏธํฉ๋๊น? ์ธ๋ฑ์ค ๊ธฐ๋ฐ์ด ์๋ ์ง์๋๋ range
๋ฐ๋ณต์๋ง ์์กดํ๋ค๊ณ ์์ ์ธ๊ธํ ์ด์ ๋ ๋ฐฐ์ด์ด๋ ๋งต ๋๋ ๊ทธ ์๋์ ์๋ ๋ฌด์์ด๋ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ณธ ๊ตฌํ์ ๋
ธ์ถํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ธ๋ฑ์ค๋ฅผ ํตํด ์ด๊ฑฐํ์ ์ก์ธ์คํด์ผ ํ ํ์๋ ์์ง๋ง ๊ทธ๊ฒ์ด ์ ์ตํ ์ด์ ๊ฐ ์๋ค๋ฉด ํ์ฉํ์ง ์์ ์ด์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฐ๋ณต๊ณผ ๊ด๋ จํ์ฌ go ์์ฑ ์์ฑ ๋ฐ๋ณต(๋ฐ stringify) ์ง์์ด ์ถฉ๋ถํ์ง ์์ ์ด์ ๋ ๋ฌด์์ ๋๊น?
๋ฐ๋ณต์ ๊ฐ์ธ์ ์ผ๋ก ์ฃผ์ ์ฌ์ฉ ์ฌ๋ก๋ ์๋์ง๋ง ์ ์์ ๊ฐ์น๋ฅผ ์ถ๊ฐํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๊ฒ์ด ์๋๋ ฅ์ด๋ผ๋ฉด go generate
์ด๋ฉด ์ถฉ๋ถํ ๊ฒ์
๋๋ค. ๊ทธ๊ฒ์ ๊ฐ์น ์์ ์ ๋ณด์ฅํ๋ ๋ฐ ๋์์ด ๋์ง ์์ต๋๋ค. Stringer()
์ธ์๋ ์์ ๊ฐ์ด iota
๋๋ int
๋๋ "์ค์ " ๊ฐ์ ๋ํ๋ด๋ ๋ค๋ฅธ ์ ํ์ด ๋ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ํ (Un)MarshalJSON
, (Un)MarshalBinary
, Scanner/Valuer
๋ฐ Stringer
๊ฐ์ด ํต์ ์ ์ฌ์ฉ๋์๋์ง ํ์ธํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ธฐํ ์ง๋ ฌํ ๋ฐฉ๋ฒ์ ์์ฑํด์ผ ํฉ๋๋ค. Go๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ชจ๋ ๊ฒ.
@griesemer ์ ์ด๋ ๊ฐ ์ถ๊ฐ/์ ๊ฑฐ์ ๊ด๋ จํ์ฌ ์ด๊ฑฐํ์ ํ์ฅ์ฑ์ ๋ํ ๊ทํ์ ์ง๋ฌธ์ ์์ ํ ๋๋ตํ์ง ๋ชปํ์ ์๋ ์์ต๋๋ค. ๊ทธ๊ฒ๋ค์ ํธ์งํ ์ ์๋ ๋ฅ๋ ฅ์ ์ด ์ ์์ ํ์์ ์ธ ๋ถ๋ถ์ ๋๋ค.
@Merovius ์์ https://github.com/golang/go/issues/19814#issuecomment -290969864
์ด๊ฑฐํ ์งํฉ์ ๋ณ๊ฒฝํ๋ ค๋ ๋ชจ๋ ํจํค์ง๋ ์๋์ผ๋ก ๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ ๋๊ตฌ๋ฅผ ๊ฐ์ ๋ก ์ค๋จํฉ๋๋ค.
์ด๊ฒ์ด ๋ค๋ฅธ ์ฃผ์ API ๋ณ๊ฒฝ ์ฌํญ๊ณผ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ ํ, ๊ธฐ๋ฅ ๋๋ ๊ธฐ๋ฅ ์๋ช ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก BC๋ฅผ ์ ์คํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ ํจํค์ง ์์ฑ์์๊ฒ ๋ฌ๋ ค ์์ต๋๋ค.
๊ตฌํ์ ๊ด์ ์์ ๊ธฐ๋ณธ๊ฐ์ด ๋ชจ๋ 0์ด ์๋ ์ ํ์ ์ง์ํ๋ ๊ฒ์ ๋งค์ฐ ๋ณต์กํฉ๋๋ค. ์ค๋๋ ์๋ ๊ทธ๋ฌํ ์ ํ์ด ์์ต๋๋ค. ๊ทธ๋ฌํ ๊ธฐ๋ฅ์ ์๊ตฌํ๋ ๊ฒ์ ์ด ์์ด๋์ด์ ๋ฐ๋๋๋ ํ์๋ก ๊ฐ์ฃผ๋์ด์ผ ํฉ๋๋ค.
์ธ์ด์์ ์ฑ๋์ ๋ง๋๋ ๋ฐ make
๊ฐ ํ์ํ ์ ์ผํ ์ด์ ๋ ์ฑ๋ ์ ํ์ ๋ํด ์ด ๊ธฐ๋ฅ์ ์ ์งํ๊ธฐ ์ํด์์
๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด make
๋ ์ ํ ์ฌํญ์ผ ์ ์์ผ๋ฉฐ ์ฑ๋ ๋ฒํผ ํฌ๊ธฐ๋ฅผ ์ค์ ํ๊ฑฐ๋ ๊ธฐ์กด ๋ณ์์ ์ ์ฑ๋์ ํ ๋นํ๋ ๋ฐ๋ง ์ฌ์ฉ๋ฉ๋๋ค.
@derekperkins ๋๋ถ๋ถ์ ๋ค๋ฅธ API ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ง์ ์ธ ๋ณต๊ตฌ๋ฅผ ์ํด ์กฐ์ ๋ ์ ์์ต๋๋ค. Russ Cox ์ค๋ช ์ ์ฝ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ง์ ๋ด์ฉ์ด ๋งค์ฐ ๋ช ํํด์ง๋๋ค.
(ํ์ฌ const+iota ๊ตฌ์กฐ์ ๊ฐ์) ๊ฐ๋ฐฉํ ์ด๊ฑฐํ์ (์๋ฅผ ๋ค์ด) a) ์ ๊ฐ์ ์ฌ์ฉํ์ง ์๊ณ ์ ์ํ๊ณ , b) ์ ๊ฐ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ญ ์ข ์์ฑ์ ์ ๋ฐ์ดํธํ๊ณ , c) ๊ฐ์ ์ฌ์ฉํ๊ธฐ ์์ํจ์ผ๋ก์จ ์ ์ง์ ์ธ ๋ณต๊ตฌ๋ฅผ ํ์ฉํฉ๋๋ค. ๋๋ ๊ฐ์ ์ ๊ฑฐํ๋ ค๋ฉด a) ๊ฐ ์ฌ์ฉ์ ์ค์งํ๊ณ b) ์ ๊ฑฐํ ๊ฐ์ ์ธ๊ธํ์ง ์๋๋ก ์ญ ์ข ์์ฑ์ ์ ๋ฐ์ดํธํ๊ณ c) ๊ฐ์ ์ ๊ฑฐํฉ๋๋ค.
๋ซํ(์ปดํ์ผ๋ฌ์์ ์ฒ ์ ํ ๊ฒ์ฌ) ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ฉด ์ด๊ฒ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ์ ๊ฐ์ ์ ์ํ๋ฉด ์ปดํ์ผ๋ฌ๋ ๋๋ฝ๋ ์ค์์น ์ผ์ด์ค์ ๋ํด ์ฆ์ ๋ถํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ์ ์ํ๊ธฐ ์ ์ ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
๋ฌธ์ ๋ ๊ฐ๋ณ ๋ณ๊ฒฝ ์ฌํญ์ด ์ค๋จ๋๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ ์ ์๋์ง ์ฌ๋ถ์ ๊ดํ ๊ฒ์ด ์๋๋ผ(๋ถ๋ฆฌ๋ ์ ์์) ์ค๋จ๋์ง ์๋ ๋ถ์ฐ ์ฝ๋ ๊ธฐ๋ฐ์ ๋ํด ์ค๋จ๋์ง ์๋ ์ปค๋ฐ ์ํ์ค๊ฐ โโ์๋์ง ์ฌ๋ถ์ ๊ดํ ๊ฒ์ ๋๋ค.
๊ตฌํ์ ๊ด์ ์์ ๊ธฐ๋ณธ๊ฐ์ด ๋ชจ๋ 0์ด ์๋ ์ ํ์ ์ง์ํ๋ ๊ฒ์ ๋งค์ฐ ๋ณต์กํฉ๋๋ค. ์ค๋๋ ์๋ ๊ทธ๋ฌํ ์ ํ์ด ์์ต๋๋ค. ๊ทธ๋ฌํ ๊ธฐ๋ฅ์ ์๊ตฌํ๋ ๊ฒ์ ์ด ์์ด๋์ด์ ๋ฐ๋๋๋ ํ์๋ก ๊ฐ์ฃผ๋์ด์ผ ํฉ๋๋ค.
@ianlancetaylor ํ์คํ ์ ์ฒด ๊ตฌํ์ ๋ํด ๋งํ ์๋ ์์ง๋ง ์ด๊ฑฐํ์ด 0 ๊ธฐ๋ฐ ๋ฐฐ์ด๋ก ๊ตฌํ๋ ๊ฒฝ์ฐ( @griesemer ๊ฐ ์ฐฌ์ฑํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆผ) ์ธ๋ฑ์ค๊ฐ 0์ธ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. "all-bits-zero"๋ก ๋ ๋ฐฐ๊ฐ ๋ ์ ์์ต๋๋ค.
๋ซํ(์ปดํ์ผ๋ฌ์์ ์ฒ ์ ํ ๊ฒ์ฌ) ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ฉด ์ด๊ฒ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
@Merovius go vet
๋๋ @jediorange ๊ฐ ์ ์ํ ๊ฒ๊ณผ ์ปดํ์ผ๋ฌ๊ฐ ์ํํ ์ ์ฌํ ๋๊ตฌ๋ก ์์ ์ฑ์ ํ์ธํ๋ค๋ฉด ๊ฑฑ์ ์ ๋ ์ ์์ต๋๊น?
@derekperkins ๊ทธ๋ค์ ์ ํด์ฑ์ ๋ํด ๊ทธ๋ ์ต๋๋ค. ์ ์ฉ์ฑ์ด ๋ถ์กฑํด์๊ฐ ์๋๋๋ค. ๋ฒ์ ์๊ณก์ ๋์ผํ ๋ฌธ์ ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ณ ๋ ค๋๋ ๋๋ถ๋ถ์ ์ฌ์ฉ ์ฌ๋ก(์์คํ ํธ์ถ, ๋คํธ์ํฌ ํ๋กํ ์ฝ, ํ์ผ ํ์, ๊ณต์ ๊ฐ์ฒด ๋ฑ)์์๋ ๋ฐ์ํฉ๋๋ค. proto3์๋ ๊ฐ๋ฐฉํ ์ด๊ฑฐํ์ด ํ์ํ๊ณ proto2์๋ ๊ทธ๋ ์ง ์์ ์ด์ ๊ฐ ์์ต๋๋ค. ์ด๋ ๋ง์ ์ค๋จ๊ณผ ๋ฐ์ดํฐ ์์ ์ฌ๊ฑด์์ ๋ฐฐ์ด ๊ตํ์ ๋๋ค. Google์ ์ด๋ฏธ ๋ฒ์ ์๊ณก์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฝค ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด๊ณ ์์ต๋๋ค. ๋ด ๊ด์ ์์๋ ๊ธฐ๋ณธ ์ผ์ด์ค๊ฐ ์๋ ๊ฐ๋ฐฉํ ์ด๊ฑฐํ์ด ์ฌ๋ฐ๋ฅธ ์๋ฃจ์ ์ผ ๋ฟ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ชป๋ ๊ฐ์ ๋ํ ์์ ์ฑ ์ฃผ์ฅ๊ณผ๋ ๋ณ๊ฐ๋ก, ๋ด๊ฐ ๋งํ ์ ์๋ ๋ฐ์ ๋ฐ๋ฅด๋ฉด ๊ทธ๊ฒ๋ค์ ์ค์ ๋ก ํ ์ด๋ธ์ ๋ง์ ๊ฒ์ ๊ฐ์ ธ์ค์ง ์์ต๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ๋งํ์ง๋ง, ๋๋ ๊ฒฐ์ ์๊ฐ ์๋๋๋ค.
@derekperkins https://github.com/golang/go/issues/19814#issuecomment -322818206์์ (๊ทํ์ ๊ด์ ์์) ๋ค์์ ํ์ธํ๊ณ ์์ต๋๋ค.
https://github.com/golang/go/issues/19814#issuecomment -322895247์์ ๋ค์๊ณผ ๊ฐ์ด ๋งํ๊ณ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ https://github.com/golang/go/issues/19814#issuecomment -322903714์์ "ํธ์ง ๊ธฐ๋ฅ์ด ์ด ์ ์์ ์ค์ํ ๋ถ๋ถ"์ด๋ผ๊ณ ๋งํ๊ณ ์์ต๋๋ค.
ํผ๋์ค๋ฝ์ต๋๋ค. ๋ฐ๋ผ์ ๋ฐ๋ณต์ ์ฃผ์ ๋๊ธฐ๊ฐ ์๋๋๋ค. ์ข์ต๋๋ค. ์ด๋ ์์์ธ ์ด๊ฑฐํ ๊ฐ์ ์ด๊ฑฐํ ์ ์ธ์ ์ต์ํ ๋จ๊ฒจ๋๊ณ ์ ์ธ ์ธ๋ถ๋ก ํ์ฅํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ง๊ธ ๋น์ ์ ๊ทธ๊ฒ๋ค์ ํธ์งํ๋ ๋ฅ๋ ฅ์ด ์ค์ํ๋ค๊ณ ๋งํ๊ณ ์์ต๋๋ค. ๊ทธ๊ฒ ๋ฌด์จ ๋ป์ด์ผ? ํ์คํ ๊ทธ๊ฒ๋ค์ด ํ์ฅ๋ ์ ์๋ค๋ ๊ฒ์ ์๋๋๋ค(๋ชจ์์ด ๋ ๊ฒ์ ๋๋ค). ๊ทธ๋ค์ ๋ณ์์ ๋๊น? (๊ทธ๋ฌ๋ ๊ทธ๋ค์ ์์๊ฐ ์๋๋๋ค).
https://github.com/golang/go/issues/19814#issuecomment -322903714์์ ์ด๊ฑฐํ์ 0 ๊ธฐ๋ฐ ๋ฐฐ์ด๋ก ๊ตฌํํ ์ ์๋ค๊ณ ๋งํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ์ด๊ฑฐํ ์ ์ธ์ด 0๋ถํฐ ์์ํ๋ ์์ ์ธ๋ฑ์ค์ธ ์ด๊ฑฐํ ์ด๋ฆ์ ์ ๋ ฌ๋ ๋ชฉ๋ก๊ณผ ํจ๊ป ์ด๊ฑฐํ ๊ฐ์ ๋ฐฐ์ด(๊ณต๊ฐ์ด ์๋์ผ๋ก ์์ฝ๋จ)์ ์๋ก์ด ์ ํ์ ๋์ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๊ฒ ๋ค๊ฐ ๋งํ๋๊ฑฐ์ผ? ๊ทธ๋ ๋ค๋ฉด ๊ณ ์ ํฌ๊ธฐ ๋ฐฐ์ด๊ณผ ํจ๊ป ์ฌ์ฉํ ์์ ์ธ๋ฑ์ค ๋ชฉ๋ก์ ์ ์ธํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํ์ง ์์ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋ฐฐ์ด ๊ฒฝ๊ณ ๊ฒ์ฌ๋ ์ด๊ฑฐํ ๋ฒ์๋ฅผ "ํ์ฅ"ํ ์ ์์ผ๋ฉฐ ๋ฐ๋ณต์ด ์ด๋ฏธ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๋์ผ๋ก ํ์ธํฉ๋๋ค.
๋ด๊ฐ ๋ฌด์์ ๋์น๊ณ ์์ต๋๊น?
ํผ๋์ค๋ฝ์ต๋๋ค. ๋ฐ๋ผ์ ๋ฐ๋ณต์ ์ฃผ์ ๋๊ธฐ๊ฐ ์๋๋๋ค. ์ข์ต๋๋ค.
๋๋ ์ด๊ฑฐํ์ ์ํ๋ ๋ด ๋๋ฆ์ ์ด์ ๊ฐ ์์ผ๋ฉฐ @bep ์ ๋ค๋ฅธ ์ฌ๋๋ค์ ํฌํจํ์ฌ ์ด ์ค๋ ๋์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ ์์ ํ์ํ ๋ถ๋ถ์ผ๋ก ํํํ ๊ฒ์ ๊ณ ๋ คํ๋ ค๊ณ ํฉ๋๋ค.
์ด๋ ์์์ธ ์ด๊ฑฐํ ๊ฐ์ ์ด๊ฑฐํ ์ ์ธ์ ์ต์ํ ๋จ๊ฒจ๋๊ณ ์ ์ธ ์ธ๋ถ๋ก ํ์ฅํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ง๊ธ ๋น์ ์ ๊ทธ๊ฒ๋ค์ ํธ์งํ๋ ๋ฅ๋ ฅ์ด ์ค์ํ๋ค๊ณ ๋งํ๊ณ ์์ต๋๋ค. ๊ทธ๊ฒ ๋ฌด์จ ๋ป์ด์ผ? ํ์คํ ๊ทธ๊ฒ๋ค์ด ํ์ฅ๋ ์ ์๋ค๋ ๊ฒ์ ์๋๋๋ค(๋ชจ์์ด ๋ ๊ฒ์ ๋๋ค). ๊ทธ๋ค์ ๋ณ์์ ๋๊น? (๊ทธ๋ฌ๋ ๊ทธ๋ค์ ์์๊ฐ ์๋๋๋ค).
๋ด๊ฐ ํธ์งํ๋ผ๊ณ ๋งํ ๋ @Merovius ์ ์์ ์ ๊ทธ๊ฒ๋ค์ด ์ด๋ฆฐ ์ด๊ฑฐํ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ๋น๋ ์ ์์์ด์ง๋ง ์์ํ ์ ๊ฒจ ์์ง๋ ์์ต๋๋ค.
#19814(์ฃผ์)์์ ์ด๊ฑฐํ์ 0๋ถํฐ ์์ํ๋ ๋ฐฐ์ด๋ก ๊ตฌํํ ์ ์๋ค๊ณ ๋งํฉ๋๋ค.
์ด๊ฒ์ https://github.com/golang/go/issues/19814#issuecomment -322884746 ๋ฐ @ianlancetaylor ์ https๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ๋ฐฐํ์์ ๊ตฌํ๋ ์ ์๋ค๊ณ ์์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ด ๊ธ์ฌ ์์ค์ ๋์ด ์ถ์ธกํ ๊ฒ์ผ ๋ฟ์ ๋๋ค. //github.com/golang/go/issues/19814#issuecomment -322899668
"์ด๊ฑฐํ ๊ฐ์ผ๋ก ์ ํ๋ ์ฐ์ ์ ์ํํ ์ ์์ต๋๊น? ์๋ฅผ ๋ค์ด, Pascal์์(๋ด๊ฐ ํ ๋ฒ ํ๋ก๊ทธ๋๋ฐํ ๊ฒ์ ์๋ ๋ก ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ฉด) ๋๋๊ฒ๋ ์ข ์ข > 1๋จ๊ณ์์ ๋ฐ๋ณตํด์ผ ํ์ต๋๋ค. ๋๋ก๋ ์ด๊ฑฐํ ๊ฐ์ ๊ณ์ฐํ๊ณ ์ถ์์ต๋๋ค."
์ ์๊ฐ ์๋ ์ด๊ฑฐํ์ ๋ํด ์ด๋ป๊ฒ ํ ๊ณํ์ธ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ฐ๋ผ์ ํด๋น ์ฐ์ ์ด ์ด๊ฑฐํ์ ๊ฐ ๋ฉค๋ฒ์ ์ ์ธ ์์์ ๋ฐ๋ผ ์์์ ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ํ ๋นํด์ผ ํ๋์ง ์ฌ๋ถ์ ๋ํ ์ ์ง๋ฌธ์ ๋๋ค.
๊ตฌํ์ ๊ด์ ์์ ๊ธฐ๋ณธ๊ฐ์ด ๋ชจ๋ 0์ด ์๋ ์ ํ์ ์ง์ํ๋ ๊ฒ์ ๋งค์ฐ ๋ณต์กํฉ๋๋ค. ์ค๋๋ ์๋ ๊ทธ๋ฌํ ์ ํ์ด ์์ต๋๋ค. ๊ทธ๋ฌํ ๊ธฐ๋ฅ์ ์๊ตฌํ๋ ๊ฒ์ ์ด ์์ด๋์ด์ ๋ฐ๋๋๋ ํ์๋ก ๊ฐ์ฃผ๋์ด์ผ ํฉ๋๋ค.
๋ค์ ๋งํ์ง๋ง ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ชฐ๋ผ์ ๋ํ๋ฅผ ๊ณ์ํ๋ ค๊ณ ํ์ต๋๋ค. ๊ฒฐ๊ตญ ์ ๋ ๊ธ์ง์ ์ธ ๊ฒ์ ์ ์ํ๋ ค๊ณ ํ์ง ์์ต๋๋ค. ์ด์ ์ ์ธ๊ธํ๋ฏ์ด "์ด๊ฒ์ Pascal์ด ์ฝ 45๋ ์ ์ ๊ฐ์ฒํ ์ด๊ฑฐํ์ ๋ํด ์ธ์ด๊ฐ ์ทจํ ๊ณ ์ ์ ์ธ ์ ๊ทผ ๋ฐฉ์๊ณผ ์ผ์นํ ๊ฒ์ ๋๋ค", ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ฒญ๊ตฌ์์ ๋ง์ต๋๋ค.
๊ด์ฌ์ ํ๋ช ํ์ ๋ค๋ฅธ ๋ถ๋ค์ ๋ถ๋ด ์์ด ์ฐธ์ฌํด ์ฃผ์ญ์์ค.
๋ ๋ค๋ฅธ ์ง๋ฌธ์ ์ด๋ฌํ ์ด๊ฑฐํ์ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์ด๋ ์ฌ๋ผ์ด์ค๋ก ์์ธ์ ์์ฑํ ์ ์๋์ง ์ฌ๋ถ์ ๋๋ค. ์ฌ๋ผ์ด์ค๋ ์ข ์ข enum->value ๋งคํ์ ๋ํ๋ด๋ ๋งค์ฐ ํจ์จ์ ์ด๊ณ ๊ฐ๊ฒฐํ ๋ฐฉ๋ฒ์ด๋ฉฐ ๋งต์ ์๊ตฌํ๋ ๊ฒ์ ๋ถํํ ์ผ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@derekperkins ๊ทธ๋, ์ฐ๋ฆฌ(๋๋ ์ ์ด๋ ๋)๊ฐ ๋ค์ ์์ ์ผ๋ก ๋์๊ฐ๊ฒ ํ๋ ๊ฒ์ด ๊ฑฑ์ ๋๋ค. ํด๊ฒฐํ๋ ค๋ ๋ฌธ์ ๋ ๋ฌด์์ ๋๊น? ์ฐ๋ฆฌ๊ฐ ํ์ฌ ์์์ ์๋ง๋ iota๋ก ํ๋ ์ผ์ ์์ฑํ๋ ๋ ์ข์ ๋ฐฉ๋ฒ์ ์ํ์ญ๋๊น? ์ฆ, (์๋ง๋) ์ง๋์น๊ฒ ๋ถ๋ด์ค๋ฌ์ด ํ๊ธฐ๋ฒ์ ๋ํ ์ผ๋ถ ๊ตฌ๋ฌธ ์คํ? (๊ทธ๋ฅ ์ดํดํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ ์ข์ ๋๋ต์ ๋๋ค.)
๋น์ ์ ๊ทธ๊ฒ๋ค์ ์ํ๋ ์์ ๋ง์ ์ด์ ๊ฐ ์๋ค๊ณ ์ธ๊ธํ์ต๋๋ค. ์๋ง๋ ๊ทธ ์ด์ ๊ฐ ๋ฌด์์ธ์ง ์กฐ๊ธ ๋ ์ค๋ช ํ ์ ์์ ๊ฒ์ ๋๋ค. ๋น์ ์ด ๋งจ ์ฒ์์ ์ค ์๋ ๋์๊ฒ๋ณ๋ก ์๋ฏธ๊ฐ ์์ง๋ง ์๋ง๋ ๋๋ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ ๊ฒ์ ๋๋ค.
์๋ ๊ทธ๋๋ก ๋ชจ๋ ์ฌ๋์ ์ด ์ ์("์ด๊ฑฐํ")์ด ์๋ฐํ๋ ๋ด์ฉ์ ๋ํด ์ฝ๊ฐ์ฉ ๋ค๋ฅธ ์ดํด๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ค์ํ ์๋ต์์ ๋ถ๋ช ํด์ก์ต๋๋ค. Pascal ์ด๊ฑฐํ๊ณผ Swift ์ด๊ฑฐํ ์ฌ์ด์๋ ์์ฒญ๋ ๋ฒ์์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ๋น์ (๋๋ ๋ค๋ฅธ ๋๊ตฐ๊ฐ)์ด ์ ์๋ ๋ด์ฉ์ ๋งค์ฐ ๋ช ํํ๊ฒ ์ค๋ช ํ์ง ์๋ ํ(๋๋ ๊ตฌํ์ ์๊ตฌํ์ง ์์ต๋๋ค. ๋ช ์ฌํ์ญ์์ค), ์๋ฏธ ์๋ ์ง์ ์ ์ด๋ฃจ๊ฑฐ๋ ์ด ์ ์์ ์ฅ์ ์ ๋ํด ํ ๋ก ํ๋ ๊ฒ์กฐ์ฐจ ์ด๋ ค์ธ ๊ฒ์ ๋๋ค.
๋ง์ด ๋ผ?
@griesemer ๊ทธ๊ฒ์ ์์ ํ ๋ง์ด ๋๋ฉฐ @rsc๊ฐ Gophercon ์์ ์ด์ผ๊ธฐํ ํต๊ณผ ๊ธฐ์ค์ ์ดํดํฉ๋๋ค. ๋น์ ์ ๋ถ๋ช
ํ ๋๋ณด๋ค ํจ์ฌ ๋ ๊น์ ์ดํด๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. #21473์์ vars์ ๋ํ iota๋ ๋น์์ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์๊ธฐ ๋๋ฌธ์ ๊ตฌํ๋์ง ์์๋ค๊ณ ์ธ๊ธํ์ต๋๋ค. enum
๊ฐ ์ฒ์๋ถํฐ ํฌํจ๋์ง ์์ ๊ฒ๊ณผ ๊ฐ์ ์ด์ ์ธ๊ฐ์? ๊ทธ๊ฒ์ด Go์ ๊ฐ์น๋ฅผ ๋ํ ๊ฒ์ธ์ง ์ฌ๋ถ์ ๋ํ ๊ทํ์ ์๊ฒฌ์ ์๊ณ ์ถ์ต๋๋ค. ๋ง์ฝ ๊ทธ๋ ๋ค๋ฉด, ์ด๋์์ ํ๋ก์ธ์ค๋ฅผ ์์ํ์๊ฒ ์ต๋๊น?
@derekperkins https://github.com/golang/go/issues/19814#issuecomment -323144075์ ์ง๋ฌธ๊ณผ ๊ด๋ จํ์ฌ: ๋น์ (Go์ ๋์์ธ์์) ์ฐ๋ฆฌ๋ ๋น๊ต์ ๋จ์ํ(Pascal ๋๋ C ์คํ์ผ) ์ด๊ฑฐํ๋ง ๊ณ ๋ คํ๊ณ ์์์ต๋๋ค. ๋ชจ๋ ์ธ๋ถ ์ฌํญ์ ๊ธฐ์ตํ์ง ๋ชปํ์ง๋ง ์ด๊ฑฐํ์ ํ์ํ ์ถ๊ฐ ๊ธฐ๊ณ์ ๋ํ ์ด์ ์ด ์ถฉ๋ถํ์ง ์๋ค๋ ๋๋์ ํ์คํ ์์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ๋ค์ด ๋ณธ์ง์ ์ผ๋ก ๋ฏธํ๋๋ ์ง์์ ์ธ ์ ์ธ์ด๋ผ๊ณ ๋๊ผ์ต๋๋ค.
์ด๋ฌํ ์ ํต์ ์ธ ์ด๊ฑฐํ์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฐ์ ์ฐ์ฐ์ ์ํํ ์ ์์ง๋ง(๊ทธ๋ฅ ์ ์์) "(์ด๊ฑฐํ) ๋ฒ์๋ฅผ ๋ฒ์ด๋จ"์ ๋ฌด์์ ์๋ฏธํฉ๋๊น? Go์์๋ ์์์ผ ๋ฟ์ด๋ฉฐ "๋ฒ์๋ฅผ ๋ฒ์ด๋จ"์ ์กด์ฌํ์ง ์์ต๋๋ค. ๋ ๋ค๋ฅธ ํ๋๋ ๋ฐ๋ณต์ ๋๋ค. Pascal์๋ enum ์ ํ์ ๋ณ์ ๊ฐ์ ์๋ค๋ก ์ ์ง์ํค๋ ํน๋ณํ ๋ด์ฅ ํจ์(SUCC ๋ฐ PRED๋ก ์๊ฐํฉ๋๋ค)๊ฐ ์์ต๋๋ค(C์์๋ ++ ๋๋ --๋ง ์ํ). ๊ทธ๋ฌ๋ ๋์ผํ ๋ฌธ์ ๊ฐ ์ฌ๊ธฐ์๋ ๋ํ๋ฉ๋๋ค. ๋์ ๋์ผ๋ฉด ์ด๋ป๊ฒ ๋ฉ๋๊น(++ ๋๋ Pascal์ ํด๋นํ๋ SUCC๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ฑฐํ ๊ฐ์ ๊ฑธ์ณ ๋ฒ์๋ฅผ ์ง์ ํ๋ for ๋ฃจํ์ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ). ๋ง์ง๋ง์ผ๋ก ์ด๊ฑฐํ ์ ์ธ์ ์์๊ฐ ์ด๊ฑฐํ ๊ฐ์ธ ์ ์ ํ์ ๋์ ํฉ๋๋ค. ์ด๋ฌํ ๊ฐ์๋ ์ด๋ฆ(์ด๊ฑฐํ ์ ์ธ์ ์ ์๋ ๊ฐ)์ด ์์ง๋ง ํด๋น ์ด๋ฆ์ ์ ํ๊ณผ ๋์ผํ ๋ฒ์์ ์์ต๋๋ค(Pascal, C์ ๊ฒฝ์ฐ). ์ด๊ฒ์ ์ฝ๊ฐ ๋ถ๋ง์กฑ์ค๋ฝ์ต๋๋ค. ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ์ด๊ฑฐํ์ ์ ์ธํ ๋ ๊ฐ ์ด๊ฑฐํ ์ ํ์ ๋ํด ์ถฉ๋ ์์ด ๋์ผํ ์ด๊ฑฐํ ๊ฐ ์ด๋ฆ์ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ํฌ๋งํ์ง๋ง ์ด๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ฌผ๋ก Go๋ ๊ทธ๊ฒ์ ํด๊ฒฐํ์ง๋ ๋ชปํ์ง๋ง ์์ ์ ์ธ ์ญ์ ์๋ก์ด ์ด๋ฆ ๊ณต๊ฐ์ ๋์ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค. ๋ ์ข์ ์๋ฃจ์ ์ ๊ฐ ์ด๊ฑฐํ์ ์ด๋ฆ ๊ณต๊ฐ์ ๋์ ํ๋ ๊ฒ์ด์ง๋ง ์ด๊ฑฐํ ๊ฐ์ด ์ฌ์ฉ๋ ๋๋ง๋ค ์ด๊ฑฐํ ์ ํ ์ด๋ฆ์ผ๋ก ํ์ ํด์ผ ํ๋ฏ๋ก ์ฑ๊ฐ์ ์ผ์ ๋๋ค. Swift๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ด๊ฑฐํ ์ ํ์ ์ถ๋ก ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ค์ ์ ์ด ์ ๋์ฌ๋ก ๋ถ์ ์ด๊ฑฐํ ๊ฐ ์ด๋ฆ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๊ฝค ๋ง์ ๊ธฐ๊ณ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ๋๋๋ก(์ข ์ข ๊ณต๊ฐ API์์) ์ด๊ฑฐํ ์ ์ธ์ ํ์ฅํด์ผ ํฉ๋๋ค. ๊ทธ๊ฒ์ด ๊ฐ๋ฅํ์ง ์๋ค๋ฉด(๊ทํ๊ฐ ์ฝ๋๋ฅผ ์์ ํ์ง ์์ ๊ฒฝ์ฐ) ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ ๋๋ค. ์์๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๋ฌธ์ ๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค.
์๋ง๋ ๋ ๋ง์ ๊ฒ์ด ์์ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์๊ฐ๋๋ ๊ฒ์ ๋๋ค. ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ ์ง๊ต ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ Go์์ ์ด๊ฑฐํ์ ์๋ฎฌ๋ ์ดํธํ๋ ๊ฒ์ด ๋ ๋ซ๋ค๊ณ ๊ฒฐ์ ํ์ต๋๋ค. ์๋ชป๋ ํ ๋น์ ๋ ๋ฐ์์ํค๋ ์ฌ์ฉ์ ์ ์ ์ ์ ์ ํ๊ณผ ๊ตฌ๋ฌธ ์คํ์ ๋ํ iota ๋ฉ์ปค๋์ฆ(๋ฐ ๋ฅ๋ ฅ์ ๋ฐ๋ณต๋๋ ์ด๊ธฐํ ํํ์์ ์๋ตํจ)์ ๋๋ค.
๋ฐ๋ผ์ ๋ด ์ง๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ฝ๊ฐ์ ๊ตฌ๋ฌธ ์ค๋ฒํค๋๋ก Go์์ ์ ์ ํ๊ฒ ์๋ฎฌ๋ ์ดํธํ ์ ์๋ ํน์ ์ด๊ฑฐํ ์ ์ธ์์ ๋ฌด์์ ์ป๊ณ ์ ํฉ๋๊น? ์ด๊ฑฐํ๊ณผ ์ ์ธ ์ธ๋ถ๋ก ํ์ฅํ ์ ์๋ ์ด๊ฑฐํ ์ ํ์ ์๊ฐํ ์ ์์ต๋๋ค. ๋๋ Swift์์์ฒ๋ผ ์ด๊ฑฐํ ๊ฐ์ ๋ํด ๋ ๋ง์ ๊ธฐ๋ฅ์ ์๊ฐํ ์ ์์ต๋๋ค.
Go์ go Generator๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๊ฑฐ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์คํธ๋ง๊ฑฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ํ์ฅ์ ์ ํํ๋ ๊ฒ์ API ๊ฒฝ๊ณ์์ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. ์ด๊ฑฐํ ๊ฐ์ ๋ํ ๋ ๋ง์ ๊ธฐ๋ฅ(์: Swift์์)์ ๋ง์ ์ง๊ต ๊ฐ๋ ์ ํผํฉํ๊ธฐ ๋๋ฌธ์ Go์ ๋งค์ฐ ๋ค๋ฅด๊ฒ ๋ณด์ ๋๋ค. Go์์๋ ๊ธฐ๋ณธ ๋น๋ฉ ๋ธ๋ก์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
@griesemer ์ฌ๋ ค ๊น์ ๋ต๋ณ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋๋ ๊ทธ๊ฒ๋ค์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์๊ด์ค๋ฌ์ด ์์ ์ ์ธ์ด๋ผ๋ ๋ฐ ๋์ํ์ง ์์ต๋๋ค. Go์์ ํ์
์์ ์ฑ์ ๊ฐ๋ ๊ฒ์ ํ๋ฅญํ๊ณ , enum
๊ฐ ๋์๊ฒ ๊ฐ์ธ์ ์ผ๋ก ์ ๊ณตํ ์ฃผ์ ๊ฐ์น๋ ๊ฐ์น ์์ ์ฑ์ด๋ค. ์ค๋๋ Go์์ ์ด๋ฅผ ๋ชจ๋ฐฉํ๋ ๋ฐฉ๋ฒ์ ํด๋น ๋ณ์์ ๋ชจ๋ ์ง์
์ ์์ ์ ํจ์ฑ ๊ฒ์ฌ ๊ธฐ๋ฅ์ ์คํํ๋ ๊ฒ์
๋๋ค. ์ฅํฉํ๊ณ ์ค์ํ๊ธฐ ์ฝ์ง๋ง ์ค๋๋ ๊ณผ ๊ฐ์ ์ธ์ด๋ก ๊ฐ๋ฅํฉ๋๋ค. ๋๋ ์ด๋ฏธ ์ด๊ฑฐํ ์์ ์ ํ ์ด๋ฆ์ ์ ๋์ฌ๋ก ๋ถ์ฌ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํ๋๋ฐ, ์ฅํฉํ์ง๋ง ํฐ ๋ฌธ์ ๋ ์๋๋๋ค.
๋๋ ๊ฐ์ธ์ ์ผ๋ก iota
์ ๋ํ ๋๋ถ๋ถ์ ์ฌ์ฉ์ ์ซ์ดํฉ๋๋ค. ๋ฉ์ง๊ธด ํ์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ enum
๊ฐ์ ๊ฐ์ db ๋๋ ์ธ๋ถ API์ ๊ฐ์ ์ธ๋ถ ๋ฆฌ์์ค์ ๋งคํ๋๋ฉฐ, ์ฌ์ ๋ ฌํ๋ ๊ฒฝ์ฐ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์์ผ ํ๋ค๋ ์ ์ ๋ ๋ช
์์ ์ผ๋ก ํํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. iota
๋ ๋ฌธ์์ด ๊ฐ ๋ชฉ๋ก์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ enum
๋ฅผ ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ ์ฅ์์์ ๋์์ด ๋์ง ์์ต๋๋ค.
๊ฒฐ๊ตญ ์ด ์ ์์ ์ผ๋ง๋ ๋ ๋ช ํํ ํ ์ ์์์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ฐ๋์ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ์ง์์ ํด์ค๋ค๋ฉด ์ ๋ง ์ข๊ฒ ์ต๋๋ค. ์ ํํ ๊ตฌํ์ ๊ด๊ณ์์ด ์ฌ์ ํ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ฝ๋๋ฅผ ๋ ์์ ํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
Go๊ฐ ์ค๋ ์ด๊ฑฐํ๋ ํ์ค ๋ฐฉ์(https://github.com/golang/go/issues/19814#issuecomment-290909885 ์ฐธ์กฐ)์ด ๊ฑฐ์ ์ ํํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ช ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค.
๋๋ #1 ์์ด๋ ๊ด์ฐฎ์.
go:generate + stringer๋ #2์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ด ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ "์ด๊ฑฐํ"์ ๊ธฐ๋ณธ ์ ํ์ int ๋์ ๋ฌธ์์ด๋ก ๋ง๋ค๊ณ ๋ฌธ์์ด ์์ ๊ฐ์ ์ฌ์ฉํ์ญ์์ค.
์ ํ ์ ์์ explicit
ํค์๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด ํค์๋๋ ํด๋น ์ ํ์ด ์ ์๋ ํจํค์ง์ const ๋ธ๋ก์์ ๋ณํ์ ์ ์ธํ๊ณ ์ด ์ ํ์ผ๋ก์ ๋ณํ์ ๊ธ์งํฉ๋๋ค. (๋๋ restricted
? ์๋๋ฉด enum
๊ฐ explicit type
?)
์์์ ์ธ๊ธํ ์๋ฅผ ๋ค์ ์ฌ์ฉํ์ฌ,
//go:generate stringer -type=SearchRequest
explicit type SearchRequest int
const (
Universal SearchRequest = iota
Web
Images
Local
News
Products
Video
)
const
๋ธ๋ก ๋ด์์ int
์์ SearchRequest
๋ก์ ๋ณํ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํจํค์ง ์์ฑ์๋ง ์ SearchRequest ๊ฐ์ ๋์
ํ ์ ์์ผ๋ฉฐ ์ค์๋ก ๊ฐ์ ๋์
ํ ๊ฐ๋ฅ์ฑ์ ๊ฑฐ์ ์์ต๋๋ค(์ SearchRequest
๋ฅผ ์์ํ๋ ํจ์์ int
์ ๋ฌ).
์ ๋ ์ด ์๋ฃจ์ ์ ์ ๊ทน์ ์ผ๋ก ์ ์ํ๊ณ ์์ง๋ ์์ง๋ง, don't-accidentally-construct-an-invalid-one์ ์ค๋๋ Go์์ ์บก์ฒํ ์ ์๋ ์ด๊ฑฐํ์ ๋๋๋ฌ์ง ์์ฑ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ด๋ณด๋ด์ง ์์ ํ๋ ๊ฒฝ๋ก).
์ด๊ฑฐํ์ ํฅ๋ฏธ๋ก์ด ์ํ์ ์ ํ์ด ์ง์ ๋์ง ์์ ์์์ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ช ์์ ํ์ ๋ณํ์ ์์ฑํ๋ ์ฌ๋๋ค์ ์์ ์ด ๋ฌด์์ ํ๋์ง ์๊ณ ์์ต๋๋ค. ํน์ ์ํฉ์์ Go๊ฐ ๋ช ์์ ์ ํ ๋ณํ์ ๊ธ์งํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๊บผ์ด ๊ณ ๋ คํ๊ฒ ์ง๋ง, ์ด๋ ์ด๊ฑฐํ ์ ํ์ ๊ฐ๋ ๊ณผ ์์ ํ ์ผ์นํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ชจ๋ ์ ํ์ ์ ์ฉ๋๋ ์์ด๋์ด์ ๋๋ค.
๊ทธ๋ฌ๋ ํ์ํ๋์ง ์์ ์์๋ ๋ช
์์ ํ์ ๋ณํ์ ํด๋นํ์ง ์๋ ๋ฐฉ์์ผ๋ก ์ค์๋ก ์๊ธฐ์น ์๊ฒ ํ์ ๊ฐ์ ์์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋์ explicit
์ ๋ํ @randall77 ์ ์ ์์ ๋จ์ํ๊ฒ ํ์ํ๋์ง ์์ ์์๊ฐ ์์์ ์ผ๋ก ํ์์ผ๋ก ๋ณํ๋์ง ์์ ์ ์๋ค๋ ์๋ฏธ๋ก ๋จ์ํ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ช
์์ ํ์ ๋ณํ์ ํญ์ ํ์ํฉ๋๋ค.
ํน์ ์ํฉ์์ Go๊ฐ ๋ช ์์ ์ ํ ๋ณํ์ ๊ธ์งํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๊บผ์ด ๊ณ ๋ คํ ๊ฒ์ ๋๋ค.
@ianlancetaylor ๋ช
์์ ์ด๋ ์์์ ์ด๋ ์ ํ์ ์ผ๋ก ์ ํ ๋ณํ์ ํ์ฉํ์ง ์์ผ๋ฉด ์ฒ์์ ์ด ์ ์์ ๋ง๋ค๊ฒ ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์๋ ํจํค์ง๋ง ์์ฑํ์ฌ ๋ชจ๋ ์ ํ์ ์ถฉ์กฑํ ์ ์์ต๋๋ค. const
์ ์ธ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ์ ํ์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ด๋ค ๋ฉด์์๋ enum
์๋ฃจ์
๋ณด๋ค ํจ์ฌ ๋ซ์ต๋๋ค.
@randall77 , @ianlancetaylor explicit
์ ์์ด ํด๋น ์ ํ์ 0 ๊ฐ๊ณผ ํจ๊ป ์๋ํ๋๋ก ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
@derekperkins ์ ํ ๋ณํ์ ๋ชจ๋ ํ์ฉํ์ง ์์ผ๋ฉด encoding/*
ํจํค์ง์ ๊ฐ์ ์ผ๋ฐ ์ธ์ฝ๋/๋์ฝ๋์์ ์ด๋ฌํ ์ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
@Merovius ๋ด ์๊ฐ์ @ianlancetaylor ๋ ์์์ ๋ณํ(์: ์ ํ๋ ์ ํ์ ์ ํ์ด ์ง์ ๋์ง ์์ ์์ ํ ๋น)์ ๋ํด์๋ง ์ ํ์ ์ ์ํฉ๋๋ค. ๋ช ์์ ๋ณํ์ ์ฌ์ ํ โโ๊ฐ๋ฅํฉ๋๋ค.
@griesemer ์์์ :) ํ์ง๋ง @derekperkins ๊ฐ ๋ค๋ฅด๊ฒ ์ ์ํ๋ ๊ฒ์ ์ดํดํ์ต๋๋ค.
๋ช ์์ ๋ณํ์ ํ์ฉํ๋ ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ด "๋ช ์์ " ํ์ ์์ ๋ํด ์๊ฐํ๋ ๋ฐ๋ก ๊ทธ ์ด์ ๋ฅผ ํผ์ํ์ง ์์ต๋๊น? ๋๊ตฐ๊ฐ๊ฐ ์์์ ๊ฐ์ "๋ช ์์ " ์ ํ์ผ๋ก ๋ณํํ๊ธฐ๋ก ๊ฒฐ์ ํ ์ ์๋ค๋ฉด ์ฃผ์ด์ง ๊ฐ์ด ์ง๊ธ๋ณด๋ค ์ด๊ฑฐ๋ ์์ ์ค ํ๋๋ผ๋ ๋ณด์ฅ์ด ๋ ์ด์ ์์ต๋๋ค.
์๋ง๋ ๊ฐ์ฅ ์ค์ํ ์ ํ์ด ์ง์ ๋์ง ์์ ์์์ ์ฐ์ฐํ๊ฑฐ๋ ์๋ํ์ง ์์ ์ฌ์ฉ์ ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ช ์์ ๋ณํ์ ํ์ฉํ์ง ์๋ ๊ฒ์ด "๋ฐ๋์ ์ ์ "์ ์๋์ง ์ฌ๋ถ์ ๋ํด ์ง๋ฌธํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ช ์์ ๋ณํ์ ํ์ฉํ์ง ์๋ ๊ฒ์ ์ฝ๋ ์์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ๋ณด๋ค ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ๋ ๋ฐฉํฅ์ผ๋ก ํฐ ์ง์ ์ ์ด๋ฃจ๊ณ ์์ต๋๋ค. ๋๋ Go๊ฐ ํ์์ ๋ํด ๋ถ๋ช ํ ์ ์ฅ์ ์ทจํ๊ณ ์๋ค๊ณ ์๊ฐํ๋ค.
@griesemer @Merovius @ianlancetaylor ์ ์ธ์ฉ๋ฌธ์ ๋ค์ ๊ฒ์ํ๊ฒ ์ต๋๋ค. ์ ์ ์์ด ์๋๋ผ ๊ทธ์ ์ ์์ด์๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํน์ ์ํฉ์์ Go๊ฐ ๋ช ์์ ์ ํ ๋ณํ์ ๊ธ์งํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๊บผ์ด ๊ณ ๋ คํ ๊ฒ์ ๋๋ค.
@rogpeppe ์ @Merovius ๋ ๋ชจ๋ ๊ฒฐ๊ณผ์ ๋ํด ์ข์ ์ ์ ์ง์ ํฉ๋๋ค. ๋ช ์์ ๋ณํ์ ํ์ฉํ์ง๋ง ์์์ ๋ณํ์ ํ์ฉํ์ง ์๋ ๊ฒ์ ์ ํจํ ์ ํ์ ๋ณด์ฅํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ์ง๋ง ์ผ๋ฐ ์ธ์ฝ๋ฉ์ ์๋ ๊ฒ์ ๊ฝค ํฐ ๋จ์ ์ด ๋ ๊ฒ์ ๋๋ค.
์ฌ๊ธฐ์ ๊ธฐ์ ์ฐ์ฌ๊ณก์ ์ด ๋ง์์ง๋ง ์ข์ ์์ด๋์ด๊ฐ ์์๋ ๊ฒ ๊ฐ์์. ์ฌ๊ธฐ์ ๋ด๊ฐ ๋ณด๊ณ ์ถ์ ๊ฒ(๋๋ ์ ์ฌํ ๊ฒ)์ด ์์ฝ๋์ด ์์ผ๋ฉฐ, ์ด๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋งํ ๊ฒ๊ณผ ์ผ์นํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ์ธ์ด ๋์์ด๋๋ ์ปดํ์ผ๋ฌ ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋๋ผ๋ ๊ฒ์ ๊ณต๊ฐ์ ์ผ๋ก ์ธ์ ํฉ๋๋ค. ๊ทธ๋์ ๊ทธ๊ฒ์ด ์ผ๋ง๋ ์ ์๋ํ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
go vet
?๋ฅผ ํตํด) default
์ผ์ด์ค๋ฅผ ๊ถ์ฅํฉ๋๋ค. ์ด๋ ํฅํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด ์ด๋ฏธ ์ฒ ์ ํ(์ค๋ฅ ๊ฐ๋ฅ์ฑ์ด ์๋) ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.nil
๊ฐ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.๋ง์ง๋ง ๊ฒ์ _์๋ง๋_ ์ฝ๊ฐ ๋
ผ๋์ ์ฌ์ง๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด ํจ๊ณผ๊ฐ ์์์ง ํ์ ํ ์ ์์ง๋ง ์๋ฏธ์์ผ๋ก ์ ํฉํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. nil
์ฌ๋ผ์ด์ค๋ฅผ ํ์ธํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก nil
์ ๋ํ ์ํ๋ฅผ ๋ฃ์ ์ ์์ต๋๋ค.
๋ฐ๋ณต์ ๊ดํด์๋ ์ค์ ๋ก ์ฌ์ฉํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ๊ทธ๋ก ์ธํ ํผํด๋ ๋ณด์ง ์์ต๋๋ค.
์ ์ธํ ์ ์๋ ๋ฐฉ๋ฒ์ ์:
type MetadataBlockType enum[uint] {
StreamInfo: 0
Padding: 1
Application: 2
SeekTable: 3
VorbisComment: 4
CueSheet: 5
Picture: 6
}
๋ํ ์ ํ์ ์ ์ถํ๊ณ "์ ๊ตฌ๋ฌธ"์ ์ฌ์ฉํ๋ Swift ์คํ์ผ์ _์ข์_์ด์ง๋ง ๋ฐ๋์ ํ์ํ ๊ฒ์ ์๋๋๋ค .
์ด๊ฑฐํ ์ ์ํ
์์ (
์ ์ ์๋ EnumA = iota
AAA
)
์ ํ EnumB int
์์ (
์ ์ ์๋ EnumB = iota
๋น๋น๋น
)
๋จ์ผ Go ํ์ผ์ด๋ ๋์ผํ ํจํค์ง์ ๋ ๊ฐ์ ์ฝ๋๊ฐ ์กด์ฌํ ์ ์์ผ๋ฉฐ ์ฌ์ง์ด ํ๋๋ผ๋ ๋ค๋ฅธ ํจํค์ง์์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
Enum์ ๊ตฌํํ๋ C# ๋ฐฉ์์ ๊ตฌํํ์ญ์์ค.
์ ํ ์์ผ ์ด๊ฑฐํ {Sat, Sun, Mon, Tue, Wed, Thu, Fri}
type Days enum[int] { Sat:1 , Sun, Tue, Wed, Thu, Fri}
type Days enum[string] { Sat: "Saturay" , Sun:"Sunday" ๋ฑ}
@KamyarM ๊ทธ๋ณด๋ค ๋์ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
type Days int
const (
Sat Days = 1+iota
Sun
...
)
๊ทธ๋ฆฌ๊ณ
type Days string
const (
Sat Days = "Saturday"
Sun = "Sunday"
...
)
์๋ก์ด ์ ๊ทผ ๋ฐฉ์/์ธ์์ ๋ํ ์๊ฒฌ์ ์ ํํ๋๋ก ์น์ ํ๊ฒ ์์ฒญํ๊ณ ์ถ์ต๋๋ค. ๋ง์ ์ฌ๋๋ค์ด ์ด ์ค๋ ๋๋ฅผ ๊ตฌ๋ ํ๊ณ ์์ผ๋ฉฐ ์์/๋ฐ๋ณต์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ทธ๋ค์ ์๊ฐ๊ณผ ๊ด์ฌ์ ๋ฌด์ํ๋ ๊ฒ์ผ๋ก ์ธ์๋ ์ ์์ต๋๋ค. โ ์ด์ ๋๊ธ์ ๋ํ ์์ธํ ๋ต๋ณ์ ํฌํจํ์ฌ ๋ง์ ํ ๋ก ์ด ์์ต๋๋ค. ๋น์ ์ ๋งํ ๋ชจ๋ ๊ฒ์ ๋์ํ์ง ์์ ๊ฒ์ด๊ณ ์ด๋ ์ชฝ๋ ์ง๊ธ๊น์ง ๊ทธ ๋ ผ์์ ๊ฒฐ๊ณผ๋ฅผ ์ข์ํ์ง ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋จ์ํ ๊ทธ๊ฒ์ ๋ฌด์ํด๋ ์์ฐ์ ์ธ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๋ ๋ฐ ๋์์ด ๋์ง ์์ต๋๋ค.
๋ช
๋ช
์ถฉ๋ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ ์ข์ต๋๋ค. ๋ํ ์ปดํ์ผ๋ฌ ์ ํ ๊ฒ์ฌ๋ฅผ ์ง์ํฉ๋๋ค. ์ธ๊ธํ ์ ๊ทผ ๋ฐฉ์์ ์๋ ๊ฒ๋ณด๋ค ๋ ์ ๊ตฌ์ฑํ์ง๋ง ์ปดํ์ผ๋ฌ๋ ํ ๋นํ ์ ์๋ ํญ๋ชฉ์ ์ ํํ์ง ์์ต๋๋ค. ํด๋น ์ ํ์ ๊ฐ์ฒด์ ์์ผ์ด ์๋ ์ ์๋ฅผ ํ ๋นํ ์ ์์ต๋๋ค.
var a ์ผ
a = 10
์ปดํ์ผ๋ฌ๋ ์ค์ ๋ก ๊ทธ๊ฒ์ ๋ํด ์๋ฌด ๊ฒ๋ ํ์ง ์์ต๋๋ค. ๊ทธ๋์ ์ด๋ฐ ์ข
๋ฅ์ ์ด๊ฑฐํ์ ๋ณ๋ก ์๋ฏธ๊ฐ ์์ต๋๋ค. ๊ทธ ์ธ์๋ GoLand์ ๊ฐ์ IDE์์ ๋ ์ ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
๋๋ ๊ทธ๋ฐ ๊ฒ์๋ณด๊ณ ์ถ๋ค
type WeekDay enum string {
Monday "mon"
Tuesday "tue"
// etc...
}
๋๋ ์๋ iota
์ฌ์ฉ:
// this assumes that iota automatically assigned to the first declared enum key
// and values have unsigned integer type
// value is positional, so if you decide to rename your key
// you don't have to change everything in db
// also it is easy to grow your lists
type WeekDay enum {
Monday
Tuesday
}
์ด๋ ๊ฒ ํ๋ฉด ์ฌ์ฉ์ด ๊ฐํธํ๊ณ ๊ฐํธํด์ง๋๋ค.
func makeItWorkOn(day WeekDay) {
// your implementation
}
๋ํ enum์๋ ๊ฐ์ ๊ฒ์ฆํ๋ ๋ด์ฅ ๋ฉ์๋๊ฐ ์์ด์ผ ์ฌ์ฉ์ ์ ๋ ฅ์์ ๋ฌด์ธ๊ฐ๋ฅผ ๊ฒ์ฆํ ์ ์์ต๋๋ค.
if day in WeekDay {
makeItWorkOn(day)
}
๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ ๊ฐ๋จํ ๊ฒ๋ค:
if day == WeekDay.Monday {
// whatever
}
์์งํ ๋งํด์, ๋ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค(KISS).
// type automatically inferred from values or `iota`
enum WeekDay {
Monday "mon"
Tuesday "tue"
}
@zoonman ๋ง์ง๋ง ์์ ๋ Go์ ๋ค์ ์์น์ ๋ฐ๋ฅด์ง ์์ต๋๋ค. ํจ์ ์ ์ธ์ func
๋ก ์์ํ๊ณ , ์ ํ ์ ์ธ์ type
๋ก ์์ํ๊ณ , ๋ณ์ ์ ์ธ์ var
๋ก ์์ํฉ๋๋ค. , ...
@md2perpe ์ ๋ Go "์ ํ" ์์น์ ๋ฐ๋ฅด๋ ค๊ณ ํ์ง ์์ต๋๋ค. ๋งค์ผ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์์ผ๋ฉฐ ์ ๊ฐ ๋ฐ๋ฅด๋ ์ ์ผํ ์์น์ ๋จ์ํ๊ฒ ์ ์งํ๋ ๊ฒ์
๋๋ค.
_์์น์ ๋ฐ๋ฅด๊ธฐ ์ํด_ ์์ฑํด์ผ ํ๋ ์ฝ๋๋ณด๋ค ๋ ๋ง์ ์๊ฐ์ด ๋ญ๋น๋ฉ๋๋ค.
TBH ๋ฐ๋ ์ด๋ณด์์ง๋ง ๋นํํ ๋ถ๋ถ์ด ๋ง๋ค.
์๋ฅผ ๋ค์ด:
struct User {
Id uint
Email string
}
๋ณด๋ค ์ฐ๊ธฐ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
type User struct {
Id uint
Email string
}
์ ํ์ ์ฌ์ฉํด์ผ ํ๋ ์๋ฅผ ์๋ ค๋๋ฆด ์ ์์ต๋๋ค.
// this is terrible because it blows your mind off
// especially if you Go newbie
// this should not be allowed by compiler/linter:
w := map[string]interface{}{"type": 0, "connected": true}
// it has to be splitted into type definition
type WeirdJSON map[string]interface{}
// and used like
w := WeirdJSON{"type": 0, "connected": true}
๋๋ Asm, C, C++, Pascal, Perl, PHP, Ruby, Python, JavaScript, TypeScript, ์ง๊ธ์ Go๋ก ์ฝ๋๋ฅผ ์์ฑํ์ต๋๋ค. ๋๋ ๊ทธ ๋ชจ๋ ๊ฒ์ ๋ณด์๋ค. ์ด ๊ฒฝํ์ ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ๊ณ ์ฝ๊ธฐ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฌ์์ผ ํจ์ ์๋ ค์ค๋๋ค.
๊ธฐ๊ณ ํ์ต ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ MIDI ํ์ผ์ ๊ตฌ๋ฌธ ๋ถ์ํด์ผ ํฉ๋๋ค.
๊ฑฐ๊ธฐ์์ SMPTE ํ์์ฝ๋๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํด์ผ ํฉ๋๋ค. ๋๋ iota์ ๊ด์ฉ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฝค ์ด๋ ต๋ค๋ ๊ฒ์ ์์ง๋ง, ๊ทธ๊ฒ์ด ๋๋ฅผ ๋ง์ง๋ ๋ชปํ๋ค)
const (
SMTPE0 int8 = ((-24 - (1 + (iota - 1) * 3) % 6 * (iota - 1) / ((iota - 1) | 0x01)) - 10 * ((iota - 1) % 2) - 5 * (iota / 3 - iota / 4) ) * iota / (iota | 0x01)
SMTPE24
SMTPE25
SMTPE29
SMTPE30
)
const (
_SMTPE0 int8 = 0
_SMTPE24 int8 = -24
_SMTPE25 int8 = -25
_SMTPE29 int8 = -29
_SMTPE30 int8 = -30
)
๋ฌผ๋ก ๋ฐฉ์ด ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๋ฐํ์ ๊ฒ์ฌ๊ฐ ํ์ํ ์๋ ์์ต๋๋ค...
func IsSMTPE(status int8) bool {
j := 4
for i:= 0; i >= -30; i -= j % 6{
if i == int(status){
return true
}
j+=3
}
return status == 0
}
์ด๊ฑฐํ์ ์ด๋ค ๊ฒฝ์ฐ์๋ ํ๋ก๊ทธ๋๋จธ์ ๋ผ์ด๋ธ๋ฅผ ๋ ๊ฐ๋จํ๊ฒ ๋ง๋ญ๋๋ค. ์ด๊ฑฐํ์ ๋๊ตฌ์ผ ๋ฟ์ด๋ฏ๋ก ์ ์ ํ๊ฒ ์ฌ์ฉํ๋ฉด ์๊ฐ์ ์ ์ฝํ๊ณ ์์ฐ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. C++, C# ๋๋ ๋ค๋ฅธ ์ธ์ด์ ๊ฐ์ด Go 2์์ ์ด๊ฒ์ ๊ตฌํํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ์๋ ๋๋ด์ด์ง๋ง โโ๋ฌธ์ ๋ฅผ ๋ถ๋ช ํ ๋ณด์ฌ์ค๋๋ค.
@treeter12 ๊ทํ์ ์๊ฐ "๋ฌธ์ ๋ฅผ ๋ช ํํ๊ฒ ๋ณด์ฌ ์ฃผ๋" ๋ฐฉ๋ฒ์ ์ ์ ์์ต๋๋ค. ์ด๊ฑฐํ์ด ์ด๋ป๊ฒ ์ด ์ฝ๋๋ฅผ ๋ ๋ซ๊ฑฐ๋ ๋ ์์ ํ๊ฒ ๋ง๋ค๊น์?
enum๊ณผ ๋์ผํ ๋ ผ๋ฆฌ๋ฅผ ๊ตฌํํ C# ํด๋์ค๊ฐ ์์ต๋๋ค.
public enum SMTPE : sbyte
{
SMTPE0 = 0,
SMTPE24 = -24,
SMTPE25 = -25,
SMTPE29 = -29,
SMTPE30 = -30
}
public class TestClass
{
public readonly SMTPE smtpe;
public TestClass(SMTPE smtpe)
{
this.smtpe = smtpe;
}
}
์ปดํ์ผ ์๊ฐ ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ฉด ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
๊ฒฐ๊ตญ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์ธ์ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ณ ์ฑ๋ฅ์ ์ ์ฝํ๊ธฐ ์ํ ๋๊ตฌ์ผ ๋ฟ์ ๋๋ค.
@streeter12 ์๋ฏธ๋ฅผ ๋ช ํํ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ฌ๊ธฐ์ Go ์์์ ๋นํด ์ ์ผํ ์ฅ์ ์ ์ ํ ์์คํ ์ด ์ด๊ฑฐํ ๊ฐ ์ค ํ๋ ์ธ์ ๋ค๋ฅธ ๊ฐ์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์๋ชป๋ ๊ฐ์ ๋์ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ํ์คํ ์์ผ๋ฉด ์ข๊ฒ ์ง๋ง ๋๊ฐ๋ ๋ฐ๋ฆ ๋๋ค. ์ด ์ด๊ฑฐํ์ ํด๋น ์ฝ๋ ์ธ๋ถ๋ก ํ์ฅํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ธ๋ถ ์ด๊ฑฐํ ํ์ฅ์ Go์์ ํ์ค ์ด๊ฑฐํ์ ์ฌ์ฉํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํ ์ฃผ์ ์ด์ ์ค ํ๋์ ๋๋ค.
์ผ๋ถ ํ์ฅ์ด ์ด๊ฑฐํ์ ์ฌ์ฉํ์ง ์๋๋ก ํ๋ ๊ฐ๋จํ ํ์์ ๋ตํ์ญ์์ค.
FE๋ ์ํ ๋จธ์ ์ด ์ด๊ฑฐํ ๋์ ์ํ ํจํด์ ์ฌ์ฉํ๋๋ก ํด์ผ ํฉ๋๋ค.
์ด๊ฑฐํ์๋ ๊ณ ์ ํ ๋ฒ์๊ฐ ์์ต๋๋ค. ๋๋ ์ด๊ฑฐ ํ์์ด ๋ช ๊ฐ์ง ํฐ ํ๋ก์ ํธ๋ฅผ ์๋ฃํฉ๋๋ค. enum ์ธ๋ถ ์ ์ ์ฝ๋๋ฅผ ํ์ฅํ๋ ๊ฒ์ ๋์ฐํ ์ํคํ ์ฒ ๊ฒฐ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋น์ ์ ๋น์ ์ ๋๋ฃ๊ฐ ํ๋ ์ผ์ ํต์ ํ ์ ์๊ณ ๊ทธ๊ฒ์ ๋ช ๊ฐ์ง ์ฌ๋ฏธ์๋ ์ค๋ฅ๋ฅผ ๋ง๋ญ๋๋ค)
๊ทธ๋ฆฌ๊ณ ๋ง์ ๊ฒฝ์ฐ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ์ค๋ฅ๋ฅผ ํฌ๊ฒ ์ค์ด๋ ์ธ์ ์์ ์ด๊ฑฐ๋ฅผ ์์์ต๋๋ค.
@streeter12 ๋ถํํ๋ ํ์ค์ ์ข ์ข ์ด๊ฑฐํ์ ํ์ฅํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
enum/sum ์ ํ์ ํ์ฅํ๋ @griesemer ๋ ๋ณ๋์ ๋๋ก๋ ํธํ๋์ง ์๋ ์ ํ์ ์์ฑํฉ๋๋ค.
์ด๊ฑฐํ/ํฉ๊ณ์ ๋ํ ๋ช ์์ ์ ํ์ด ์๋๋ผ๋ Go์์๋ ์ฌ์ ํ ๊ทธ๋ ์ต๋๋ค. ํจํค์ง์ {1, 2, 3} ๊ฐ์ด ํ์ํ "์ด๊ฑฐํ ์ ํ"์ด ์๊ณ "ํ์ฅ๋ ์ด๊ฑฐํ ์ ํ"์์ 4๋ฅผ ์ ๋ฌํ๋ฉด ์ฌ์ ํ ์์์ "์ ํ"์ ๊ณ์ฝ์ ์๋ฐํ ๊ฒ์ ๋๋ค.
์ด๊ฑฐํ/ํฉ๊ณ๋ฅผ ํ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ ๋๋๋ก ํธํ๋์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ๋ช ์์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ช ์์ To/From ๋ณํ ํจ์๋ ์์ฑํด์ผ ํฉ๋๋ค.
์ด ์ ์ ๋๋ #19412์ ๊ฐ์ ์ ์ฌํ ์ ์์ ๋ํ ๊ทธ ์ฃผ์ฅ๊ณผ ์ฌ๋๋ค ์ฌ์ด์ ๋จ์ ์ "๋๋๋ก ๋ณํ ํจ์๋ฅผ ์์ฑํ๋ ๊ฒ" ๋์ "์ปดํ์ผ๋ฌ๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ณธ ์ ํจ์ฑ ๊ฒ์ฌ ์ฝ๋๋ฅผ ํญ์ ์์ฑ"ํ๋ ๊ฒ์ด ํธ๋ ์ด๋ ์คํ๋ผ๋ ๊ฒ์ด ์ด์ํ๋ค๊ณ ์๊ฐํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด์จ๋ ๋ค์ ์จ์ผ ํ ๊ฒ์ ๋๋ค."
์ด๋ ์ชฝ์ด ์ณ๋ค ๊ทธ๋ฅด๋ค๊ฑฐ๋ ๊ทธ๊ฒ์ด ๊ณ ๋ ค๋์ด์ผ ํ ์ ์ผํ ์ ์ถฉ์์ด๋ผ๋ ๋ง์ ์๋์ง๋ง, ๋๋ ๋ด๊ฐ ์์์ฐจ๋ฆฐ ์์ชฝ ์ฌ์ด์ ์์ฌ์ํต์์ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ์ถ์์ต๋๋ค.
์ด ์ ์ ๋๋ #19412์ ๊ฐ์ ์ ์ฌํ ์ ์์ ๋ํ ๊ทธ ์ฃผ์ฅ๊ณผ ์ฌ๋๋ค ์ฌ์ด์ ๋จ์ ์ "๋๋๋ก ๋ณํ ํจ์๋ฅผ ์์ฑํ๋ ๊ฒ" ๋์ "์ปดํ์ผ๋ฌ๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ณธ ์ ํจ์ฑ ๊ฒ์ฌ ์ฝ๋๋ฅผ ํญ์ ์์ฑ"ํ๋ ๊ฒ์ด ํธ๋ ์ด๋ ์คํ๋ผ๋ ๊ฒ์ด ์ด์ํ๋ค๊ณ ์๊ฐํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด์จ๋ ๋ค์ ์จ์ผ ํ ๊ฒ์ ๋๋ค."
์์ฃผ ์ ์ง์
@jimmyfrasche ๊ทธ๊ฒ์ ๋ด๊ฐ ๊ฐ์ธ์ ์ผ๋ก ์ ์ถฉ์์ ์ค๋ช ํ๋ ๋ฐฉ์์ด ์๋๋๋ค. ์ ๋ "์ปดํ์ผ๋ฌ๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ณธ ์ ํจ์ฑ ๊ฒ์ฌ ์ฝ๋๋ฅผ ํญ์ ์์ฑํ๋ ๊ฒ"๊ณผ "Go๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฌ๋์ด ๋ฐฐ์ฐ๊ณ ์ดํดํด์ผ ํ๋ ์ ํ ์์คํ ์ ์์ ํ ์๋ก์ด ๊ฐ๋ ์ ์ถ๊ฐํ๋ ๊ฒ"์ด๋ผ๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค.
์๋๋ฉด ๋ค๋ฅธ ์์ผ๋ก ๋งํ๊ฒ ์ต๋๋ค. ๋ด๊ฐ ๋งํ ์ ์๋ ํ, Go์ ์ด๊ฑฐํ ์ ํ์์ ๋๋ฝ๋ ์ ์ผํ ์ค์ํ ๊ธฐ๋ฅ์ ์ ํํ๋์ง ์์ ์์์ ํ ๋น ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ์๊ณ ๋ช ์์ ๋ณํ์ ๋ํ ๊ฒ์ฌ๊ฐ ์์ผ๋ฉฐ ๋ชจ๋ ๊ฐ์ด ์ค์์น. ์ด๋ฌํ ๊ธฐ๋ฅ์ ๋ชจ๋ ์ด๊ฑฐ๋ ์ ํ์ ๊ฐ๋ ๊ณผ ๋ ๋ฆฝ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค๋ฅธ ์ธ์ด๊ฐ ์ด๊ฑฐํ์ ๊ฐ์ง๊ณ ์๋ค๋ ์ฌ์ค์ด Go์๋ ์ด๊ฑฐํ์ด ํ์ํ๋ค๋ ๊ฒฐ๋ก ์ ์ด๋ฅด๊ฒ ํด์๋ ์ ๋ฉ๋๋ค. ์, ์ด๊ฑฐํ์ ์ด๋ฌํ ๋๋ฝ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ๋ค์ ์ป๊ธฐ ์ํด ์์ ํ ์๋ก์ด ์ข ๋ฅ์ ์ ํ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ ๋ง๋ก ํ์ํฉ๋๊น? ๊ทธ๋ฆฌ๊ณ ์ธ์ด ๋ณต์ก์ฑ์ ์ฆ๊ฐ๊ฐ ์ด์ ์ ๋๋ฆด ๊ฐ์น๊ฐ ์์ต๋๊น?
@ianlancetaylor ์ธ์ด์ ๋ณต์ก์ฑ์ ์ถ๊ฐํ๋ ๊ฒ์ ํ์คํ ๊ณ ๋ คํด์ผ ํ ์ ํจํ ์ฌํญ์ด๋ฉฐ "๋ค๋ฅธ ์ธ์ด์ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์"๋ ํ์คํ ๋ ผ์๊ฑฐ๋ฆฌ๊ฐ ์๋๋๋ค. ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์ด๊ฑฐํ์ด ๊ทธ ์์ฒด๋ก ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. (๊ทธ๋ฌ๋ ๊ทธ๋ค์ ์ผ๋ฐํ, ํฉ๊ณ ์ ํ์ ํ์คํ ๋์๊ฒ ๋ง์ ์์๋ฅผ ํ์ํฉ๋๋ค).
์ ํ์ด ํ ๋น ๊ฐ๋ฅ์ฑ์ ์ ํ ํด์ ํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ์ข์ ๊ฒ์ด์ง๋ง ์ด๊ฒ์ด ๊ธฐ๋ณธ ํ์ ์ธ๋ถ์์ ์ผ๋ง๋ ๋๋ฆฌ ์ ์ฉํ ์ง ํ์ ํ ์ ์์ต๋๋ค.
์ปดํ์ผ๋ฌ์๊ฒ ์ ํจํ ๊ฐ์ ์ ์ฒด ๋ชฉ๋ก์ ์๋ ค์ฃผ์ง ์๊ณ "์ค์์น์์ ์ฒ๋ฆฌ๋๋ ๋ชจ๋ ๊ฐ ํ์ธ"์ด๋ผ๋ ๊ฐ๋ ์ด ์ผ๋ง๋ ์ผ๋ฐํ๋ ์ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ด๊ฑฐํ ๋ฐ ํฉ๊ณ ์ ํ ์ธ์ ๋ด๊ฐ ์๊ฐํ ์ ์๋ ์ ์ผํ ๊ฒ์ Ada์ ๋ฒ์ ์ ํ๊ณผ ๊ฐ์ ๊ฒ์ด์ง๋ง ๋ณํ ๋๋ ๋ฐ์๋ ๋๋ง๋ค ์คํ์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด 0์ด ๋ฒ์์ ์๊ฑฐ๋ ์ฝ๋๊ฐ ์์ฑ ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด 0 ๊ฐ๊ณผ ์์ฐ์ค๋ฝ๊ฒ ํธํ๋์ง ์์ต๋๋ค. ์. (๋ค๋ฅธ ์ธ์ด์๋ ์ ์ฌํ ์ ํ์ ํจ๋ฐ๋ฆฌ๊ฐ ์๊ณ ์ผ๋ถ๋ ํ์ค์นผ ํจ๋ฐ๋ฆฌ์ ์์ง๋ง ํ์ฌ๋ก์๋ Ada๊ฐ ์ ์ผํฉ๋๋ค)
์ด์จ๋ , ๋๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋ค์์ ์ธ๊ธํ์ต๋๋ค.
์ฌ๊ธฐ์ Go ์์์ ๋นํด ์ ์ผํ ์ฅ์ ์ ์ ํ ์์คํ ์ด ์ด๊ฑฐํ ๊ฐ ์ค ํ๋ ์ธ์ ๋ค๋ฅธ ๊ฐ์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์๋ชป๋ ๊ฐ์ ๋์ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ํ์คํ ์์ผ๋ฉด ์ข๊ฒ ์ง๋ง ๋๊ฐ๋ ๋ฐ๋ฆ ๋๋ค. ์ด ์ด๊ฑฐํ์ ํด๋น ์ฝ๋ ์ธ๋ถ๋ก ํ์ฅํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ธ๋ถ ์ด๊ฑฐํ ํ์ฅ์ Go์์ ํ์ค ์ด๊ฑฐํ์ ์ฌ์ฉํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํ ์ฃผ์ ์ด์ ์ค ํ๋์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ
๋ถํํ๋ ํ์ค์ ์ข ์ข ์ด๊ฑฐํ์ ํ์ฅํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
๋ด๊ฐ ๋งํ ์ด์ ๋๋ฌธ์ ๊ทธ ์ฃผ์ฅ์ ๋์๊ฒ ํจ๊ณผ๊ฐ ์์ต๋๋ค.
@jimmyfrasche ์ดํดํ์ต๋๋ค; ์ด๋ ค์ด ๋ฌธ์ ์ ๋๋ค. ์ด๊ฒ์ด Go์์ ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ํด๊ฒฐํ๋ ค๊ณ ์๋ํ์ง ์๊ณ ๋์ ์์ ๊ฐ์ ๋ฐ๋ณตํ ํ์ ์์ด ์์ ์ํ์ค๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ ์ด์ ์ ๋๋ค.
(์ง์ฐ ๋ฐ์ก - https://github.com/golang/go/issues/19814#issuecomment-349158748์ ๋ํ ์๋ต์ผ๋ก ๋ฐ์ก๋์์ต๋๋ค.)
@griesemer ์ค์ ๋ก Go 1์ ๋ํ ์ฌ๋ฐ๋ฅธ ์์ฒญ์ด์์ง๋ง ์ผ๋ถ๋ Go 2์ ๋ํด ์ฌํ๊ฐํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
์ธ์ด์๋ ์ด๊ฑฐํ์์ ์ํ๋ _๊ฑฐ์_ ๋ชจ๋ ๊ฒ์ ์ป์ ์ ์์ ๋งํผ ์ถฉ๋ถํฉ๋๋ค. ์ ํ ์ ์๋ณด๋ค ๋ ๋ง์ ์ฝ๋๊ฐ ํ์ํ์ง๋ง ์์ฑ๊ธฐ๊ฐ ๋๋ถ๋ถ์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ ์ด๊ฑฐํ ์ ํ๊ณผ ํจ๊ป ์ ๊ณต๋๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ป๋ ๋์ ์ํฉ์ ๋ง๊ฒ ์ ์ํ ์ ์์ต๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ https://play.golang.org/p/7ud_3lrGfx ๋ฅผ ์ ์ธํ ๋ชจ๋ ๊ฒ์ ์ ๊ณตํฉ๋๋ค.
๊ทธ ์ ๊ทผ ๋ฐฉ์์ ์๊ณ ๋จ์ํ ํฉ๊ณ ์ ํโ ์๋ ์ฌ์ฉํ ์ ์์ง๋ง ์ฌ์ฉํ๊ธฐ๊ฐ ๋ ์ด์ํ๋ฏ๋ก https://github.com/golang/go/issues/19412#issuecomment -323208336๊ณผ ๊ฐ์ ๊ฒ์ด ์ถ๊ฐ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด ์ธ์ด๋ ์ฝ๋ ์์ฑ๊ธฐ์์ ๋ฌธ์ 1๊ณผ 2๋ฅผ ํผํ๋ ์ด๊ฑฐํ ์ ํ์ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
โ ์ด ๊ตฌ์ฑ์ json.Token ์ค์ผ์น๋ https://play.golang.org/p/YFffpsvx5e ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฐ๋ฆฌ๋ ํธ๋ ์ด๋ ์คํ๊ฐ "์ด์จ๋ ์์ฑํด์ผ ํ๋ ๋ณํ ํจ์๋ฅผ ๊ฐ๋ ์์ฑ" ๋์ "ํญ์ ์ปดํ์ผ๋ฌ๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ณธ ์ ํจ์ฑ ๊ฒ์ฌ ์ฝ๋๋ฅผ ์์ฑ"ํ๋ ๊ฒ์ด ์ด์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋์๊ฒ - ์ ์ง์ ์ธ ์๋ฆฌ ๋ฅผ ๊ฐ๋ ฅํ ์ง์งํ๋ ์ง์์ ๋ํ์ - ์ด๊ฒ์ ์ฌ๋ฐ๋ฅธ(ish) ์ ์ถฉ์์ฒ๋ผ ๋ณด์ ๋๋ค. ์์งํ, ์ ์ง์ ์๋ฆฌ์ ๋ํด ์ด์ผ๊ธฐํ์ง ์๋๋ผ๋ ๋๋ ๊ทธ๊ฒ์ด ๋ ๋์ ๋ฉํ ๋ชจ๋ธ์ด๋ผ๊ณ ์๊ฐํ ๊ฒ์ ๋๋ค.
์ฒซ์งธ, type-checked enum์ ์ด์จ๋ ์์ค ์ฝ๋์ ์ฝ์ ๋ ๊ฐ๋ง ํ์ธํ ์ ์์ต๋๋ค. ์ด๊ฑฐํ์ด ๋คํธ์ํฌ๋ฅผ ํตํด ์ด๋ํ๊ฑฐ๋ ๋์คํฌ์ ์ ์ง๋๊ฑฐ๋ ํ๋ก์ธ์ค ๊ฐ์ ๊ตํ๋๋ ๊ฒฝ์ฐ ๋ชจ๋ ๋ฒ ํ ์ด ํด์ ๋ฉ๋๋ค(๋๋ถ๋ถ์ ์ด๊ฑฐํ ์ฌ์ฉ์ด ์ด ๋ฒ์ฃผ์ ์ํจ). ๋ฐ๋ผ์ ๋ฐํ์์ ๋นํธํ์ฑ์ ์ฒ๋ฆฌํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํจํ์ง ์์ ์ด๊ฑฐํ ๊ฐ์ ๋ง๋ฌ์ ๋ ๋ณดํธ์ ์ผ๋ก ์ ์ฉ๋๋ ๊ธฐ๋ณธ ๋์์ ์์ต๋๋ค. ์ข ์ข ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ์ถ์ ์ ์์ต๋๋ค. ๋๋ก๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๊ฐ์ ๋ณํํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฌ์ง๋ ฌํ ์ ์์ค๋์ง ์๋๋ก ๋ณด์กดํ๊ณ ์ ๋ฌํ๋ ค๊ณ ํฉ๋๋ค.
๋ฌผ๋ก ์ ํจ์ฑ์ด ํ์ธ๋๊ณ ํ์ํ ๋์์ด ๊ตฌํ๋๋ ์ ๋ขฐ ๊ฒฝ๊ณ๊ฐ ์์ด์ผ ํ๋ฉฐ ํด๋น ๊ฒฝ๊ณ ๋ด์ ๋ชจ๋ ๊ฒ์ด ํด๋น ๋์์ ์ ๋ขฐํ ์ ์์ด์ผ ํ๋ค๊ณ ์ฃผ์ฅํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ ์ ๋ชจ๋ธ์ ์ด ์ ๋ขฐ ๊ฒฝ๊ณ๊ฐ ๊ณผ์ ์ด์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ฐ์ด๋๋ฆฌ์ ๋ชจ๋ ์ฝ๋๋ ์์์ ์ผ๋ก ๋ณ๊ฒฝ๋๊ณ ๋ด๋ถ์ ์ผ๋ก ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ ์ ์ ์ ๋ชจ๋ธ์ ์ ์ง์ ์ธ ์๋ฆฌ๋ผ๋ ์์ด๋์ด์ ์ํด ์นจ์๋ฉ๋๋ค. ๊ฐ์๊ธฐ, ์์ฐ์ ์ธ ์ ๋ขฐ ๊ฒฝ๊ณ๋ ์์์ ์๋ฆฌ๋ฅผ ์ ์ฉํ๋ ๋จ์์ ์ผ๊ด์ฑ์ด ์๋ค๊ณ ์ ๋ขฐํ๋ ๋จ์๋ก์ ํจํค์ง(๋๋ ์ ์ฅ์)๊ฐ ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ธ์ ์ผ๋ก ์ ๋ ๊ทธ๊ฒ์ด ์๊ธฐ ์ผ๊ด์ฑ์ ๋งค์ฐ ์์ฐ์ค๋ฝ๊ณ ํ๋ฅญํ ๋จ์๋ผ๋ ๊ฒ์ ์์์ต๋๋ค. ํจํค์ง๋ ์๋ฏธ ์ฒด๊ณ, ๊ท์น ๋ฐ ๊ท์น์ ๋จธ๋ฆฟ์์ ๊ฐ์งํ ์ ์์ ๋งํผ ์ถฉ๋ถํ ์ปค์ผ ํฉ๋๋ค. ์ด๊ฒ์ด ๋ด๋ณด๋ด๊ธฐ๊ฐ ์ ํ ์์ค์ด ์๋ ํจํค์ง ์์ค์์ ์๋ํ๋ ์ด์ ์ ์ต์์ ์ ์ธ์ ๋ฒ์๊ฐ ํ๋ก๊ทธ๋จ ์์ค์ด ์๋ ํจํค์ง ์์ค์ธ ์ด์ ์ด๊ธฐ๋ ํฉ๋๋ค. ํจํค์ง ์์ค์์๋ ์ ์ ์๋ ์ด๊ฑฐํ ๊ฐ์ ์ฌ๋ฐ๋ฅธ ์ฒ๋ฆฌ๋ฅผ ๊ฒฐ์ ํ๊ธฐ์ ์ถฉ๋ถํด ๋ณด์ ๋๋ค. ์ด๋ฅผ ํ์ธํ๊ณ ๋ด๋ถ์ ์ผ๋ก ์ํ๋ ๋์์ ์ ์งํ๋ ๋ด๋ณด๋ด์ง ์์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
๋๋ ์ฒ ์ ํ ๊ฒ์ฌ๋ฅผ ํฌํจํ์ฌ ์ ํ ๊ฒ์ฌ๋ ์ด๊ฑฐํ์ ๊ฐ๋ ์ ์๋ณด๋ค ๋ชจ๋ ์ค์์น์ ๊ธฐ๋ณธ ์ผ์ด์ค๊ฐ ํ์ํ๋ค๋ ์ ์์ ํจ์ฌ ๋ ๋์ํฉ๋๋ค.
@Merovius ์ด์ ์ฒด์ ํ๋ก์ธ์ค์ ํจํค์ง๋ ๋ ๋ค ์ ๋ขฐ ๊ฒฝ๊ณ์ ๋๋ค.
ํ๋ก์ธ์ค ์ธ๋ถ์์ ๋ค์ด์ค๋ ์ ๋ณด๋ ์ ์ ๋ ๋ ์ ํจ์ฑ์ ๊ฒ์ฌํด์ผ ํ๋ฉฐ ํ๋ก์ธ์ค์ ๋ํ ์ ์ ํ ํํ์ผ๋ก ๋น์ ๋ ฌํ๋์ด์ผ ํ๋ฉฐ ์คํจํ ๊ฒฝ์ฐ ์ ์ ํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํฉ๋๋ค. ๊ทธ๊ฒ์ ๊ฒฐ์ฝ ์ฌ๋ผ์ง์ง ์์ต๋๋ค. ๋๋ ๊ฑฐ๊ธฐ์ ํฉ๊ณ/์ด๊ฑฐํ ์ ํ์ ํน์ ํ ๊ฒ์ ์ค์ ๋ก ๋ณด์ง ์์ต๋๋ค. ๊ตฌ์กฐ์ฒด์ ๋ํด์๋ ๊ฐ์ ๋ง์ ํ ์ ์์ต๋๋ค. ๋๋ก๋ ์ถ๊ฐ ํ๋๋ ๋๋ฌด ์ ์ ํ๋๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๊ตฌ์กฐ์ฒด๋ ์ฌ์ ํ ์ ์ฉํฉ๋๋ค.
์ฆ, ์ด๊ฑฐํ ์ ํ์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์ค๋ฅ๋ฅผ ๋ชจ๋ธ๋งํ๋ ํน์ ์ฌ๋ก๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด
type FromTheNetwork enum {
// pretend all the "valid" values are listed here
Missing // the value was not included in the message
Unknown // the value was not in the set of the valid values
Error // there was an error attempting to read the value
}
ํฉ๊ณ ์ ํ์ ์ฌ์ฉํ๋ฉด ๋ ๋์๊ฐ ์ ์์ต๋๋ค.
type FromTheNetwork pick {
Missing struct{} // Not included in message
Valid somepkg.TheSumBeingReceived // Include valid states with composition
Unknown []byte // Raw bytes of unknown value received
Error error // The error from attempting to read the value
}
(์ ์๋ ์ค๋ฅ ์ฌ๋ก์ ํน์ ํ ํ๋๊ฐ ์๋ ๊ตฌ์กฐ์ฒด์์ ์ ์ง๋์ง ์๋ ํ ์ ์ฉํ์ง ์์ง๋ง ํด๋น ํ๋์ ์ ํจ์ฑ์ ์ด๊ฑฐํ ๊ฐ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. sum ์ ํ์ ๋ณธ์ง์ ์ผ๋ก a์ด๋ฏ๋ก ์ด๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ํ ๋ฒ์ ํ๋์ ํ๋๋ง ์ค์ ํ ์ ์๋ ๊ตฌ์กฐ์ฒด์ ๋๋ค.)
ํจํค์ง ์์ค์์ ์ฌ์ ํ ๋์ ์์ค์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ์ง๋ง ๋ฎ์ ์์ค์ ์ ํจ์ฑ ๊ฒ์ฌ๋ ์ ํ๊ณผ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค. ์ ํ์ ๋๋ฉ์ธ์ ์ค์ด๋ฉด ํจํค์ง๋ฅผ ์๊ฒ ์ ์งํ๊ณ ๋จธ๋ฆฌ ์์ ๋ฃ์ ์ ์์ต๋๋ค. ๋ํ ํธ์ง๊ธฐ๊ฐ ๋ชจ๋ case X:
ํ์ ์์ฑํ๊ณ ์ค์ ์ฝ๋๋ฅผ ์ฑ์ฐ๋๋ก ๋จ๊ฒจ๋๊ฑฐ๋ ๋ฆฐํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ฝ๋๊ฐ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๊ฒ์ฌํ๋์ง ํ์ธํ ์ ์๋๋ก ๋๊ตฌ์ ๋ํ ์๋๊ฐ ๋ ๋ช
ํํด์ง๋๋ค. ์ด์ ์ ์ปดํ์ผ๋ฌ์์ ์ฒ ์ ํจ์ ์ ์งํ๋ ๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ์ต๋๋ค).
๋๋ ๊ฑฐ๊ธฐ์ ํฉ๊ณ/์ด๊ฑฐํ ์ ํ์ ํน์ ํ ๊ฒ์ ์ค์ ๋ก ๋ณด์ง ์์ต๋๋ค. ๊ตฌ์กฐ์ฒด์ ๋ํด์๋ ๊ฐ์ ๋ง์ ํ ์ ์์ต๋๋ค. ๋๋ก๋ ์ถ๊ฐ ํ๋๋ ๋๋ฌด ์ ์ ํ๋๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๊ตฌ์กฐ์ฒด๋ ์ฌ์ ํ ์ ์ฉํฉ๋๋ค.
(ํ์ฌ iota์์ ๊ตฌ์ฑํ ๊ฒ๊ณผ ๊ฐ์) ๊ฐ๋ฐฉํ ์ด๊ฑฐํ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์๋ค๋ฉด ๋น์ฐํ ๊ทธ๋ ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ซํ ์ด๊ฑฐํ(์ฌ๋๋ค์ด ์ด๊ฑฐํ์ ๋ํด ์ด์ผ๊ธฐํ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ด์ผ๊ธฐํ๋ ๊ฒ)์ด๋ ์ฒ ์ ํ ๊ฒ์ฌ๊ฐ ํฌํจ๋ ์ด๊ฑฐํ์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒฝ์ฐ ํ์คํ ํน๋ณํฉ๋๋ค. ํ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ตฌ์กฐ์ฒด์์ ๋น์ ๋ ์ด๊ฒ์ ๋ค์ ์๋ฒฝํ๊ฒ ์ค๋ช ํฉ๋๋ค. Go 1 ํธํ์ฑ ์ฝ์์ ํค๊ฐ ์๋ ๊ตฌ์กฐ์ฒด ๋ฆฌํฐ๋ด์ ๋ชจ๋ ํ๋ก๋ฏธ์ค์์ ์ ์ธํฉ๋๋ค. ๋ฐ๋ผ์ ํค๊ฐ ์๋ ๊ตฌ์กฐ์ฒด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ ๊ฒ์ go vet์ด ์ด๋ฅผ ํ์ธํ๋ "์ต๊ณ "๋ก ๊ฐ๋ ฅํ๊ฒ ๊ฐ์ฃผ๋๋ ๊ดํ์ด์์ต๋๋ค. ์ด์ ๋ ์ ํํ ๊ฐ์ต๋๋ค. ํค๊ฐ ์๋ ๊ตฌ์กฐ์ฒด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ตฌ์กฐ์ฒด๋ ๋ ์ด์ ํ์ฅํ ์ ์์ต๋๋ค.
๋ค. ์ด์ ๊ด๋ จํ์ฌ ๊ตฌ์กฐ์ฒด๋ ์ด๊ฑฐํ๊ณผ ์ ํํ ๊ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ํ์ฅ ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค๋ ๋ฐ ์ปค๋ฎค๋ํฐ๋ก์ ๋์ํ์ต๋๋ค.
์ฆ, ์ด๊ฑฐํ ์ ํ์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์ค๋ฅ๋ฅผ ๋ชจ๋ธ๋งํ๋ ํน์ ์ฌ๋ก๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
๊ทํ์ ์๋ ํจํค์ง ๊ฒฝ๊ณ๊ฐ ์๋ ํ๋ก์ธ์ค ๊ฒฝ๊ณ(๋คํธ์ํฌ ์ค๋ฅ์ ๋ํด ์ด์ผ๊ธฐํจ์ผ๋ก์จ)๋ง ๋ค๋ฃน๋๋ค. FromTheNetwork
์ "InvalidInternalState"๋ฅผ ์ถ๊ฐํ๋ฉด ํจํค์ง๊ฐ ์ด๋ป๊ฒ ์๋ํฉ๋๊น? ๋ค์ ์ปดํ์ผํ๊ธฐ ์ ์ ์ค์์น๋ฅผ ์์ ํด์ผ ํฉ๋๊น? ๊ทธ๋ฐ ๋ค์ ์ ์ง์ ๋ณต๊ตฌ ๋ชจ๋ธ์์๋ ํ์ฅํ ์ ์์ต๋๋ค. ์ฒ์์ ์ปดํ์ผํ๋ ค๋ฉด ๊ธฐ๋ณธ ์ผ์ด์ค๊ฐ ํ์ํฉ๋๊น? ๊ทธ๋ฌ๋ฉด ์ด๊ฑฐํ์ ์๋ฌด๋ฐ ์๋ฏธ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ค์ ๋งํ์ง๋ง, ์ด๊ฑฐํ์ ์ฌ๋ ๊ฒ์ ๋ค๋ฅธ ์ง๋ฌธ์ ๋๋ค. ๋๋ ๋ค์๊ณผ ๊ฐ์ ์ผ์ ํ ๊ฒ์ ๋๋ค.
์ ํ์ ๋๋ฉ์ธ์ ์ค์ด๋ฉด ํจํค์ง๋ฅผ ์๊ฒ ์ ์งํ๊ณ ๋จธ๋ฆฌ ์์ ๋ฃ์ ์ ์์ต๋๋ค. ๋ํ ๋๊ตฌ์ ๋ํ ์๋๋ฅผ ๋ ๋ช ํํ๊ฒ ํ์ฌ ํธ์ง๊ธฐ๊ฐ ๋ชจ๋ ๋์๋ฌธ์ X: ํ์ ์์ฑํ๊ณ ์ค์ ์ฝ๋๋ฅผ ์ฑ์ฐ๋๋ก ๋จ๊ฒจ๋๊ฑฐ๋ ๋ฆฐํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ฝ๋๊ฐ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๊ฒ์ฌํ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฅผ ์ํด ์ ํ์ผ๋ก ์ค์ ์ด๊ฑฐํ์ด ํ์ํ์ง ์์ต๋๋ค. ์ด๋ฌํ linting ๋๊ตฌ๋ iota
๋ฅผ ์ฌ์ฉํ์ฌ $ const
-declarations ๋ฅผ ๋ฐ๊ฒฌ์ ์ผ๋ก ํ์ธํ ์๋ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋ชจ๋ ์ผ์ด์ค๋ ์ง์ ๋ ์ ํ์ด๊ณ "์ด๊ฑฐํ"์ผ๋ก ๊ฐ์ฃผํ๊ณ ์ํ๋ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค. ๋ชจ๋ ์ค์์น์ ๊ธฐ๋ณธ๊ฐ์ด ์์ด์ผ ํ๊ฑฐ๋ ๋ชจ๋ (์๋ ค์ง) ๊ฒฝ์ฐ๋ฅผ ํ์ธํด์ผ ํ๋ ์๋ ์์ฑ ๋๋ ๋ฆฐํ
์ ๋๊ธฐ ์ํด ์ด๋ฌํ "๊ด๋ก์ ๋ฐ๋ฅธ ์ด๊ฑฐํ"์ ์ฌ์ฉํ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค. ๋๋ ๋๋ถ๋ถ ๊ทธ๋ ๊ฒ ํ๋ํ๋ enum-keyword๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋ฐ๋ํ์ง ์์ ๊ฒ์
๋๋ค. ์ฆ, ์ด๊ฑฐํ์ด ์ด๋ ค ์๊ณ (๋ชจ๋ ์ ์ ๊ฐ์ ์ฌ์ฉํ ์ ์์) ์ถ๊ฐ ๋ฒ์๋ฅผ ์ ๊ณตํ๊ณ ๋ชจ๋ ์ค์์น์ ๊ธฐ๋ณธ๊ฐ์ด ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ค์ ๋ด ์ผ์ ์ ํด์น์ง ์์ ๊ฒ์
๋๋ค). ๊ทธ๊ฒ์ด ์ ์๋ ๊ฒ์ด๋ผ๋ฉด - ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ์ ์์ ์ง์งํ๋ ๋๋ค์(๋ฌผ๋ก ์ด๊ธฐ ํ
์คํธ๋ ์๋)๊ฐ ์๋ฏธํ๋ ๋ฐ๋ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ ์ง์ ์ธ ๋ณต๊ตฌ์ ํ์ฅ์ฑ์ ์ ์งํ๋ ๊ฒ์ ์ค์์ฑ์ ๋ํด ๋์ํ์ง ์์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ง์ ์ฌ๋๋ค์ ์๋ฏธ๋ก ์ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ํด๊ฒฐํ๋ ๋ฌธ์ ์ ๋ํ ๋ ๋์ ์๋ฃจ์ ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ๋ค์ด ์ค์ํ๋ค๊ณ ์๊ฐ ํ๋ค๋ฉด ์ด๊ฑฐํ์ ํด๋กญ๊ฑฐ๋ ๋ฌด์๋ฏธํ๋ค๊ณ ๋ณด๋ ๊ฒ์ด ์๋ฒฝํ๊ฒ ํ๋นํ๊ณ ํฉ๋ฆฌ์ ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋ด๊ฐ ๋๋ตํ๊ณ ์๋ ์ง๋ฌธ์ด์์ต๋๋ค. ์ฌ๋๋ค์ด ์ปดํ์ผ๋ฌ์์ ํ์ธํ๋ ๋์ ๋ชจ๋ ๊ณณ์์ ํ์ธ์ ์๊ตฌํ๋ ๊ฒ์ ํฉ๋ฆฌ์ ์ผ๋ก ์ ์ถฉํ ์ ์๋ ๋ฐฉ๋ฒ. ๋ต๋ณ: API์ ํ์ฅ์ฑ๊ณผ ์งํ๋ฅผ ์ค์ํจ์ผ๋ก์จ ์ด์จ๋ ์ฌ์ฉ ์ฌ์ดํธ์์ ์ด๋ฌํ ํ์ธ์ด ํ์ํฉ๋๋ค.
๋๋๋ก enum์ ๋ฐ๋์๋ค์ ํ์ฅํ ์ ์๋ค๊ณ ๋งํ์ง๋ง ์ง๋ ฌํ/์ ํ ํ์๋ ์ฌ์ ํ ํ์ธ์ด ํ์ํ๋ฉฐ ํธํ์ฑ ๋ฑ์ ๋ค์ ๊นจ๋จ๋ฆด ์ ์์ต๋๋ค.
์ด๊ฒ์ด ์ด๊ฑฐํ ๋ฌธ์ ๊ฐ ์๋ ์ฃผ์ ๋ฌธ์ ๋ ๊ฐ๋ฐ ๋ฐ ๊ตฌ์ฑ ๋ฌธ์ ์
๋๋ค.
์ด๊ฑฐํ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํฐ๋ฌด๋์๋ ์๋ฅผ ์ ์ํ๋ ค๊ณ ํ์ง๋ง ๋ช ๊ฐ์ง ์ํฉ์ ๋ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ 1. ์ ๋ ์ ์์ค ๊ฐ๋ฐ์์ด๊ณ ์ผ๋ถ ๋ ์ง์คํฐ ์ฃผ์, ํ๋ฆฝ๋ ์ ์์ค ํ๋กํ ์ฝ ๊ฐ ๋ฑ์ ๋ํด const๊ฐ ํ์ํฉ๋๋ค. ์ง๊ธ Go์์๋ ๋จ ํ๋์ ์๋ฃจ์
์ ์ป์์ต๋๋ค. ๋ง์ ๊ฒฝ์ฐ์ ์ถ์
ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ iota ์์ด const๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. . ํ๋์ ํจํค์ง์ ๋ํด ์ฌ๋ฌ ์์ ๋ธ๋ก์ ์ป์ ์ ์์ต๋๋ค. ๋๋ 20๊ฐ์ ์์๋ฅผ ๋ชจ๋ ์ป์๊ณ ๊ทธ๋ค์ด ๊ฐ์ ์ ํ๊ณผ ๋น์ทํ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์ค๋ฅ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ํ๋ก์ ํธ๊ฐ ํฌ๋ฉด ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฐฉ์ด์ ํ๋ก๊ทธ๋๋ฐ, TDD๋ก ์ด๊ฒ์ ๋ฐฉ์งํ๋ ค๋ฉด ์ค๋ณต ๊ฒ์ฌ ์ฝ๋(์ค๋ณต ์ฝ๋ = ์ค๋ณต ์ค๋ฅ/ํ
์คํธ)๋ฅผ ์ฐจ๋จํด์ผ ํฉ๋๋ค. ์ ์ก์ ์ฌ์ฉํ๋ฉด ์ ์ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉฐ ์ด ๊ฒฝ์ฐ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค(ํ๋ก๋์
์์ ๋ ์ง์คํฐ ์ฃผ์๊ฐ ๋ณ๊ฒฝ๋๋ ์ํฉ์ ์ฐพ์๋ณด์ญ์์ค.)). ์ฐ๋ฆฌ๋ ์ฌ์ ํ ๊ฐ๋ ํ์ผ/๋ท ๋ฑ์์ ์ป์ ๊ฐ์ด ๋ฒ์ ๋ด์ ์๋์ง ํ์ธํ์ง๋ง ์ด๋ฅผ ์ค์ ์ง์คํํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค(c# Enum.TryParse ์ฐธ์กฐ).
์์ 2. ์ํ/์ค๋ฅ ๋ก์ง์ด ์๋ ์์ ๋ชจ๋์ ๊ฐ๋ฐ ์ค์ ๋๋ค. ์ด๊ฑฐํ์ ๋น๊ณต๊ฐ๋ก ์ค์ ํ๋ฉด ์๋ฌด๋ ์ด ์ด๊ฑฐํ์ ๋ํด ์์ง ๋ชปํ๋ฉฐ 1์ ๋ชจ๋ ์ด์ ๊ณผ ํจ๊ป ๋ฌธ์ ์์ด ๋ณ๊ฒฝ/ํ์ฅํ ์ ์์ต๋๋ค. ์ฝ๋๋ฅผ ๋น๊ณต๊ฐ ๋ ผ๋ฆฌ์ ๊ธฐ๋ฐํ ๊ฒฝ์ฐ ๊ฐ๋ฐ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์์ 3. ๊ด๋ฒ์ํ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ํด ์์ฃผ ๋ณ๊ฒฝ๋๊ณ ํ์ฅ ๊ฐ๋ฅํ ๋ชจ๋์ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. ๊ณต๊ฐ ๋ ผ๋ฆฌ/์ธํฐํ์ด์ค๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ์ด๊ฑฐํ ๋๋ ๋ค๋ฅธ ์์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ด์ํ ์๋ฃจ์ ์ ๋๋ค. ํด๋ผ์ด์ธํธ-์๋ฒ ์ํคํ ์ฒ์ ์ ์ด๊ฑฐํ ๋ฒํธ๋ฅผ ์ถ๊ฐํ๋ฉด ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ง๋ง ์์๋ฅผ ์ฌ์ฉํ๋ฉด ์์ธกํ ์ ์๋ ๋ชจ๋ธ ์ํ๋ฅผ ์ป์ ์ ์๊ณ ๋์คํฌ์ ์ ์ฅํ ์๋ ์์ต๋๋ค. ๋๋ ์์ธกํ ์ ์๋ ์ํ๋ณด๋ค ์ถฉ๋์ ์ ํธํฉ๋๋ค. ์ด๊ฒ์ ์ญ์์์ฑ/ํ์ฅ ๋ฌธ์ ๊ฐ ์ด๊ฑฐํ์ด ์๋๋ผ ๊ฐ๋ฐ ๋ฌธ์ ๋ผ๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ด ๊ฒฝ์ฐ ์ด๋ค ์ด๊ฑฐํ์ด ์ ํฉํ์ง ์๋ค๋ ๊ฒ์ ์ดํดํ๋ค๋ฉด ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ์ ํํ ์ ์๋ ์ถฉ๋ถํ ๋ฅ๋ ฅ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ด ์๊ฐ์ consts์ ์ปดํ์ผ ์๊ฐ enum์ ์ฃผ์ ์ฐจ์ด์ ์ enum์๋ ๋ ๊ฐ์ง ์ฃผ์ ๊ณ์ฝ์ด ์๋ค๋ ๊ฒ์ ๋๋ค.
์ผ๋ง๋ ๋ง์ ๋ค๋ฅธ ๊ฒ๋ค์ ๋จ์ ์ด ์๋์ง ์ด๊ฑฐํฉ๋๋ค.
๋ธ๋ ์ดํฌ ํธํ์ฑ ์์ด๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ SOLID ์์น์์ O๋ฅผ ์๊ณ ์๋ค๋ฉด ์ด๋ ์ด๊ฑฐํ๋ฟ๋ง ์๋๋ผ ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ์๋ ์ ์ฉ๋ฉ๋๋ค. ๋๊ตฐ๊ฐ๋ ๋ณ๋ ฌ ๋
ผ๋ฆฌ์ ๊ฐ๋ณ ๊ตฌ์กฐ์ฒด๋ก ๋ด ํ๋ก๊ทธ๋จ์ ๋ชป์๊ฒผ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ๊ฐ๋ณ ๊ตฌ์กฐ๋ฅผ ๊ธ์งํ์? ์ด ๋์ ๋ณ๊ฒฝ ๊ฐ๋ฅ/๋ณ๊ฒฝ ๋ถ๊ฐ ๊ตฌ์กฐ์ฒด๋ฅผ ์ถ๊ฐํ๊ณ ๊ฐ๋ฐ์๊ฐ ์ ํํ๋๋ก ํ ์ ์์ต๋๋ค.
์ด์์ผ๋ก Iota์๋ ๋จ์ ์ด ์๋ค๋ ์ ์ ๋ง์๋๋ฆฌ๊ณ ์ถ์ต๋๋ค.
์ด๊ฑฐ ํ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ด๋ฆฌ์์ ์๋ฅผ ๋ค์ด๋ณด์ญ์์ค.
๋ฌด๋๋ํ ๋ง์ ํด์ ์ค๋กํฉ๋๋ค๋ง, ์ด ๋๊ธ ์ดํ์ ๋น์ ์ด ์ฌ๊ธฐ์ ์ค ๊ทผ๊ฑฐ๊ฐ ๋ณ๋ก ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋ ๋น์ ์ด ๋งํ ๋๋ก ํ์ง๋ ์์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ๋ค์ด ์ผ๋ง๋ ํ์ํ์ง ๋ณด์ฌ์ฃผ๊ณ ๊ทธ๋ค์ด ์ผ๋ง๋ ์์ฒ๋ฅผ ์ฃผ๋์ง ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์๋ฅผ ๋ค์์ต๋๋ค.
์ฐ๋ฆฌ๋ ํฉ๋ฆฌ์ ์ผ๋ก ๋์ํ์ง ์์ ์ ์์ง๋ง ์ ์ด๋ ๋ชจ๋๊ฐ ์ ์๋ก ๋ ผ์ํด์ผ ํฉ๋๋ค.
์ค์์ 1
๋๋ ๋น์ ์๊ฒ "๋ฑ๋ก ์ด๋ฆ"์ ์ ๋ง๋ก ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ผ๋ก ์ค ์๋ ์์ง๋ง ํ๋กํ ์ฝ ๊ฐ๊ณผ ๊ด๋ จํ์ฌ ํ์ฅ์ฑ๊ณผ ํธํ์ฑ์ ์ํด ์์์ ๊ฐ์ ์ทจํ๋๋ก ํ๋ ์ ์ฅ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ๋จํธํฉ๋๋ค. ๋ค์ ๋งํ์ง๋ง, proto2 -> proto3์๋ ์ ํํ ๊ทธ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ ํ์ต๋ ๊ฒฝํ์์ ๊ทธ๋ ๊ฒ ํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ ์ชฝ์ด๋ , ๋๋ ๋ฆฐํฐ๊ฐ ์ด๊ฒ์ ์ก์ง ๋ชปํ๋ ์ด์ ๋ฅผ ์ ์ ์์ต๋๋ค.
๋๋ 20๊ฐ์ ์์๋ฅผ ๋ชจ๋ ์ป์๊ณ ๊ทธ๋ค์ด ๊ฐ์ ์ ํ๊ณผ ๋น์ทํ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์ค๋ฅ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ํ๋ก์ ํธ๊ฐ ํฌ๋ฉด ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด๋ฆ์ ์๋ชป ์ ๋ ฅํ๋ ๊ฒฝ์ฐ ์ด๊ฑฐํ์ ๋ซ์๋ ๋์์ด ๋์ง ์์ต๋๋ค. ๊ธฐํธ ์ด๋ฆ์ ์ฌ์ฉํ์ง ์๊ณ ๋์ int/string-literals๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ง.
์ค์์ 2
๊ฐ์ธ์ ์ผ๋ก 'ํฐ ํ๋ก์ ํธ๊ฐ ์๋๋ค'๋ผ๋ ์ ์ '๋จ์ผ ํจํค์ง'๋ฅผ ํ๊ณ ํ ๋๋ ํธ์ด๋ค. ๋ฐ๋ผ์ ์ด๊ฑฐํ์ ํ์ฅํ ๋ ๋์๋ฌธ์๋ฅผ ์๊ฑฐ๋ ์ฝ๋ ์์น๋ฅผ ๋ณ๊ฒฝํ ๊ฐ๋ฅ์ฑ์ด ํจ์ฌ ์ ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ ์ชฝ์ด๋ , ๋๋ ๋ฆฐํฐ๊ฐ ์ด๊ฒ์ ์ก์ง ๋ชปํ๋ ์ด์ ๋ฅผ ์ ์ ์์ต๋๋ค.
์ค์์ 3
์ด๊ฒ์ด ์ด๊ฑฐํ์ ๋ํด ์ ์๋๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ ๋๋ค. ์ ์ ํ ์ฌ๋ก: ์ด ํน์ ๋ฌธ์ ๋ ์ด๋ฅผ ๊ทผ๊ฑฐ๋ก ์ฌ์ฉํฉ๋๋ค. ์์ฃผ ์ธ๊ธ๋๋ ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ ์์ฅ๋ ํด๋ผ์ด์ธํธ-์๋ฒ ์ํคํ ์ฒ์ธ syscall์ ๋๋ค. ์ด ์์ ์ ์ผ๋ฐํ๋ "๋ ๊ฐ ์ด์์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ๋ ๊ตฌ์ฑ ์์๊ฐ ์ด๋ฌํ ๊ฐ์ ๊ตํํ๋ ๋ชจ๋ ์ฝ๋"๋ก, ๋ฏฟ์ ์ ์์ ์ ๋๋ก ๊ด๋ฒ์ํ๋ฉฐ, ์ด์ ๋ํ ๋๋ถ๋ถ์ ์ฌ์ฉ ์ฌ๋ก์ ์ ์ง์ ์๋ฆฌ ๋ชจ๋ธ์์๋ ๋ด๋ณด๋ธ ๋ชจ๋ API๋ ํฌํจํฉ๋๋ค. .
FTR, ๋๋ ์ฌ์ ํ ์ด๊ฑฐํ์ด ํด๋กญ๋ค๋ ๊ฒ์ ๋๊ตฌ์๊ฒ๋ ๋ฉ๋์ํค๋ ค ํ์ง ์์ต๋๋ค(์ ๋ ๊ทธ๋ ๊ฒ ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค). ๋ด๊ฐ ์ด๋ป๊ฒ ๊ทธ๋ค์ด ๊ทธ๋ฌํ ๊ฒฐ๋ก ์ ๋๋ฌํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์ ๋ด๊ฐ ๊ทธ๋ค์๊ฒ ์ ๋ฆฌํ ์ฃผ์ฅ์ด ์ค๋๋ ฅ์ด ์๋ค๊ณ ์๊ฐํ๋์ง ์ค๋ช ํ๊ธฐ ์ํด์์ ๋๋ค.
ํญ์ int ์ ํ์ด ์์ต๋๋ค.
iota
๋ (๋ฐ๋์ ๊ทธ๋ ์ง๋ ์์ง๋ง ๋ฌด์์ด๋ ), const
๋ธ๋ก์ ๊ทธ๋ ์ง ์๊ณ ๋ค์ํ ์์ ์ ํ์ ๊ฐ์ง ์ ์์ต๋๋ค. ์ฌ์ค, ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ ์๋๋ ์ด๊ฑฐํ ๊ตฌํ์ ์์ ์งํฉ์
๋๋ค.
๋จธ๋ฆฌ์ ๊ฐ์ ๊ณ์ฐํด์ผ ํฉ๋๋ค.
๋ค์ ๋งํ์ง๋ง, ์ด๊ฒ์ ์ด๊ฑฐํ์ ์ํ ์ธ์๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๊ฑฐํ ์ ์ธ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
Iota ํํ์์ ์ด๊ฒ์ ํ ์คํธํ๋ ๋ฐ ํ์ํ ์ฝ๋ ํํ์์ ๋๋ค.
๋ชจ๋ ํํ์์ ํ ์คํธํ ํ์๋ ์์ต๋๋ค. ๊ทธ๊ฒ์ด ์ฆ์ ๋ช ๋ฐฑํ๋ค๋ฉด, ํ ์คํธ๋ ๊ณผ์์ ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์์๋ฅผ ์ ์ด ๋์ญ์์ค. ์ด์จ๋ ํ ์คํธ์์ ๊ทธ๋ ๊ฒ ํ ๊ฒ์ ๋๋ค.
iota
๋ ํ์ฌ Go์์ ์ด๊ฑฐํ์ ์ํํ๋ ๋ฐ ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์ด ์๋๋๋ค. const
์ ์ธ์ ๊ทธ๋ ์ต๋๋ค. iota
๋ ์ฐ์์ ์ด๊ฑฐ๋ ํ์์ ์ธ const ์ ์ธ์ ์์ฑํ ๋ ํ์ดํ์ ์ ์ฅํ๋ ๋ณด๋ค ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก๋ง ์ฌ์ฉ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์, Go์ ๊ฐ๋ฐฉํ ์ด๊ฑฐํ์๋ ๋ถ๋ช
ํ ๋จ์ ์ด ์์ต๋๋ค. ๊ทธ๊ฒ๋ค์ ์์์ ๊ด๋ฒ์ํ๊ฒ ์ธ๊ธ๋์์ต๋๋ค. ์ค์์น์ ๊ฒฝ์ฐ๋ฅผ ์์ด๋ฒ๋ ค ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์ค์๋ก ์๋ชป๋ ๊ฐ์ด ๋๋(๋ฒ๊ทธ๋ก ์ด์ด์ง๋) ๋น ๊ธฐํธ ์์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ณ ์ ๋ ์๋ฃจ์
(์ด๊ฑฐํ ์ ํ)์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํน์ ์ ์ถฉ์ ์ ๋ํด ๋
ผ์ํ๋ ๊ฒ๋ณด๋ค ์ด๋ฌํ ๋จ์ ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์ ์๋ ์๋ฃจ์
์ ๋จ์ ์ ๋ํด ์ธก์ ํ๋ ๊ฒ์ด ๋ ์์ฐ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋์๊ฒ ๋๋ถ๋ถ์ ๋จ์ ์ ํน์ ์ข ๋ฅ์ const ์ ์ธ์ ๊ฐ์งํ๊ณ ์ฌ์ฉ๋ฒ์ ํ์ธํ๋ linter-tool์ ์ฌ์ฉํ์ฌ ํ์ฌ ์ธ์ด์์ ๋๋ถ๋ถ ์ค์ฉ์ ์ผ๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ค์ ์คํ์ด์ฑ์ ์ด๋ฐ ์์ผ๋ก ํด๊ฒฐํ ์ ์์ผ๋ฉฐ ์ข์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ ๋ฌธ์ ์ ๋ํ ๋ค๋ฅธ ํด๊ฒฐ์ฑ ๋ ์ด๊ฑฐํ๊ณผ ๋ค๋ฅผ ์ ์์ต๋๋ค.
๋๋ ๋น์ ์๊ฒ "๋ฑ๋ก ์ด๋ฆ"์ ์ ๋ง๋ก ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ผ๋ก ์ค ์๋ ์์ง๋ง ํ๋กํ ์ฝ ๊ฐ๊ณผ ๊ด๋ จํ์ฌ ํ์ฅ์ฑ๊ณผ ํธํ์ฑ์ ์ํด ์์์ ๊ฐ์ ์ทจํ๋๋ก ํ๋ ์ ์ฅ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ๋จํธํฉ๋๋ค. ๋ค์ ๋งํ์ง๋ง, proto2 -> proto3์๋ ์ ํํ ๊ทธ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ ํ์ต๋ ๊ฒฝํ์์ ๊ทธ๋ ๊ฒ ํ์ต๋๋ค.
์ด๊ฒ์ด ๋ด๊ฐ ํ๋ฆฝ๋ ๊ฐ์น๋ฅผ ๋งํ ์ด์ ์ ๋๋ค. Fe wav ํ์ ๊ธฐ๋ฐ์ ์๋ ๋์ ๋ณ๊ฒฝ๋์ง ์์์ผ๋ฉฐ ๋ฐ์ด๋ ๋ฐฑ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์๋ก์ด ๊ฐ์ ์ ์งํ ์ ์๋ ๊ฒฝ์ฐ ์ด๊ฑฐํ์ ์ฌ์ฉํ๊ณ ์ผ๋ถ ๊ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ด๋ฆ์ ์๋ชป ์ ๋ ฅํ๋ ๊ฒฝ์ฐ ์ด๊ฑฐํ์ ๋ซ์๋ ๋์์ด ๋์ง ์์ต๋๋ค. ๊ธฐํธ ์ด๋ฆ์ ์ฌ์ฉํ์ง ์๊ณ ๋์ int/string-literals๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ง.
์, ์ข์ ์ด๋ฆ์ ์ง์ ํ๋ ๋ฐ๋ ๋์์ด ๋์ง ์์ง๋ง ํ ์ด๋ฆ์ผ๋ก ๋ช ๊ฐ์ง ๊ฐ์ ๊ตฌ์ฑํ๋ ๋ฐ๋ ๋์์ด ๋ ์ ์์ต๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๋ ๋น ๋ฅด๊ฒ ๋ง๋ญ๋๋ค. ์๋ ํ์ดํ์ ํตํด ๋ณํ ์๋ฅผ ํ๋๋ก ์ค์ผ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ์ด๊ฑฐํ์ ๋ํด ์ ์๋๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ ๋๋ค. ์ ์ ํ ์ฌ๋ก: ์ด ํน์ ๋ฌธ์ ๋ ์ด๋ฅผ ๊ทผ๊ฑฐ๋ก ์ฌ์ฉํฉ๋๋ค. ์์ฃผ ์ธ๊ธ๋๋ ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ ์์ฅ๋ ํด๋ผ์ด์ธํธ-์๋ฒ ์ํคํ ์ฒ์ธ syscall์ ๋๋ค. ์ด ์์ ์ ์ผ๋ฐํ๋ "๋ ๊ฐ ์ด์์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ๋ ๊ตฌ์ฑ ์์๊ฐ ์ด๋ฌํ ๊ฐ์ ๊ตํํ๋ ๋ชจ๋ ์ฝ๋"๋ก, ๋ฏฟ์ ์ ์์ ์ ๋๋ก ๊ด๋ฒ์ํ๋ฉฐ, ์ด์ ๋ํ ๋๋ถ๋ถ์ ์ฌ์ฉ ์ฌ๋ก์ ์ ์ง์ ์๋ฆฌ ๋ชจ๋ธ์์๋ ๋ด๋ณด๋ธ ๋ชจ๋ API๋ ํฌํจํฉ๋๋ค. .
๊ทธ๋ฌ๋ ์์/์ด๊ฑฐํ์ ์ฌ์ฉ/์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๋ฌธ์ ์ ํต์ฌ์ ์ ๊ฑฐํ์ง ์์ผ๋ฉฐ ์ฌ์ ํ ์ญ์์์ฑ์ ๋ํด ์๊ฐํด์ผ ํฉ๋๋ค. ๋๋ ๋ฌธ์ ๊ฐ enums/const๊ฐ ์๋๋ผ ์ฐ๋ฆฌ์ ์ฌ์ฉ ์ฌ๋ก์ ์๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก 'ํฐ ํ๋ก์ ํธ๊ฐ ์๋๋ค'๋ผ๋ ์ ์ '๋จ์ผ ํจํค์ง'๋ฅผ ํ๊ณ ํ ๋๋ ํธ์ด๋ค. ๋ฐ๋ผ์ ์ด๊ฑฐํ์ ํ์ฅํ ๋ ๋์๋ฌธ์๋ฅผ ์๊ฑฐ๋ ์ฝ๋ ์์น๋ฅผ ๋ณ๊ฒฝํ ๊ฐ๋ฅ์ฑ์ด ํจ์ฌ ์ ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด ๊ฒฝ์ฐ์๋ ์ด๋ฆ ๋ณํ ๋ฐ ์ปดํ์ผ ์๊ฐ ํ์ธ์ ์ด์ ์ด ์์ต๋๋ค.
๋ชจ๋ ํํ์์ ํ ์คํธํ ํ์๋ ์์ต๋๋ค. ๊ทธ๊ฒ์ด ์ฆ์ ๋ช ๋ฐฑํ๋ค๋ฉด, ํ ์คํธ๋ ๊ณผ์์ ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์์๋ฅผ ์ ์ด ๋์ญ์์ค. ์ด์จ๋ ํ ์คํธ์์ ๊ทธ๋ ๊ฒ ํ ๊ฒ์ ๋๋ค.
Ofcouuse ๋๋ ๋ชจ๋ ์ฝ๋ ๋ผ์ธ์ ํ ์คํธํด์ผ ํ๋ ๊ฒ์ ์๋์ง๋ง, ์ ๋ก๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ฅผ ํ ์คํธํ๊ฑฐ๋ ๋ค์ ์์ฑํด์ผ ํ๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค. ๋๋ ์ด๊ฒ์ iota ์์ด ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ง๋ง ๋์ ์ค๋๋ ์๋ ๋จ์ง ๋๋ด์ผ ๋ฟ์ ๋๋ค.
๋ค์ ๋งํ์ง๋ง, ์ด๊ฒ์ ์ด๊ฑฐํ์ ์ํ ์ธ์๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๊ฑฐํ ์ ์ธ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ด๊ฑฐํ์ ๋ํ ์ธ์๊ฐ ์๋๋๋ค.
@๋ฉ๋ก๋น์ฐ์ค
์ฐ๋ฆฌ๊ฐ ๋ซํ ์ด๊ฑฐํ(์ฌ๋๋ค์ด ์ด๊ฑฐํ์ ๋ํด ์ด์ผ๊ธฐํ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ด์ผ๊ธฐํ๋ ๊ฒ)์ด๋ ์ฒ ์ ํ ๊ฒ์ฌ๊ฐ ํฌํจ๋ ์ด๊ฑฐํ์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒฝ์ฐ ํ์คํ ํน๋ณํฉ๋๋ค. ํ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ํ ์์ ํ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค.
๋น์ ์ด ๊ฐ์ง๊ณ ์๋ค๋ฉด
package p
type Enum int
const (
A Enum = iota
B
C
)
func Make() Enum {...}
func Take(Enum) {...}
๊ทธ๋ฆฌ๊ณ
package q
import "p"
const D enum = p.C + 1
q
๋ด์์ $#$ D
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ํฉ๋๋ค( p
Enum(3)
์ ๋ํ ์์ฒด ๋ ์ด๋ธ์ ์ถ๊ฐํ์ง ์๋ ํ). ๋ค์ p
๋ก ์ ๋ฌ: p.Make
์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ํ๋ฅผ D
๋ก ์ ํํ ์ ์์ง๋ง p.Take
๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์์ง ํ์ธํด์ผ ํฉ๋๋ค. q.D
์ ๋ฌ๋์ง ์๊ณ A
, B
, C
์ค ํ๋๋ง ๊ฐ์ ธ์ค๊ฑฐ๋ ๋ฒ๊ทธ๊ฐ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๋ค์์ ์ํํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
package q
import "p"
type Enum int
const (
A = p.A
B = p.B
C = p.C
D = C + 1
)
// needs to return an error if passed D or an unknown state of Enum
func To(Enum) (p.Enum, error) {...}
// needs to return an error if p.Enum has a value not known to the author
// at the time this package was written.
func From(p.Enum) (Enum, error) {...}
์ธ์ด์ ๋ซํ ์ ํ์ด ์๋ ์๋ ๋น์ ์ ๋ซํ ์ ํ์ ๊ฐ๋ ๋ชจ๋ ๋ฌธ์ ๊ฐ ์์ง๋ง ์ปดํ์ผ๋ฌ๊ฐ ๋น์ ์ ๊ฐ์ํ์ง ์์ต๋๋ค.
๊ทํ์ ์๋ ํจํค์ง ๊ฒฝ๊ณ๊ฐ ์๋ ํ๋ก์ธ์ค ๊ฒฝ๊ณ(๋คํธ์ํฌ ์ค๋ฅ์ ๋ํด ์ด์ผ๊ธฐํจ์ผ๋ก์จ)๋ง ๋ค๋ฃน๋๋ค. FromTheNetwork์ "InvalidInternalState"๋ฅผ ์ถ๊ฐํ๋ฉด ํจํค์ง๊ฐ ์ด๋ป๊ฒ ์๋ํฉ๋๊น? ๋ค์ ์ปดํ์ผํ๊ธฐ ์ ์ ์ค์์น๋ฅผ ์์ ํด์ผ ํฉ๋๊น? ๊ทธ๋ฐ ๋ค์ ์ ์ง์ ๋ณต๊ตฌ ๋ชจ๋ธ์์๋ ํ์ฅํ ์ ์์ต๋๋ค. ์ฒ์์ ์ปดํ์ผํ๋ ค๋ฉด ๊ธฐ๋ณธ ์ผ์ด์ค๊ฐ ํ์ํฉ๋๊น? ๊ทธ๋ฌ๋ฉด ์ด๊ฑฐํ์ ์๋ฌด๋ฐ ์๋ฏธ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฑฐํ ์ ํ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์์ ๊ฐ์ด ์ํํ๊ณ ์ถ๊ฐ ์ํ ๋ฐ ์ฐ๊ธฐ ๋ณํ ๊ธฐ๋ฅ์ผ๋ก ๊ณ ์ ํ ๋ฒ์ ์ ์ ์ํด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ sum ์ ํ์ ์ด๊ฑฐํ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ์๋ ๊ตฌ์ฑํ ์ ์์ผ๋ฏ๋ก ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๋งค์ฐ ์์ฐ์ค๋ฝ๊ณ ์์ ํ๊ฒ "ํ์ฅ"ํ ์ ์์ต๋๋ค. ๋๋ ์๋ฅผ ๋ค์์ง๋ง ๋ ๋ช ํํ๊ฒ ์ฃผ์ด์ง
package p
type Enum pick {
A, B, C struct{}
}
Enum
๋ ๋ค์๊ณผ ๊ฐ์ด "ํ์ฅ"๋ ์ ์์ต๋๋ค.
package q
import "p"
type Enum pick {
P p.Enum
D struct{}
}
์ด๋ฒ์๋ p
D
์ถ๊ฐํ๋ ๊ฒ์ด ์์ ํ ์์ ํฉ๋๋ค. ์ ์ผํ ๋จ์ ์ q.Enum
p.Enum
์ํ๋ก ์ด๋ํ๋ ค๋ฉด ์ด์ค ์ ํํด์ผ ํ์ง๋ง ๋ช
์์ ์ด๊ณ ๋ช
ํํ๋ฉฐ ์์ ์ธ๊ธํ๋ฏ์ด ํธ์ง์๊ฐ ๋ผ๋๋ฅผ ๋ฑ์ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์๋์ผ๋ก ๊บผ์ง๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฅผ ์ํด ์ ํ์ผ๋ก ์ค์ ์ด๊ฑฐํ์ด ํ์ํ์ง ์์ต๋๋ค. ์ด๋ฌํ ๋ฆฐํ ๋๊ตฌ๋ ๋ํ ๋ชจ๋ ์ผ์ด์ค๊ฐ ์ฃผ์ด์ง ์ ํ์ด๊ณ "์ด๊ฑฐํ"์ด๋ผ๊ณ ๊ฐ์ฃผํ๊ณ ์ํ๋ ๊ฒ์ฌ๋ฅผ ์ํํ๋ iota๋ฅผ ์ฌ์ฉํ์ฌ const ์ ์ธ์ ๋ฐ๊ฒฌ์ ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค. ๋ชจ๋ ์ค์์น์ ๊ธฐ๋ณธ๊ฐ์ด ์์ด์ผ ํ๊ฑฐ๋ ๋ชจ๋ (์๋ ค์ง) ๊ฒฝ์ฐ๋ฅผ ํ์ธํด์ผ ํ๋ ์๋ ์์ฑ ๋๋ ๋ฆฐํ ์ ๋๊ธฐ ์ํด ์ด๋ฌํ "๊ด๋ก์ ๋ฐ๋ฅธ ์ด๊ฑฐํ"์ ์ฌ์ฉํ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค.
์ฌ๊ธฐ์๋ ๋ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
const/iota๋ฅผ ํตํด ํด๋น ๋๋ฉ์ธ์ ํ์ ์งํฉ์ ๋ ์ด๋ธ์ด ์ง์ ๋ ์ ์๋ ์ ์ ์ ํ์ด ์๋ ๊ฒฝ์ฐ:
์ฒซ์งธ, ๋ซํ ์ด๊ฑฐํ์ด๋ ์ด๋ฆฐ ์ด๊ฑฐํ์ ๋ํ๋ผ ์ ์์ต๋๋ค. ์ฃผ๋ก ๋ซํ ์ ํ์ ์๋ฎฌ๋ ์ด์ ํ๋ ๋ฐ ์ฌ์ฉ๋์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฐ์ ๋จ์ํ ์ด๋ฆ์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ๊ฐ์์ ํ์ผ ํ์์ ๋ํด ์ด๋ฆฐ ์ด๊ฑฐํ์ ๊ณ ๋ คํ์ญ์์ค.
const (
//Name is the ID of a record field
Name Record = iota
//EmpID is the ID of an employee ID field
EmpID
//Intermediate values are reserved for future versions
//Custom is the base of custom fields. Any custom field must have a unique ID greater than Custom.
Custom Record = 42
)
์ด๊ฒ์ 0, 1 ๋ฐ 42๊ฐ ๋ ์ฝ๋ ์ ํ์ ๋๋ฉ์ธ์์ ๋งํ๋ ๊ฒ์ด ์๋๋๋ค. ๊ณ์ฝ์ ํจ์ฌ ๋ ๋ฏธ๋ฌํ๋ฉฐ ๋ชจ๋ธ๋งํ ์ข ์ ์ ํ์ด ํ์ํฉ๋๋ค. (ํ์คํ ๋๋ฌด ์ง๋์น ๊ฒ์ ๋๋ค!)
๋์งธ, ์์ ๋ ์ด๋ธ์ด ์๋ ์ ์๋ ์ ์ ์ ํ์ด ๋๋ฉ์ธ์ด ์ ํ๋จ์ ์๋ฏธํ๋ค๊ณ ๊ฒฝํ์ ์ผ๋ก ๊ฐ์ ํ ์ ์์ต๋๋ค. ์๋ก๋ถํฐ ์คํ์ ์ป์ ์ ์์ง๋ง ์๋ฒฝํ ๊ฒ์ ์์ต๋๋ค. go/types๋ฅผ ์ฌ์ฉํ์ฌ ์ ์์์ ์ด ์ ์ฌ ์ ํ์ ์ถ์ถํ ๋ค์ ํด๋น ์ ํ์ ๊ฐ์ ๋ํ ๋ชจ๋ ์ค์์น๋ฅผ ์ฐพ๊ณ ์ฐพ์ ๋ชจ๋ ์ค์์น์ ํ์ํ ๋ ์ด๋ธ์ด ํฌํจ๋์ด ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋์์ด ๋ ์ ์์ง๋ง ์ด ์์ ์์ ์์ ํจ์ ๋ณด์ฌ์ฃผ์ง๋ ์์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋ ์ ํจํ ๊ฐ์ ์ ์ฉ ๋ฒ์๋ฅผ ๋ณด์ฅํ์ง๋ง ์ ํจํ์ง ์์ ๊ฐ์ด ์์ฑ๋์ง ์์๋ค๋ ๊ฒ์ ์ฆ๋ช ํ์ง ์์์ต๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๊ฐ์ ๋ชจ๋ ์์ค, ์ฑํฌ ๋ฐ ๋ณํ์ ์ฐพ๊ณ ์ ํจํ์ง ์์ ๊ฐ์ด ์์ฑ๋์ง ์์์์ ์ ์ ์ผ๋ก ๋ณด์ฅํ๊ธฐ ์ํด ์ถ์์ ์ผ๋ก ํด์ํ ์ ์๋ค ํ๋๋ผ๋, ๋ฐ์์ด ์ฐธ์ ์ธ์ํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋ฐํ์ ์ ๊ฐ์ ๋ํด ์๋ฌด ๋ง๋ ํ ์ ์์ ๊ฒ์ ๋๋ค. ์ ํ ์์คํ ์์ ์ธ์ฝ๋ฉ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ ํ์ ๋๋ฉ์ธ์ ๋๋ค.
๊ณ ์ ํ ๋ฌธ์ ๊ฐ ์์ง๋ง enum ๋ฐ sum ์ ํ์ ๋ํ ๋์์ด ์ฌ๊ธฐ์ ์์ต๋๋ค.
range m n
์ ํ ๋ฆฌํฐ๋ด์ด ์ต์ m ๋ฐ ์ต๋ n(๋ชจ๋ v์ ๋ํด m โค v โค n)์ธ ์ ์ ์ ํ์ ์์ฑํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฅผ ํตํด ์ด๊ฑฐํ์ ๋๋ฉ์ธ์ ๋ค์๊ณผ ๊ฐ์ด ์ ํํ ์ ์์ต๋๋ค.
package p
type Enum range 0 2
const (
A Enum = iota
B
C
)
๋๋ฉ์ธ์ ํฌ๊ธฐ = ๋ ์ด๋ธ์ ์์ด๊ธฐ ๋๋ฌธ์ switch ๋ฌธ์ด ๋ชจ๋ ๊ฐ๋ฅ์ฑ์ ์์งํ๋์ง ์ฌ๋ถ๋ฅผ 100% ํ์ ์ผ๋ก ๋ฆฐํธํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ ์ด๊ฑฐํ์ ์ธ๋ถ์ ์ผ๋ก ํ์ฅํ๋ ค๋ฉด ๋งคํ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ ํ ๋ณํ ํจ์๋ฅผ ์ ๋์ ์ผ๋ก ์์ฑํด์ผ ํ์ง๋ง ์ด์จ๋ ๊ทธ๋ ๊ฒ ํด์ผ ํ๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค.
๋ฌผ๋ก , ์ค์ ๋ก ๊ตฌํํด์ผ ํ ๋๋๋๋ก ๋ฏธ๋ฌํ ์ ํ์ ์ ํ์ด๋ฉฐ ๋๋จธ์ง Go์์๋ ์ ์๋ํ์ง ์์ต๋๋ค. ๋ํ ์ด๊ฒ๊ณผ ์ผ๋ถ ํ์ ์ฌ์ฉ ์ฌ๋ก ์ธ์๋ ๋ง์ด ์ฌ์ฉ๋์ง ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ ์ง์ ์ธ ๋ณต๊ตฌ์ ํ์ฅ์ฑ์ ์ ์งํ๋ ๊ฒ์ ์ค์์ฑ์ ๋ํด ๋์ํ์ง ์์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ง์ ์ฌ๋๋ค์ ์๋ฏธ๋ก ์ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ํด๊ฒฐํ๋ ๋ฌธ์ ์ ๋ํ ๋ ๋์ ์๋ฃจ์ ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ๋ค์ด ์ค์ํ๋ค๊ณ ์๊ฐํ๋ค๋ฉด ์ด๊ฑฐํ์ ํด๋กญ๊ฑฐ๋ ๋ฌด์๋ฏธํ๋ค๊ณ ๋ณด๋ ๊ฒ์ด ์๋ฒฝํ๊ฒ ํ๋นํ๊ณ ํฉ๋ฆฌ์ ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋ด๊ฐ ๋๋ตํ๊ณ ์๋ ์ง๋ฌธ์ด์์ต๋๋ค. ์ฌ๋๋ค์ด ์ปดํ์ผ๋ฌ์์ ํ์ธํ๋ ๋์ ๋ชจ๋ ๊ณณ์์ ํ์ธ์ ์๊ตฌํ๋ ๊ฒ์ ํฉ๋ฆฌ์ ์ผ๋ก ์ ์ถฉํ ์ ์๋ ๋ฐฉ๋ฒ. ๋ต๋ณ: API์ ํ์ฅ์ฑ๊ณผ ์งํ๋ฅผ ์ค์ํจ์ผ๋ก์จ ์ด์จ๋ ์ฌ์ฉ ์ฌ์ดํธ์์ ์ด๋ฌํ ํ์ธ์ด ํ์ํฉ๋๋ค.
๊ธฐ๋ณธ ์ด๊ฑฐํ ์ ํ์ ๊ฒฝ์ฐ ๋์ํฉ๋๋ค. ์ด ํ ๋ก ์ ์์ํ ๋ ์ด์ก ์ ํ๋ณด๋ค ์ ํ๋์๋ค๋ฉด ๋จ์ํ ๋ถํํ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ์ ๊ทธ๋ค์ด ์ ํด๋ก์ด์ง ์ดํดํฉ๋๋ค. ์ ๋ฅผ ์ํด ๊ทธ๊ฒ์ ๋ช ํํ ํด ์ฃผ์ ๋น์ ๊ณผ @griesemer ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
ํฉ๊ณ ์ ํ์ ๊ฒฝ์ฐ ๊ทํ๊ฐ ๋งํ ๋ด์ฉ์ด ์ปดํ์ผ ์๊ฐ์ ์ค์์น๋ฅผ ์์ ํ๊ฒ ์ฌ์ฉํ ํ์๊ฐ ์๋ ํ๋นํ ์ด์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์ฌ์ ํ ํ์ํ์ด ๋ง์ ์ด์ ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ์๊ฐํ๋ฉฐ ์ฌ๊ธฐ์์ ์ดํด๋ณธ ์ธ ๊ฐ์ง ์ ํ ์ค sum ์ ํ์ด ๋ค๋ฅธ ๋จ์ ์์ด ๊ฐ์ฅ ์ ์ฐํฉ๋๋ค. ๋ค๋ฅธ ์ข์ ์ ํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ชป๋ ๊ฐ์ผ๋ก ์ธํ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๋ฉด์ ํ์ฅ์ฑ์ด๋ ์ ์ง์ ๋ณต๊ตฌ๋ฅผ ๋ฐฉํดํ์ง ์๊ณ ์ ํ์ ๋ซ์ ์ ์์ต๋๋ค.
๋ด๊ฐ ํ์ด์ฌ, ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ ๊ธฐํ ์ผ๋ฐ์ ์ธ ์ ํ์ด ์๋ ์ธ์ด๋ณด๋ค golang์ ์ฌ์ฉํ๋ ์ฃผ๋ ์ด์ ๋ ์ ํ ์์ ์ฑ์ ๋๋ค. ์ ๋ Java๋ก ๋ง์ ์์ ์ ์ํํ์ผ๋ฉฐ Java๊ฐ ์ ๊ณตํ๋ golang์์ ํ ๊ฐ์ง ๊ทธ๋ฆฌ์ํ๋ ๊ฒ์ ์์ ํ ์ด๊ฑฐํ์ ๋๋ค.
์ด๊ฑฐํ์ผ๋ก ์ ํ์ ๊ตฌ๋ณํ ์ ์๋ค๋ ์ ์ ๋์ํ์ง ์์ต๋๋ค. int๊ฐ ํ์ํ ๊ฒฝ์ฐ Java์ฒ๋ผ ๋์ int๋ฅผ ์ฌ์ฉํ์ญ์์ค. ์์ ํ ์ด๊ฑฐํ์ด ํ์ํ ๊ฒฝ์ฐ ๋ค์ ๊ตฌ๋ฌธ์ ์ ์ํฉ๋๋ค.
type enums enum {
foo, bar, baz
}
@rudolfschmidt , ๋๋ ๋น์ ์๊ฒ ๋์ํฉ๋๋ค. ๊ทธ๊ฒ๋ ๊ทธ๋ ๊ฒ ๋ณด์ผ ์ ์์ต๋๋ค:
type DaysOfTheWeek enum {
Monday
Tuesday
}
๊ทธ๋ฌ๋ ์ฌ๊ธฐ์๋ ์์ ํจ์ ์ด ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ๊ฑฐ๋ JSON์ผ๋ก ๋ณํํ๊ฑฐ๋ ๋๋ FS์ ์ํธ ์์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ enum
๋ฅผ ์ ์ดํ ์ ์์ด์ผ ํฉ๋๋ค.
์ด๊ฑฐํ์ด ๋ถํธ ์๋ ์ ์ ์งํฉ์ด๋ผ๊ณ ๋งน๋ชฉ์ ์ผ๋ก ๊ฐ์ ํ๋ฉด iota๋ก ๋๋ ์ ์์ต๋๋ค.
ํ์ ์ ํ๋ ค๋ฉด ์ฌ์ฉ ํธ์์ฑ์ ์๊ฐํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ด์ค๋ JSON ๋ด๋ถ์ ๊ฐ์ด enum์ ์ ํจํ ์์์ธ์ง ์ผ๋ง๋ ์ฝ๊ฒ ๊ฒ์ฆํ ์ ์์ต๋๊น?
์ํํธ์จ์ด๊ฐ ๋ณ๊ฒฝ๋๊ณ ์๋ค๊ณ ๋งํ๋ฉด ์ด๋ป๊ฒ ๋ฉ๋๊น?
์ํธ ํํ ๋ชฉ๋ก์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
type CryptoCurrency enum {
BTC
ETH
XMR
}
์ฐ๋ฆฌ๋ ์ฌ๋ฌ ํ์ฌ ์์คํ
๊ณผ ๋ฐ์ดํฐ๋ฅผ ๊ตํํฉ๋๋ค. ์์ฒ ๊ฐ์ง๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
๋น์ ์ ๊ธด ๊ธฐ๋ก, ์ ์ฅ ๋ฐ์ดํฐ์ ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์๊ฐ์ด ์ง๋๋ฉด BitCoin์ ๊ฒฐ๊ตญ ์ฃฝ์ต๋๋ค. ์๋ฌด๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ๊ตฌ์กฐ์์ ์ญ์ ํ๊ธฐ๋ก ๊ฒฐ์ ํฉ๋๋ค.
type CryptoCurrency enum {
ETH
XMR
}
์ด๋ก ์ธํด ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค. enum์ ๋ชจ๋ ๊ฐ์ด ์ด๋ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ด์ฐฎ์ต๋๋ค. ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์
์ ์คํํ ์ ์์ต๋๋ค. ๊ทํ์ ํํธ๋๋ ์ด๋ป์ต๋๊น? ๊ทธ๋ค ์ค ์ผ๋ถ๋ ๊ทธ๋ ๊ฒ ๋นจ๋ฆฌ ์์ง์ด์ง ์๊ณ , ์ผ๋ถ๋ ์์์ด ์๊ฑฐ๋ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋น์ ์ ๊ทธ๋ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ์์ต๋๋ค. ๊ทธ๋์ ๋น์ ์ 2๊ฐ์ ์ด๊ฑฐํ์ ๊ฐ๊ฒ ๋ ๊ฒ์
๋๋ค: old and new; ๋ ๋ค ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ๋งคํผ.
์ด๋ ์ด๊ฑฐํ์ ๋ํ ์ ์์ ์ ์ฐ์ฑ๊ณผ ๊ทธ๋ฌํ ์ข
๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ๊ณ ๋ง์ฌ๋ง/์ธ๋ง์ฌ๋งํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ผ ํจ์ ์๋ ค์ค๋๋ค.
type CryptoCurrency enum {
ETH = 1, // reminds const?
XMR = 2
}
// this is real life case
v := 3
if v is CryptoCurrency {
// right?
} else {
// nope, provide default value
v = CryptoCurrency.ETH
}
์ด๊ฑฐํ๊ณผ ์ฌ์ฉ ์ฌ๋ก์ ์ ์ฉ ๊ฐ๋ฅ์ฑ์ ๋ํด ์๊ฐํด์ผ ํฉ๋๋ค.
์์ฒ ์ค์ ์์ฉ๊ตฌ ์ฝ๋๋ฅผ ์ ์ฝํ ์ ์๋ค๋ฉด 2๊ฐ์ ์๋ก์ด ํค์๋๋ฅผ ๋ฐฐ์ธ ์ ์์ต๋๋ค.
์ค๊ฐ ์ง์ ์ ์ค์ ๋ก ์ด๊ฑฐํ ๊ฐ์ ์ ํํ์ง ์๊ณ ์ด๊ฑฐํ ๊ฐ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ฐ๋ ๊ฒ์ ๋๋ค. ์ด๊ฑฐํ ์ ํ์ ๊ฑฐ์ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค. ๋ช ๋ช ๋ ์์์ ๋ฌด๋ฆฌ์ ๋๋ค. ์ด๊ฑฐํ ์ ํ์ ๋ณ์๋ ์ด๊ฑฐํ์ ๊ธฐ๋ณธ ์ ํ ๊ฐ๊ณผ ๊ฐ์ ์ ์์ต๋๋ค. ๊ทธ ์์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ณผ ๊ฐ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ ํจํ ์ด๊ฑฐํ ๊ฐ์ด ํฌํจ๋์ด ์๋์ง ์ฌ๋ถ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ stringification๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ณด๋์ค๊ฐ ์์ ์ ์์ต๋๋ค.
๋งค์ฐ ์์ฃผ ๋๋ ๋ชจ๋ ๊ณณ์ ์ด๊ฑฐํ์ด ์๋ ํ๋กํ ์ฝ(protobuf ๋๋ thrift)์ด ์๋ ์ํฉ์ ์ฒํด ์์ต๋๋ค. ๋๋ ๊ทธ๋ค ๊ฐ๊ฐ์ ๊ฒ์ฆํด์ผ ํ๊ณ , ์ด๊ฑฐํ ๊ฐ์ด ๋์๊ฒ ์๋ ค์ง์ง ์์๋ค๋ฉด, ๊ทธ ๋ฉ์์ง๋ฅผ ๋ฒ๋ฆฌ๊ณ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ์ข ๋ฅ์ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ด๊ฑฐํ์ด ์์์ ์งํฉ์ธ ์ธ์ด์ ๊ฒฝ์ฐ ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ์ ํ์ธํ๋ ์์ฒญ๋ ์์ switch ๋ฌธ์ ์์ฑํ๋ ๊ฒ ์ธ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์์ฒญ๋ ์์ ์ฝ๋์ ์ค์๊ฐ ์์ ์ ๋ฐ์ ์์ต๋๋ค. C#๊ณผ ๊ฐ์ ๊ฒ์ผ๋ก ์ด๊ฑฐํ ๊ฒ์ฆ์ ์ํ ๋ด์ฅ ์ง์์ ์ฌ์ฉํ์ฌ ๋ง์ ์๊ฐ์ ์ ์ฝํ ์ ์์ต๋๋ค. ์ผ๋ถ protobuf ๊ตฌํ์ ์ค์ ๋ก ๋ด๋ถ์ ์ผ๋ก ๊ทธ๋ ๊ฒ ํ๊ณ ์๋ ๊ฒฝ์ฐ ์์ธ๋ฅผ ๋ฐ์์ํต๋๋ค. ๋ก๊น ์ด ์ผ๋ง๋ ์ฌ์ด์ง๋ ๋งํ ๊ฒ๋ ์๊ณ ์์์์ ๋ฐ๋ก ๋ฌธ์์ดํ๋ฅผ ์ป์ ์ ์์ต๋๋ค. protobuf๊ฐ Stringer ๊ตฌํ์ ์์ฑํ๋ ๊ฒ์ ์ข์ง๋ง ์ฝ๋์ ๋ชจ๋ ๊ฒ์ด protobuf์ธ ๊ฒ์ ์๋๋๋ค.
๊ทธ๋ฌ๋ ๊ฐ์ ์ ์ฅํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ฉ์์ง๋ฅผ ๋ฒ๋ฆฌ๊ณ ์ถ์ง ์๊ณ ์ ํจํ์ง ์์ ๊ฒฝ์ฐ์๋ ๋ฉ์์ง๋ก ๋ฌด์ธ๊ฐ๋ฅผ ์ํํ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ฒ๋ฆด ์ ์์ง๋ง ์๋ฒ ์ธก์์๋ ์ข ์ข ๋ชจ๋ ๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํด์ผ ํฉ๋๋ค. ์ฝํ ์ธ ๋ฅผ ๋ฒ๋ฆฌ๋ ๊ฒ์ ์ ํ ์ฌํญ์ด ์๋๋๋ค.
๊ทธ๋์ ๋์๊ฒ๋ ์ด๊ฑฐํ ๊ฐ์ ๊ฒ์ฆํ๋ ๋ฅ๋ ฅ์ ์ง์ ํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ ํจ์ฑ ๊ฒ์ฌ๋ง ์ํํ๋ ์์ฒ ์ค์ ์์ฉ๊ตฌ ์ฝ๋๋ฅผ ์ ์ฝํ ์ ์์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ๋๊ตฌ๋ก ์ ๊ณตํ๋ ๊ฒ์ ๋์๊ฒ ๋งค์ฐ ๊ฐ๋จํด ๋ณด์
๋๋ค. ๊ทธ ์ผ๋ถ๊ฐ ์ด๋ฏธ ์คํธ๋ง๊ฑฐ ๋๊ตฌ์ ์์ต๋๋ค. enumer Foo
์ ๊ฐ์ด ํธ์ถํ ๋๊ตฌ๊ฐ ์๋ ๊ฒฝ์ฐ Foo
fmt.Stringer
#$ ๋ฉ์๋์ ๋ค์์ ํ์ธํ๋ Known() bool
๋ฉ์๋ ์ ์ฅ๋ ๊ฐ์ด ์๋ ค์ง ๊ฐ์ ๋ฒ์์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ฌธ์ ๊ฐ ์ํ๋ฉ๋๊น?
@Merovius ๋ ๋ค๋ฅธ ๊ฒ์ด ์์ผ๋ฉด ์ ์ฉํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ผ๋ฐ์ ์ผ๋ก autogen์ ๋ฐ๋ํฉ๋๋ค. ์ ์ฉํ๊ณ ์ ๋๋ก ์๋ํ๋ ๊ฒฝ์ฐ๋ ํ ๋ฒ ์ปดํ์ผํ ์ ์๋ ๋งค์ฐ ์์ ์ ์ธ ํ๋กํ ์ฝ์ด ์๋ protobuf์ ๊ฐ์ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋จ์ํ ์ ํ ์์คํ ์ ๋ชฉ๋ฐ์ฒ๋ผ ๋๊ปด์ง๋๋ค. ๊ทธ๋ฆฌ๊ณ Go๊ฐ ์ธ์ด ์์ฒด์ ์ฒ ํ์ ์ด๊ธ๋๋ ํ์ ์์ ์ฑ์ ๊ดํ ๋ชจ๋ ๊ฒ์ ์ดํด๋ด ๋๋ค. ์ธ์ด๋ฅผ ์ง์ํ๋ ๋์ ์ค์ ๋ก ์ธ์ด ์ํ๊ณ์ ์ผ๋ถ๊ฐ ์๋ ์ด ์ธํ๋ผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ์ ์์ํฉ๋๋ค. ์ธ์ด์์ ๋๋ฝ๋ ๊ฒ์ ๊ตฌํํ๋ ๊ฒ์ด ์๋๋ผ ์กฐ์ฌ๋ฅผ ์ํ ์ธ๋ถ ๋๊ตฌ๋ฅผ ๋จ๊ฒจ๋์ญ์์ค.
. ์ผ๋ฐ์ ์ผ๋ก ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋จ์ํ ์ ํ ์์คํ ์ ๋ชฉ๋ฐ์ฒ๋ผ ๋๊ปด์ง๋๋ค.
์๋ํ๋ฉด Go์ ์ ํ ์์คํ ์ ์ ๋ช ํ๊ณ ์๋์ ์ผ๋ก ๋จ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋ฌธ์ ๊ฐ ์๋๋ผ ๋ฌธ์ ๋ฅผ ์ํํ ์ ์๋์ง ์ฌ๋ถ์์ต๋๋ค. "๋๋ ๊ทธ๊ฒ์ ์ข์ํ์ง ์๋๋ค"๋ฅผ ์ ์ธํ๊ณ ๋๋ ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ๊ทธ๋ ์ง ์์์ง ์ ๋ง๋ก ์์ง ๋ชปํ๋ค(๋น์ ์ด ์ด์จ๋ ์ด๋ฆฐ ์ด๊ฑฐํ์ ๊ฐ์ ํ๋ค๋ฉด).
๊ทธ๋ฆฌ๊ณ Go๊ฐ ์ธ์ด ์์ฒด์ ์ฒ ํ์ ์ด๊ธ๋๋ ํ์ ์์ ์ฑ์ ๊ดํ ๋ชจ๋ ๊ฒ์ ์ดํด๋ด ๋๋ค.
Go๋ "ํ์ ์์ ์ฑ์ ๊ดํ ๋ชจ๋ ๊ฒ"์ด ์๋๋๋ค. Idris์ ๊ฐ์ ์ธ์ด๋ ๋ชจ๋ ์ ํ ์์ ์ฑ์ ๊ดํ ๊ฒ์ ๋๋ค. Go๋ ๋๊ท๋ชจ ์์ง๋์ด๋ง ๋ฌธ์ ์ ๊ดํ ๊ฒ์ด๋ฏ๋ก ํด๊ฒฐํ๋ ค๋ ๋ฌธ์ ์ ๋ฐ๋ผ ์ค๊ณ๊ฐ ์งํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํด๋น ์ ํ ์์คํ ์ API ๋ณ๊ฒฝ์ผ๋ก ์ธํ ๊ด๋ฒ์ํ ๋ฒ๊ทธ๋ฅผ ํฌ์ฐฉํ๊ณ ์ผ๋ถ ๋๊ท๋ชจ ๋ฆฌํฉํ ๋ง์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์ต์ ์ฉ์ดํ๊ฒ ํ๊ณ ์ฝ๋๋ฒ ์ด์ค์ ๋ถ์ฐ์ ์ค์ด๋ฉฐ ํ์ฌ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด ์๋์ ์ผ๋ก ๋จ์ํ๊ฒ ์ ์ง๋์์ต๋๋ค.
๋ฐ๋ผ์ ๊ด์ฌ ์๋ ์ฌ์ฉ ์ฌ๋ก(์ด๋ฆฐ ์ด๊ฑฐํ)๊ฐ ์ธ์ด ๋ณ๊ฒฝ ์์ด ์ฝ๊ฒ ์ฝ์ ์ ์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋๊ตฌ๋ก ํด๊ฒฐํ ์ ์๋ค๋ฉด Go์ ์ฒ ํ๊ณผ ๋งค์ฐ ์ผ์นํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ํนํ, ๊ธฐ์กด ๊ธฐ๋ฅ์ ํ์ ์งํฉ์ธ ์๋ก์ด ์ธ์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ Go์ ๋์์ธ๊ณผ ์ผ์นํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐ๋ณตํด์ ๋ง์๋๋ฆฌ์๋ฉด, ๊ด์ฌ ์๋ ์์ฉ๊ตฌ๋ฅผ ์์ฑํ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ๋ ๋ฐฉ๋ฒ์ ํ์ฅํ ์ ์๋ค๋ฉด ๋์์ด ๋ ๊ฒ์ ๋๋ค. .
ํ ๋ก ์์ ๋์จ ๋ช ๊ฐ์ง ์์ด๋์ด๋ฅผ ๊ฒฐํฉํ์ต๋๋ค. ์ด์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์๋์?
๋ช ๊ฐ์ง ๊ธฐ๋ณธ ์ ๋ณด:
Name()
๋ ์ด๊ฑฐํ ๋ณ์์ ์ด๋ฆ์ ๋ฐํํฉ๋๋ค.Index()
๋ ์๋์ผ๋ก ์ฆ๊ฐํ๋ ์ด๊ฑฐํ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํฉ๋๋ค. ๋ฐฐ์ด์ด ์์๋๋ ๊ณณ์์ ์์๋ฉ๋๋ค.์ํธ:
```๊ฐ๋ค
ํจํค์ง ๋ฉ์ธ
//์์ A
type Country enum[struct] { //enum์ ๋ค๋ฅธ ์ ํ์ ํ์ฅํ ์ ์์ต๋๋ค(์์ B ์ฐธ์กฐ).
Austria("AT", "Austria", false) // const์ฒ๋ผ ์ก์ธ์คํ ์ ์์ง๋ง ์ ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Germany("DE", "Germany", true) //์ ๋์ฌ(์: Country.Austria)
//The struct will automatically begin when it doesn't match the format EnumName(...) anymore
Code, CountryName string
HasMerkel bool //Totally awesome
}
// ์ด๊ฑฐํ์ ๋ค๋ฅธ ๋ชจ๋ ์ ํ๊ณผ ๊ฐ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
func(c ๊ตญ๊ฐ) test() {}
ํจ์ ๋ฉ์ธ() {
println(Country.Austria.CountryName) //์ค์คํธ๋ฆฌ์
println(๊ตญ๊ฐ.๋
์ผ.์ฝ๋) //DE
/* Prints:
Austria
0
Germany
1
*/
for name, country := range Country {
println(name) //Austria
println(name == country.Name()) //true ; also autogenerated
println(country.Index()) //Auto generated increasing index
}
}
//์์ B
์ ํ ์ฟจ๋์ค enum[int] {
์์ฃผ๋ฉ์ง(10)
์ฟจ(5)
์ฟจํ์ง ์๋ค(0)
}```
@sinnlosername ์ด๊ฑฐํ์ ๋งค์ฐ ์ดํดํ๊ธฐ ์ฌ์ด ๊ฒ์ด์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด์ ํ ๋ก ์์ ์ ์๋ ์์ด๋์ด ์ค ์ผ๋ถ๋ฅผ ๊ฒฐํฉํ๋ ๊ฒ์ด ๋ฐ๋์ ์ด๊ฑฐํ์ ๋ํ ์ต์์ ์์ด๋์ด๋ก ์ด์ด์ง๋ ๊ฒ์ ์๋๋๋ค.
๋๋ ๋ค์์ด ์ดํดํ๊ธฐ ์ฌ์ธ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค.
type Day enum {
Monday
Tuesday
...
Sunday
}
Stringer
์ธํฐํ์ด์ค ์ฌ์ฉ):func (d Day) String() string {
switch d {
case Monday:
return "mon"
case Tuesday:
return "tues"
...
case Sunday:
return "sun"
}
}
๊ฐ๋จํฉ๋๋ค. ์ด๊ฒ์ ์ด์ ์ enum์ ์ ๋ฌํ ๋ ๋ ๊ฐ๋ ฅํ ์ ํ ์์ ์ฑ์ ํ์ฉํ๋ค๋ ๊ฒ์ ๋๋ค.
func IsWeekday(d Day) bool {
return d != Saturday && d != Sunday
}
์ฌ๊ธฐ์ Day
๋ฅผ ๋ํ๋ด๊ธฐ ์ํด string
์์๋ฅผ ์ฌ์ฉํ๋ค๋ฉด IsWeekday
๋ "sat"
๋๋ "sun"
๊ฐ ์๋ ๋ชจ๋ ๋ฌธ์์ด์ด ๋ ํ์ผ์
๋๋ค(์ฆ, IsWeekday("abc")
๋ ๋ฌด์์ ๋ฐํํด์ผ ํฉ๋๊น?). ๋์กฐ์ ์ผ๋ก, ์์ ํ์๋ ํจ์์ ์์ญ์ ์ ํ๋์ด ์์ผ๋ฏ๋ก ์
๋ ฅ๊ณผ ๊ด๋ จํ์ฌ ํจ์๊ฐ ๋ ์๋ฏธ๊ฐ ์์ต๋๋ค.
@ljeabmreosn
์๋ง ๊ทธ๋์ผ ํ๋ค
func IsWeekday(d Day) bool {
return d != Day.Saturday && d != Day.Sunday
}
ํ์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ธ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด golang ํ์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ํฌ๊ธฐํ์ต๋๋ค. ๋ชจ๋ ์ฌ๋์ด Rust lang์ ์ดํด๋ณด๋ผ๊ณ ๊ถํ ์ ์์ต๋๋ค. ์ด๋ฏธ enum ๋ฐ ์ ๋ค๋ฆญ ๋ฑ๊ณผ ๊ฐ์ ์ํ๋ ๊ธฐ๋ฅ์ด ๋ชจ๋ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ 2018๋ 5์ 14์ผ์ ์์ผ๋ฉฐ enum ์ง์์ ๋ํด ์ฌ์ ํ ๋ ผ์ํ๊ณ ์์ต๋๋ค. ๋๋์ฒด ๋ฌด์์ ์๋ฏธํฉ๋๊น? ๊ฐ์ธ์ ์ผ๋ก ๊ณจ๋์ ์ค๋งํ์ต๋๋ค.
๊ธฐ๋ฅ์ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๋ต๋ตํ ์ ์๋ค๋ ์ ์ ์ดํดํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๊ฐ์ด ๊ฑด์ค์ ์ด์ง ์์ ๋๊ธ์ ๊ฒ์ํ๋ ๊ฒ์ ๋์์ด ๋์ง ์์ต๋๋ค. ๊ทํ์ ์๊ฒฌ์ ์กด์คํด ์ฃผ์ญ์์ค. https://golang.org/conduct๋ฅผ ์ฐธ์กฐํ์ธ์.
๊ฐ์ฌ ํด์.
@agnivade @rudolfschmidt ์ ๋์ํด์ผ ํฉ๋๋ค. GoLang์ ์ด๋ฌํ ๊ธฐ๋ฅ, API์ ๋ถ์กฑ ๋ฐ Go ์ ์์์ ๊ณผ๊ฑฐ ์ค์๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์์ฉํ๋ ๊ฒ์ ๋ํ ์ ํญ์ด ๋๋ฌด ๋ง๊ธฐ ๋๋ฌธ์ ๋ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ์ธ์ด๊ฐ ์๋๋๋ค. ํ์ง๋ง ์ง์ฅ์์ ์ต๊ทผ ํ๋ก์ ํธ์ ์ฌ์ฉํ ์ธ์ด์ ๋ํ ๊ฒฐ์ ๊ถ์๋ ๋ด๊ฐ ์๋์๊ธฐ ๋๋ฌธ์ ์ง๊ธ์ ์ ํ์ ์ฌ์ง๊ฐ ์์ต๋๋ค. ๊ทธ๋์ ๋๋ ๋ชจ๋ ๋จ์ ์ ๊ฐ์ง๊ณ ์ผํด์ผํฉ๋๋ค. ๊ทผ๋ฐ ์์งํ GoLang์์ ์ฝ๋์ฐ๋๊ฑฐ ๊ณ ๋ฌธ๊ฐ๋ค;-)
ํ์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ธ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด golang ํ์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ํฌ๊ธฐํ์ต๋๋ค.
์ค์ ๋ก ๋ชจ๋ ํ๋ ์ธ์ด์ ํต์ฌ ๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค. GoLang์๋ ๋ช ๊ฐ์ง ์ข์ ๊ธฐ๋ฅ์ด ์์ง๋ง ํ๋ก์ ํธ๊ฐ ๋ณด์์ ์ด๋ผ๋ฉด ์ด์๋จ์ง ๋ชปํ ๊ฒ์ ๋๋ค. ์ด๊ฑฐํ์ด๋ ์ ๋ค๋ฆญ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ข์ํ์ง ์๋ ์ฌ๋๋ค์๊ฒ๋ ๋จ์ ์ด ์์ง๋ง ์ฌ์ฉํ๋ ค๋ ์ฌ๋๋ค์๊ฒ๋ ๋ง์ ์ด์ ์ด ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ "ํ์ง๋ง ๋จ์ํ๊ฒ ์ง๋ด๊ณ ์ถ์ด"๋ผ๊ณ ๋งํ์ง ๋ง์ธ์. "๋จ์ํ" ๊ฒ๊ณผ "์ค์ ๊ธฐ๋ฅ์ด ์๋ ๊ฒ" ์ฌ์ด์๋ ํฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค. Java๋ ๋งค์ฐ ๊ฐ๋จํ์ง๋ง ๋ง์ ๊ธฐ๋ฅ์ด ๋๋ฝ๋์์ต๋๋ค. ๋ฐ๋ผ์ Java ๊ฐ๋ฐ์๊ฐ ๋ง๋ฒ์ฌ์ด๊ฑฐ๋ ์ด ์ธ์๊ฐ ์๋ชป๋์์ต๋๋ค.
์ค์ ๋ก ๋ชจ๋ ํ๋ ์ธ์ด์ ํต์ฌ ๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค.
ํ์ ํ๋. ์ด๋ฌํ ํต์ฌ ๊ธฐ๋ฅ์ ํ๋ง ์์ ์ฑ์ด๋ผ๊ณ ํฉ๋๋ค. _๋ชจ๋ ๊ฒ_์ ๋์์ธ ์ ํ์ ๋๋ค. Turing ์์ ์ฑ๊ณผ C++(์:) ์ฌ์ด์๋ ๋ง์ ๊ณต๊ฐ์ด ์์ผ๋ฉฐ ๊ทธ ๊ณต๊ฐ์์ ๋ง์ ์ธ์ด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ๋ถํฌ๋ ์ ์ญ ์ต์ ๊ฐ์ด ์กด์ฌํ์ง ์์์ ๋ํ๋ ๋๋ค.
GoLang์๋ ๋ช ๊ฐ์ง ์ข์ ๊ธฐ๋ฅ์ด ์์ง๋ง ํ๋ก์ ํธ๊ฐ ๋ณด์์ ์ด๋ผ๋ฉด ์ด์๋จ์ง ๋ชปํ ๊ฒ์ ๋๋ค.
ํน์. ์ง๊ธ๊น์ง ๊ณ์ ์ฑ์ฅํ๊ณ ์์ต๋๋ค. IMO, ๋ณด์์ ์ด์ง ์์๋ค๋ฉด ์ฌ์ ํ ์ฑ์ฅํ์ง ์์์ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ์ ์๊ฒฌ์ ๋ชจ๋ ์ฃผ๊ด์ ์ด๋ฉฐ ๊ธฐ์ ์ ์ผ๋ก ๊ทธ๋ค์ง ๊ฐ์น๊ฐ ์์ต๋๋ค. ๊ท์น์ ์ ํ๋ ๊ฒ์ ๋์์ด๋์ ๊ฒฝํ๊ณผ ์ทจํฅ์ ๋๋ค. ๋ค๋ฅธ ์๊ฒฌ์ ๊ฐ๋ ๊ฒ์ ๊ด์ฐฎ์ง๋ง ๋์์ด๋๊ฐ ์๊ฒฌ์ ๊ณต์ ํ ๊ฒ์ด๋ผ๊ณ ๋ณด์ฅํ ์๋ ์์ต๋๋ค.
BTW, ๋ง์ฝ ์ฌ๋๋ค์ด ์๊ตฌํ๋ ๊ธฐ๋ฅ์ 10%๊ฐ ์ฑํ๋๋ค๋ฉด ์ค๋๋ ๋ฐ๋์ด ์ด๋จ์ง ์์ํ๋ค๋ฉด ์ง๊ธ์ฏค์ด๋ฉด ๋ฐ๋์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋๋ค.
์ฌ์ค ๋น์ ์ ๋ด ๋๋ต์ ๊ฐ์ฅ ์ค์ํ ๋ ผ๊ฑฐ๋ฅผ ๋์ณค์ต๋๋ค. ๊ทธ๊ฒ์ ์ด๋ฏธ ๋น์ ์ด ๋งํ ๊ฒ๋ค ์ค ์ผ๋ถ์ ๋ฐ๋์ด๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค.
"์ด๊ฑฐํ์ด๋ ์ ๋ค๋ฆญ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ข์ํ์ง ์๋ ์ฌ๋๋ค์๊ฒ๋ ๋จ์ ์ด ์์ง๋ง ์ฌ์ฉํ๋ ค๋ ์ฌ๋๋ค์๊ฒ๋ ๋ง์ ์ด์ ์ด ์์ต๋๋ค."
๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๋ณด์์ฑ์ด ๊ณจ๋ ์ฑ์ฅ์ ์์ธ์ด๋ผ๊ณ ์๊ฐํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋๋ ์ด๊ฒ์ด golang์ ํจ์จ์ฑ๊ณผ ํ๋ฅญํ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธํธ์ ๊ด๋ จ์ด ์์ ๊ฐ๋ฅ์ฑ์ด ๋ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ํ Java๋ Java 9์์ ์ค์ํ ์ฌํญ์ ๋ณ๊ฒฝํ๋ ค๊ณ ํ ๋ ์ผ์ข ์ "์ถฉ๋"์ ๊ฒฝํํ๋๋ฐ, ์ด๋ก ์ธํด ๋ง์ ์ฌ๋๋ค์ด ๋์์ ์ฐพ๋๋ก ํ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด ์ถฉ๋์ด ๋ฐ์ํ๊ธฐ ์ ์ Java๋ฅผ ์ดํด๋ณด์ญ์์ค. ๊ฐ๋ฐ์์ ์ถ์ ๋ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๊ธฐ๋ฅ์ด ์ ์ ๋ ๋ง์์ง๊ธฐ ๋๋ฌธ์ ์ง์์ ์ผ๋ก ์ฑ์ฅํ์ต๋๋ค.
"์ด๊ฑฐํ์ด๋ ์ ๋ค๋ฆญ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ข์ํ์ง ์๋ ์ฌ๋๋ค์๊ฒ๋ ๋จ์ ์ด ์์ง๋ง ์ฌ์ฉํ๋ ค๋ ์ฌ๋๋ค์๊ฒ๋ ๋ง์ ์ด์ ์ด ์์ต๋๋ค."
๊ทธ๊ฒ์ ๋งค์ฐ ๋ช ๋ฐฑํ๊ฒ ์ฌ์ค์ด ์๋๋๋ค. ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ฒฐ๊ตญ ๋ด๊ฐ ๊ฐ์ ธ์ค๋ ค๋ stdlib ๋ฐ/๋๋ ํจํค์ง์ ํฌํจ๋ฉ๋๋ค. _๋ชจ๋ ์ฌ๋_์ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ข๋ ์ซ๋ ์๊ด์์ด ์ ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
์ง๊ธ๊น์ง ๊ณ์ ์ฑ์ฅํ๊ณ ์์ต๋๋ค. IMO, ๋ณด์์ ์ด์ง ์์๋ค๋ฉด ์ฌ์ ํ ์ฑ์ฅํ์ง ์์์ ๊ฒ์ ๋๋ค.
๋๋ฆฐ ์ฑ์ฅ(์๋ ๊ฒฝ์ฐ)์ด ๋ณด์์ฑ ๋๋ฌธ์ด ์๋๋ผ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ด๋ฏธ ์กด์ฌํ๋ ์ธ์ด ๊ธฐ๋ฅ ์ธํธ, ๋๊ตฌ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๊ฒ์ด ๋๋ฅผ ์ฌ๊ธฐ๋ก ๋ฐ๋ ค์จ ๊ฒ์ด๋ค. ์ธ์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํด๋ ๊ทธ๋ฐ ์ ์์ ์ ์๊ฒ๋ ์๋ฌด ๊ฒ๋ ๋ฐ๋์ง ์์ ๊ฒ์ ๋๋ค.
C#๊ณผ Typescript ๋๋ ์ฌ์ง์ด Rust/Swift๋ฅผ ๋ณด๋ฉด. ๊ทธ๋ค์ ๋ฏธ์น ๊ฐ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์์ต๋๋ค. C#์ ์ฌ์ ํ โโ์์๋๋ก ๋ณ๋ํ๋ ์์ ์ธ์ด์ ๋๋ค. Typescript๋ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๊ณ ์์ต๋๋ค. Rust/Swift๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๋ฐ๋ฉด ๋ฐ๋์ 2009๋ ๊ณผ 2016๋ ์ ํญ๋ฐ์ ์ธ ์ธ๊ธฐ๋ฅผ ์ป์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ ์ฌ์ด์๋ ์ ํ ์ฑ์ฅํ์ง ์์๊ณ ์ค์ ๋ก ์์ค๋์์ต๋๋ค. Go์ ๋ํด ์ด๋ฏธ ์๊ณ ์๊ณ ์ด๋ค ์ด์ ๋ก ๋ ์ผ์ฐ ์ ํํ์ง ์์ ๊ฒฝ์ฐ Go๋ ์๋ก์ด ๊ฐ๋ฐ์์๊ฒ ์ค ๊ฒ์ด ์์ต๋๋ค. Go์ ๋์์ธ์ด ์ ์ฒด๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ค๋ฅธ ์ธ์ด๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ค๋ฅธ ํ ์ผ์ด ์๊ธฐ ๋๋ฌธ์ด ์๋๋ผ ์ค์ ์ฌ์ฉ์ ๊ธฐ๋ฐ์์ ์๊ตฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฌ๋๋ค์ ์ฝ๋ ๊ธฐ๋ฐ์ด ๋์์์ด ๋ณํํ๋ ๋ฌธ์ ์์ญ์์ ๊ด๋ จ์ฑ์ ์ ์งํ๊ธฐ ์ํด ์๋ก์ด ๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค. async/await์ฒ๋ผ. ์ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ํ์ํ์ต๋๋ค. ์ด์ ๋ง์ ์ธ์ด๋ก ๋ณผ ์ ์๋ค๋ ๊ฒ์ ๋๋ผ์ด ์ผ์ด ์๋๋๋ค.
๊ฒฐ๊ตญ์๋ Go 2๊ฐ ์์ ๊ฒ์ด๋ฉฐ ๋ง์ ์๋ก์ด ๊ฐ๋ฐ์๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒ์ด๋ผ๊ณ ์ ๋์ ์ผ๋ก ํ์ ํ ์ ์์ต๋๋ค. ์๋กญ๊ณ ๋น๋๊ธฐ ๋๋ฌธ์ด ์๋๋ผ ์๋ก์ด ๊ธฐ๋ฅ์ผ๋ก ์ธํด ๋๊ตฐ๊ฐ๊ฐ ๋ง์นจ๋ด ์ ํํ๊ฑฐ๋ ์ฌ์ฉํด ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ณด์๊ฐ ๊ทธ๋ ๊ฒ ์ค์ํ๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ด๋ฌํ ์ ์์ ํ์ ๊ฒ์ ๋๋ค.
๋๋ฆฐ ์ฑ์ฅ(์๋ ๊ฒฝ์ฐ)์ด ๋ณด์์ฑ ๋๋ฌธ์ด ์๋๋ผ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ด๋ฏธ ์กด์ฌํ๋ ์ธ์ด ๊ธฐ๋ฅ ์ธํธ, ๋๊ตฌ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๊ฒ์ด ๋๋ฅผ ์ฌ๊ธฐ๋ก ๋ฐ๋ ค์จ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋ณด์์ ์ธ ํ๋์ ๊ฒฐ๊ณผ์ ๋๋ค. ์ธ์ด๊ฐ [๋ฐ]๋ ์ ๋๋ง๋ค ๋ฌด์ธ๊ฐ/๋ชจ๋ ๊ฒ์ ๋ง๊ฐ๋จ๋ฆฐ๋ค๋ฉด, ๋น์ ์ด ๊ทธ๊ฒ์ ๊ฐ์ ธ์ค๋ ์ฌ๋์ด ํจ์ฌ ๋ ์ ๊ธฐ ๋๋ฌธ์ ๋น์ ์ด ๋ฐ๋์ ๋ํด ๋น์ ์ด ๊ฐ์น ์๋ค๊ณ ๋งํ๋ ๊ฒ์ ์๋ฌด๊ฒ๋ ํ์ง ์์ ๊ฒ์ ๋๋ค.
์ธ์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํด๋ ๊ทธ๋ฐ ์ ์์ ์ ์๊ฒ๋ ์๋ฌด ๊ฒ๋ ๋ฐ๋์ง ์์ ๊ฒ์ ๋๋ค.
๋น์ ์ ๊ทธ๊ฒ์ ๋ํด ํ์ ํฉ๋๊น? ์ ์ฐธ์กฐ.
BTW, 2017 ์ค๋ฌธ ์กฐ์ฌ ๊ฒฐ๊ณผ ๋ฅผ ๋ณด์ จ์ต๋๊น?
์ธ์ด๊ฐ [๋ฐ]๋ ์ ๋๋ง๋ค ๋ฌด์ธ๊ฐ/๋ชจ๋ ๊ฒ์ ๊นจ๋จ๋ฆฌ๋ฉด
๊ทธ๋ฐ ๋ค์ ์๋ฌด๊ฒ๋ ๋ถ์์ง ๋ง์ญ์์ค. C#์ ์๋ง์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ผ๋ฉฐ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์๋ฐํ ์ ์ด ์์ต๋๋ค. ๊ทธ๋ค์๊ฒ๋ ์ ํ์ง๊ฐ ์๋๋๋ค. C++๋ ๋ง์ฐฌ๊ฐ์ง๋ผ๊ณ ์๊ฐํฉ๋๋ค. Go๊ฐ ๋ฌด์ธ๊ฐ๋ฅผ ์ค๋จํ์ง ์๊ณ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ค๋ฉด Go์ ๋ฌธ์ ๊ฐ ์๊ณ ์๋ง๋ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค.
BTW, 2017 ์ค๋ฌธ ์กฐ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ จ์ต๋๊น?
๋ด ์๊ฒฌ์ 2017/2018 ์ค๋ฌธ ์กฐ์ฌ, TIOBE ์ง์ ๋ฐ ๋ค์ํ ์ธ์ด๋ก ์งํ๋๋ ์ํฉ์ ๋ํ ์ผ๋ฐ์ ์ธ ๊ด์ฐฐ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
@cznic
๋ชจ๋๊ฐ ๊ทธ๊ฒ๋ค์ ๋ค๋ฃจ์ด์ผ ํ์ง๋ง ๋น์ ์ ๊ทธ๊ฒ๋ค์ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค. iota ์ด๊ฑฐํ ๋ฐ ๋งต์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ ํธํ๋ ๊ฒฝ์ฐ์๋ ์ด ์์
์ ์ํํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ค๋ฆญ์ด ๋ง์์ ๋ค์ง ์๋๋ค๋ฉด ์ ๋ค๋ฆญ์ด ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ญ์์ค. Java๋ ๋ ๋ค ๊ฐ์ง ์ ์์์ ์ฆ๋ช
ํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์๋ฌด๊ฒ๋ ๋ถ์์ง ๋ง์ญ์์ค.
์ข์ ์๊ฐ. ๊ทธ๋ฌ๋ ์ ์๋ ์ธ์ด ๋ณ๊ฒฝ์ ๋๋ถ๋ถ์ ์๋์ง๋ผ๋ _์ด๊ฒ๋ง ํฌํจํ์ฌ_ ๋ง์ ๋ถ๋ถ์ด ๋ณ๊ฒฝ ์ฌํญ์ ๊นจ๊ณ ์์ต๋๋ค.
C#์ ์๋ง์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ผ๋ฉฐ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์๋ฐํ ์ ์ด ์์ต๋๋ค.
์ฌ์ค์ ํ์ธํ์ญ์์ค: Visual C# 2010 ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ . (์ฒซ ๋ฒ์งธ ์น ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์ ์ผํ ์์ธ์ง ์๋์ง ์ง์ํ ์ ์์ต๋๋ค.)
๋ด ์๊ฒฌ์ 2017/2018 ์ค๋ฌธ ์กฐ์ฌ, TIOBE ์ง์ ๋ฐ ๋ค์ํ ์ธ์ด๋ก ์งํ๋๋ ์ํฉ์ ๋ํ ์ผ๋ฐ์ ์ธ ๊ด์ฐฐ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ค๋ฌธ ์กฐ์ฌ ๊ฒฐ๊ณผ ์๋ต์ ์๊ฐ ๋งค๋ 70%์ฉ ์ฆ๊ฐํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ๋๋ฐ ์ธ์ด๊ฐ ์ฆ๊ฐํ์ง ์๋ ๊ฒ์ ์ด๋ป๊ฒ ์ ์ ์์ต๋๊น?
"๋ธ๋ ์ดํน ์ฒด์ธ์ง"๋ฅผ ์ด๋ป๊ฒ ์ ์ํฉ๋๊น? ๋ชจ๋ go ์ฝ๋ ์ค์ ์ด๊ฑฐํ์ด๋ ์ ๋ค๋ฆญ์ ์ถ๊ฐํ ํ์๋ ๊ณ์ ์๋ํฉ๋๋ค.
๋ชจ๋๊ฐ ๊ทธ๊ฒ๋ค์ ๋ค๋ฃจ์ด์ผ ํ์ง๋ง ๋น์ ์ ๊ทธ๊ฒ๋ค์ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค. iota ์ด๊ฑฐํ ๋ฐ ๋งต์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ ํธํ๋ ๊ฒฝ์ฐ์๋ ์ด ์์ ์ ์ํํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ค๋ฆญ์ด ๋ง์์ ๋ค์ง ์๋๋ค๋ฉด ์ ๋ค๋ฆญ์ด ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ญ์์ค. Java๋ ๋ ๋ค ๊ฐ์ง ์ ์์์ ์ฆ๋ช ํฉ๋๋ค.
๋์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ ๋ค๋ฆญ๊ณผ ๊ฐ์ ์ธ์ด๊ฐ ๋์ค๋ฉด ๋ด๊ฐ ์ฌ์ฉํ์ง ์๋๋ผ๋ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ๋ ๊ฒ์ ๋๋ค. ๋ด๋ถ์ ์ผ๋ก API๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ๊ฒฝ์ฐ์๋. ๊ทธ ๊ฒฐ๊ณผ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ์ ๋น๋ ์๋๋ฅผ ๋ฆ์ถ์ง ์๊ณ ๋ ์ ๋ค๋ฆญ์ ์ธ์ด์ ์ถ๊ฐํ ๋ฐฉ๋ฒ์ด ํ์คํ ์๊ธฐ ๋๋ฌธ์ ์ ๋ค๋ฆญ์ ์ํฅ์ ๋ง์ด ๋ฐ์ต๋๋ค. ์ผ๋ช "๊ณต์ง ์ ์ฌ ์์".
"๋ธ๋ ์ดํน ์ฒด์ธ์ง"๋ฅผ ์ด๋ป๊ฒ ์ ์ํฉ๋๊น? ๋ชจ๋ go ์ฝ๋ ์ค์ ์ด๊ฑฐํ์ด๋ ์ ๋ค๋ฆญ์ ์ถ๊ฐํ ํ์๋ ๊ณ์ ์๋ํฉ๋๋ค.
๋น์ฐํ ์๋์ง. ์ด ์ฝ๋๋ ์ด ์ ์์ผ๋ก ๋ ์ด์ ์ปดํ์ผ๋์ง ์์ต๋๋ค.
package foo
var enum = 42
ํ์ํ๋ค๋ ๋จ์ด๋ "๋ด๊ฐ ์ํ๋ ๊ฒ"์ ์๋ฏธํ์ง ์์ต๋๋ค.
๋ฌผ๋ก , ๊ทธ๊ฒ์ ์๋ฏธํ์ง ์์ผ๋ฉฐ, ๋๋ ๊ฒฐ์ฝ ๊ทธ๊ฒ์ ์๋ฏธํ์ง ์์ต๋๋ค. ๋ฌผ๋ก ๊ทธ๋ฐ ๊ธฐ๋ฅ์ ํ์์๋ค๊ณ ๋๋ตํ ์ ์์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ํ์ํ ๊ฒ๋ง ๋๋ตํ ์ ์์ต๋๋ค. ์๋ฌด๊ฒ๋ ํ์ํ์ง ์์ผ๋ฉฐ ํ๊ณผ ์ข ์ด๋ก ๋์๊ฐ ์ ์์ต๋๋ค.
Golang์ ๋๊ท๋ชจ ํ์ ์ํ ์ธ์ด๋ผ๊ณ ์ฃผ์ฅํฉ๋๋ค. golang์ ์ฌ์ฉํ์ฌ ๋๊ท๋ชจ ์ฝ๋ ๊ธฐ๋ฐ์ ๊ฐ๋ฐํ ์ ์๋์ง ํ์คํ์ง ์์ต๋๋ค. ์ด๋ฅผ ์ํด ๊ฐ๋ฅํ ํ ๋ฐํ์ ์ค๋ฅ๋ฅผ ํผํ๊ธฐ ์ํด ์ ์ ์ปดํ์ผ ๋ฐ ์ ํ ๊ฒ์ฌ๊ฐ ํ์ํฉ๋๋ค. ์ด๊ฑฐํ๊ณผ ์ ๋ค๋ฆญ ์์ด ์ด๋ป๊ฒ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๊น? ์ด๋ฌํ ๊ธฐ๋ฅ์ ํ๋ คํ๊ฑฐ๋ ์ข์ ๊ฒ์ ์๋์ง๋ง ์ง์งํ ๊ฐ๋ฐ์ ์ ๋์ ์ผ๋ก ํ์ํ ๊ธฐ๋ฅ์ ๋๋ค. ์ธํฐํ์ด์ค๊ฐ ์์ผ๋ฉด ๋ชจ๋ ๊ณณ์์{} ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ์ฝ๋์์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ{} ๋ฐ์ดํฐ ์ ํ์ ๊ฐ๋ ๊ฒ์ด ๋ฌด์จ ์๋ฏธ๊ฐ ์์ต๋๊น?
๋ฌผ๋ก ์ ํ์ ์ฌ์ง๊ฐ ์๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฏธ ๋ชจ๋ ๊ฒ์ ์ ๊ณตํ๊ณ golang๋ณด๋ค ํจ์ฌ ๋ ๋น ๋ฅธ ์คํ์ ์ ๊ณตํ๋ Rust์ ๊ฐ์ ๋์์ด ์๋ค๋ฉด ์ ์ ํํด์ผ ํฉ๋๊น? go๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ฌ๊ณ ๋ฐฉ์์ ๊ฐ์ง ๋ฏธ๋๊ฐ ์๋์ง ์ ๋ง ๊ถ๊ธํฉ๋๋ค.
ํ์ํ๋ค๋ ๋จ์ด๋ "๋ด๊ฐ ์ํ๋ ๊ฒ"์ ์๋ฏธํ์ง ์์ต๋๋ค.
๋๋ ์คํ ์์ค์ ๋ํ ๋ชจ๋ ๊ธฐ์ฌ๋ฅผ ์กด์คํ๋ฉฐ golang์ด ์ทจ๋ฏธ ํ๋ก์ ํธ๋ผ๋ฉด ์ด๋ค ๊ฒ์ด๋ ๊ด์ฐฎ์ง๋ง golang์ ์ง์งํ๊ฒ ๋ฐ์๋ค์ด๊ธฐ๋ฅผ ์ํ๋ฉฐ ํ์ฌ๋ก์๋ ์ง๋ฃจํ ๊ฐ๋ฐ์๋ฅผ ์ํ ์ฅ๋๊ฐ์ ๊ฐ๊น๊ณ ๊ทธ๊ฒ์ ๋ณ๊ฒฝํ ์์ง๊ฐ ๋ณด์ด์ง ์์ต๋๋ค.
api๋ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ผ๋ฉฐ ์๋ก์ด api ๋ถ๋ถ๋ง ์ ๋ค๋ฆญ์ ์ฌ์ฉํ ์ ์์ง๋ง ์ธํฐ๋ท์๋ ์ ๋ค๋ฆญ์ด ์๋ ๋์์ด ํญ์ ์์ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๋ค ์ฝ๊ฐ ๋๋ฆฐ ์ปดํ์ผ๊ณผ "enum"์ด๋ผ๋ ๋ณ์๊ฐ ์ต์ํ์ ํจ๊ณผ์ ๋๋ค. ์ค์ ๋ก 99%์ ์ฌ๋๋ค์ ์์์ฐจ๋ฆฌ์ง๋ ๋ชปํ๊ณ ๋๋จธ์ง 1%๋ ๊ฒฌ๋ ์ ์๋ ์ฝ๊ฐ์ ์์ ๋ณํ๋ง ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค. ์ด๊ฒ์ ์๋ฅผ ๋ค์ด ์๋ฐ์ ํผ์ฆ๊ณผ ๋น๊ตํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๋ค ์ฝ๊ฐ ๋๋ฆฐ ์ปดํ์ผ๊ณผ "enum"์ด๋ผ๋ ๋ณ์๊ฐ ์ต์ํ์ ํจ๊ณผ์ ๋๋ค. ์ค์ ๋ก 99%์ ์ฌ๋๋ค์ ์์์ฐจ๋ฆฌ์ง๋ ๋ชปํ๊ณ ๋๋จธ์ง 1%๋ ๊ฒฌ๋ ์ ์๋ ์ฝ๊ฐ์ ์์ ๋ณํ๋ง ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
๋๊ตฐ๊ฐ๊ฐ ๊ทธ๋ฐ ๋ฉ์ง ์ฑ๋ฅ์ ๊ฐ์ง ๋์์ธ๊ณผ ๊ตฌํ์ ๊ฐ์ง๊ณ ์ฌ ์ ์๋ค๋ฉด ๋ชจ๋๊ฐ ๊ธฐ๋ปํ ๊ฒ์ ๋๋ค. #15292์ ๊ธฐ์ฌํด ์ฃผ์ธ์.
๊ทธ๋ฌ๋ ์ด๊ฒ์ด "๋ฐฑํน ๋ฐ์ดํฐ๊ฐ ์ ํ์๋ ๋ด ํธ์๋ก ์ซ์ ๋ฝ๊ธฐ"๋ผ๋ ๊ฒ์์ด๋ผ๋ฉด ์ฃ์กํ์ง๋ง ์ฐธ์ฌํ์ง ์์ต๋๋ค.
์ ๋ค๋ฆญ๊ณผ์ ์๋ ์ฐจ์ด์ ๋ํ ์์น๊ฐ ์์ต๋๊น?
๊ทธ๋ฆฌ๊ณ ๋ค, ๊ทธ ์ซ์๋ค์ ์ด๋ค ๋ฐ์ดํฐ๋ก๋ ๋ท๋ฐ์นจ๋์ง ์์ต๋๋ค. ์๋ํ๋ฉด ๊ทธ๊ฒ๋ค์ ๋จ์ง "์ด๊ฑฐํ"์ด๋ผ๋ ๋ณ์๋ฅผ ๊ฐ์ง ํ๋ฅ ์ด ๊ทธ๋ฆฌ ๋์ง ์๋ค๋ ๊ฒ์ ๋งํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๊ฑฐํ์ Go์ ์ถ๊ฐํ ์ง ์ฌ๋ถ์ ๋ฐฉ๋ฒ์ ๋ํ ํน์ ์ง๋ฌธ์ ๋ํด ์ด ํธ๋ฅผ ๊ตฌ๋ ํ๋ ์ฌ๋๋ค์ด ๋ง๋ค๋ ๊ฒ์ ๋ชจ๋์๊ฒ ์๊ธฐ์ํค๊ณ ์ถ์ต๋๋ค. "๋ฐ๋์ ์ข์ ์ธ์ด์ ๋๊น?"์ ๋ํ ์ผ๋ฐ์ ์ธ ์ง๋ฌธ์ ๋๋ค. "Go๊ฐ ๊ธฐ๋ฅ ์ ๊ณต์ ๋ ์ง์คํด์ผ ํฉ๋๊น?" ๋ค๋ฅธ ํฌ๋ผ์์ ๋ ์ ๋ ผ์๋ ๊ฒ์ ๋๋ค.
์ ๋ค๋ฆญ๊ณผ์ ์๋ ์ฐจ์ด์ ๋ํ ์์น๊ฐ ์์ต๋๊น?
์๋, ๊ทธ๋์ ๋ด๊ฐ ์๋ฌด ๊ฒ๋ ๊ฒ์ํ์ง ์์์ต๋๋ค. ๋๋ ๋จ์ง ๋น์ฉ์ด 0์ด ๋ ์ ์๋ค๊ณ ๊ฒ์ํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค, ๊ทธ ์ซ์๋ค์ ์ด๋ค ๋ฐ์ดํฐ๋ก๋ ๋ท๋ฐ์นจ๋์ง ์์ต๋๋ค. ์๋ํ๋ฉด ๊ทธ๊ฒ๋ค์ ๋จ์ง "์ด๊ฑฐํ"์ด๋ผ๋ ๋ณ์๋ฅผ ๊ฐ์ง ํ๋ฅ ์ด ๊ทธ๋ฆฌ ๋์ง ์๋ค๋ ๊ฒ์ ๋งํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์์ธ ๊ฒ์ ๋๋ค. ๊ฐ์์ ์ ๋ค๋ฆญ์ ๊ดํ ๊ฒ์ด์์ต๋๋ค. "enum"์ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๊ดํ ๊ฒ์ด๊ณ false "_Every_ go ์ฝ๋ ์ค์ ์ด๊ฑฐํ์ด๋ ์ ๋ค๋ฆญ์ ์ถ๊ฐํ ํ์๋ ๊ณ์ ์๋ํฉ๋๋ค." ์ฃผ์ฅํ๋ค. (๋๋ฅผ ๊ฐ์กฐํ๋ค)
@Merovius ๋น์ ๋ง์ด ๋ง์์, ์ด์ ์ ๋ค๋ฌผ๊ฒ ์ต๋๋ค.
์ด๊ฒ์ ์ด ๋ฌธ์ ์ ์ฃผ์ ์ธ ์ด๊ฑฐํ ์ ํ์ผ๋ก ๋ค์ ๊ฐ์ ธ์ค๋ฉด Go์ ์ ๋ค๋ฆญ์ด ํ์ํ ์ด์ ์ ๋ํ ์ฃผ์ฅ์ ์์ ํ ์ดํดํ์ง๋ง Go์ ์ด๊ฑฐํ ์ ํ์ด ํ์ํ ์ด์ ์ ๋ํ ์ฃผ์ฅ์ ๋ํด์๋ ํจ์ฌ ๋ ๋ถ์์ ํฉ๋๋ค. ์ฌ์ค, ์์ https://github.com/golang/go/issues/19814#issuecomment -290878151์์ ์ง๋ฌธํ๋๋ฐ ์ฌ์ ํ ๋ถ์ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ํ ์ข์ ๋๋ต์ด ์์๋ค๋ฉด ๋๋ ๊ทธ๊ฒ์ ๋์ณค์ต๋๋ค. ๋๊ตฐ๊ฐ ๊ทธ๊ฒ์ ๋ฐ๋ณตํ๊ฑฐ๋ ์ง์ ํ ์ ์์ต๋๊น? ๊ฐ์ฌ ํด์.
@ianlancetaylor ๋๋ ์ ์ค ์ผ์ด์ค๊ฐ ๋ณต์กํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ฐ์ด ๋ฏธ๋ฆฌ ์ ์๋ ๊ฐ ์ธํธ์ ์ํ๋๋ก ํ๋ ์์ ํ ์ ํ์ ๋ฐฉ๋ฒ์ ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ ์ค๋๋ Go์์๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ ์ผํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ณธ์ง์ ์ผ๋ก ์ ๋ขฐํ ์ ์๋ RPC ๋ฐ ํจ์ ํธ์ถ์ ํฌํจํ์ฌ ์ฝ๋์ ๋ํ ๋ชจ๋ ๊ฐ๋ฅํ ์ง์ ์ ์์ ์๋์ผ๋ก ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ณต์ ์ํ ๋ค๋ฅธ ๊ตฌ๋ฌธ์์ ์ฅ์ ์ ๋ง์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ ์ฝ๊ฒ ๋ง๋ญ๋๋ค. ๊ฐ์น๊ฐ ์๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋์ง ์ฌ๋ถ๋ ์ฃผ๊ด์ ์ด๊ณ ๋ถ๋ช ํ ์์ ์ฃผ์ฅ ์ค ์ด๋ ๊ฒ๋ ๊ทธ ํ์ ๋ํด ์ค๋๋ ฅ์ด ์์๊ธฐ ๋๋ฌธ์ ๋ณธ์ง์ ์ผ๋ก ์ธ์ด ์์ค์์ ํด๊ฒฐ๋๋ ๊ฒ์ ํฌ๊ธฐํ์ต๋๋ค.
@ianlancetaylor : ๋ชจ๋ ๊ฒ์ ์ ํ ์์ ์ฑ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ์ ํ์ ์ฌ์ฉํ์ฌ ์คํ๋ก ์ธํ ๋ฐํ์ ์ค๋ฅ์ ์ํ์ ์ต์ํํ๊ฑฐ๋ ํธํ๋์ง ์๋ ์ ํ์ ์ฌ์ฉํฉ๋๋ค. ํ์ฌ go์์ ์ธ ์ ์์ต๋๋ค.
if enumReference == 1
ํ์ฌ ์ด๊ฑฐํ์ ์ซ์ ๋๋ ๊ธฐํ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ํ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํด๋น ์ฝ๋๋ ์ ํ ๊ฐ๋ฅํ์ง ์์์ผ ํ๋ฉฐ ํผํด์ผ ํฉ๋๋ค. ๋ช ๋ ์ ์ Java ์ปค๋ฎค๋ํฐ์์ ํ๋ ๊ฒ๊ณผ ๋์ผํ ํ ๋ก ์ด ๊ทธ๋ค์ด ์ค์์ฑ์ ์ดํดํ๊ธฐ ๋๋ฌธ์ ์ด๊ฑฐํ์ ๋์ ํ ์ด์ ์ ๋๋ค.
๋ง ์ธ ์ ์์ด์ผ ํฉ๋๋ค.
if enumReference == enumType
if enumReference == 1
๊ฐ ๋ ์จ๊ฒจ์ง ๋ฐฉ์์ผ๋ก ๋ฐ์ํ๊ณ ๋ฐํ์์๋ง ๋ณผ ์ ์๋ ์ถ๊ฐ ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์๋ ์๋๋ฆฌ์ค๋ฅผ ์์ํ๋ ๋ฐ ๋๋ฌด ๋ง์ ํ์์ด ํ์ํ์ง ์์ต๋๋ค.
๋๋ ๋จ์ง ์ธ๊ธํ๊ณ ์ถ๋ค: Go๋ ๊ทธ๊ฒ์ ์ ์ฌ๋ ฅ์ ๊ฐ์ง๊ณ ์์ง๋ง, ๋น์ ์ด ํ๋ก๊ทธ๋๋ฐ์ ์๋ก์ด ๊ฐ๋ ์ด๋ ํจ๋ฌ๋ค์์ ๋ํด ๋ ผ์ํ๋ ๊ฒ์ฒ๋ผ ์ฌ๊ธฐ์์ ์๋ ๋์ ์ ์ฆ๋๊ณ ์ดํด๋ ๊ฒ๋ค๊ณผ ๊ฐ๋ ์ด ๋ ผ์๋๋ค๋ ๊ฒ์ด ์ด์ํฉ๋๋ค. ์ ํ ์์ ์ฑ์ ๋ณด์ฅํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์ด๊ฑฐํ๋ณด๋ค ๋ ๋์ ๊ฒ์ด ์์ ์ ์์ง๋ง ๋๋ ๊ทธ๊ฒ์ ๋ณด์ง ๋ชปํฉ๋๋ค.
Go๋ ์ ์ฌ๋ ฅ์ด ์์ง๋ง ํ๋ก๊ทธ๋๋ฐ์ ์๋ก์ด ๊ฐ๋ ์ด๋ ํจ๋ฌ๋ค์์ ๋ํด ๋ ผ์ํ๋ ๊ฒ์ฒ๋ผ ์ฌ๊ธฐ์์ ์๋ ๋์ ์ ์ฆ๋๊ณ ์ดํด๋ ๊ฒ๋ค๊ณผ ๊ฐ๋ ์ด ๋ ผ์๋๋ค๋ ๊ฒ์ด ์ด์ํฉ๋๋ค.
Afais, ํนํ ์ ๋ค๋ฆญ, ํฉ๊ณ ์ ํ ๋ฑ์ ๋ํ ๋ค๋ฅธ ํ ๋ก ์ ๋ฐ๋ฅด๋ ๋์... ๊ทธ๊ฒ์ ๋ณด์ ์ฌ๋ถ๊ฐ ์๋๋ผ ๊ตฌํ ๋ฐฉ๋ฒ์ ๊ดํ ๊ฒ์ ๋๋ค. Javas ์ ํ ์์คํ ์ ํ์ฅ์ฑ์ด ๋ฐ์ด๋๊ณ ์ฌ์์ด ์ ์ง์ ๋์ด ์์ต๋๋ค. ๊ทธ๊ฒ์ ํฐ ์ฐจ์ด์ ๋๋ค.
Go์์ ์ฌ๋๋ค์ ์ปดํ์ผ๋ฌ์ ๋ณต์ก์ฑ์ ์ฆ๊ฐ์ํค์ง ์์ผ๋ฉด์ ์ธ์ด์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ผ๋ ค๊ณ ํฉ๋๋ค. ๊ทธ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์ ์๋ํ์ง ์์ผ๋ฉฐ ์ด๊ธฐ ์์ด๋์ด๋ฅผ ํฌ๊ธฐํ๊ฒ ๋ง๋ญ๋๋ค.
๋ ์ญ์ ์ด๋ฌํ ์ฐ์ ์์๊ฐ ํ์ฌ์ ํ์๊ณผ ํ์ง์์ ๋ค์ ๋ฌด์๋ฏธํ๋ค๊ณ ์๊ฐํ์ง๋ง ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๊ฐ๋ฅํ ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ๋ฐฉํด๊ฐ ์ ์ ๊ตฌํ์ ์ฐพ๋ ๊ฒ ์ ๋๋ค. ๋ค๋ฅธ ๊ฒ์ ๋ ์ด์ ์ป์ ์ ์์ต๋๋ค.
@derekperkins @rudolfschmidt ๊ฐ์ฌํฉ๋๋ค. C++์ ์ด๊ฑฐํ ์ ํ์ด ์์ง๋ง ์ ์ํ๋ ๊ธฐ๋ฅ์ C++์ ์๋ค๋ ์ ์ ๋ถ๋ช ํ ํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋์ ์ด๊ฒ์ ๋ํด ๋ถ๋ช ํ ๊ฒ์ ์์ต๋๋ค.,
์ผ๋ฐ์ ์ผ๋ก ์ด๊ฑฐํ ์ ํ์ ๋ณ์๊ฐ ํด๋น ์ด๊ฑฐํ์ ๊ฐ๋ง ๋ฐ์๋ค์ผ ์ ์๋ค๋ฉด ๊ทธ๊ฒ์ ์ธ๋ชจ๊ฐ ์์ ๊ฒ์ ๋๋ค. ํนํ ์์์ ์ ์์์ ์ด๊ฑฐํ ์ ํ์ผ๋ก์ ๋ณํ์ด ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ํตํด ์ด๊ฑฐํ์ ๋ณด๋ผ ์ ์์ต๋๋ค. ๊ธ์, ํ ์๋ ์์ง๋ง ๊ฐ ์ด๊ฑฐํ ๊ฐ์ ๋ํด ๋์๋ฌธ์๊ฐ ์๋ ์ค์์น๋ฅผ ์์ฑํด์ผ ํ๋ฏ๋ก ์ ๋ง ์ง๋ฃจํด ๋ณด์ ๋๋ค. ๋ฐ๋ผ์ ๋ณํ์ ์ํํ ๋ ์ปดํ์ผ๋ฌ๋ ์ ํ ๋ณํ ์ค์ ๊ฐ์ด ์ ํจํ ์ด๊ฑฐํ ๊ฐ์ธ์ง ํ์ธํ๋ ๊ฒ์ ์์ฑํฉ๋๊น? ๊ฐ์ด ์ ํจํ์ง ์์ผ๋ฉด ๋นํฉํฉ๋๊น?
์ด๊ฑฐํ ๊ฐ์ ์์ฐจ์ ์ด์ด์ผ ํฉ๋๊น, ์๋๋ฉด C++์์์ ๊ฐ์ด ๋ชจ๋ ๊ฐ์ ๊ฐ์ง ์ ์์ต๋๊น?
Go์์ ์์๋ ์ ํ์ด ์์ผ๋ฏ๋ก ์ ์์์ ์ด๊ฑฐํ์ผ๋ก์ ๋ณํ์ ํ์ฉํ๋ฉด if enumVal == 1
๋ฅผ ๊ธ์งํ๋ ๊ฒ์ด ์ด์ํ ๊ฒ์
๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
Go์ ์ผ๋ฐ์ ์ธ ๋์์ธ ์์น ์ค ํ๋๋ Go๋ฅผ ์์ฑํ๋ ์ฌ๋๋ค์ด ์ ํ์ด ์๋๋ผ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์ ๋๋ค. ์ฝ๋๋ฅผ ์์ฑํ ๋ ๋์์ด ๋๋ ์ด๊ฑฐํ ์ ํ์ ์ด์ ์ ์์ง ๋ณด์ง ๋ชปํ์ต๋๋ค. ๊ทธ๋ค์ ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก Go์ ์๋ ์ข ๋ฅ์ ์ ํ ์ ์ฝ ์ธํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ข๋ ๋์๋ Go๋ ์ ํ์ ๊ฐ์ ์ ์ดํ๋ โโ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ Go์ ์ด๊ฑฐํ์ ์ถ๊ฐํ๋ ๊ฒ์ ์ฐฌ์ฑํ๋ ์ฃผ์ฅ์ ์์ง ์ค๋๋ ฅ์ด ์์ด ๋ณด์ ๋๋ค.
๋ค์ ๋งํ์ง๋ง ์ด๊ฑฐํ์ ์ค๋๋ ๊ณผ ๊ฐ์ด ์ ์งํ๊ณ ๊ทธ ์์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
int
์ ํ์ ๊ฐ์ ๋ชจ๋ ์ ์ ์ด๊ฑฐํ ์ ํ์ผ๋ก ๋ณํํ ์ ์์ด์ผ ํฉ๋๋ค.๊ทธ ์์ ์ ๊ณตํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-1
๊ฐ ์ผ๋ถ ์ด๊ฑฐํ ์ ํ Foo
์ ์ ํจํ ์ด๊ฑฐํ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ๋ฌธ์์ดํ๋ -1
๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค.๋ด ์ ๋น์ฑ์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ฒ๊ทธ๋ฅผ ํผํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๋ชจ๋ ์์ ์ ๊ฐ๋ฐ์๊ฐ ์์ผ๋ก ์ํํ๊ฑฐ๋ ์ฝ๋๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ค๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ ์ธ๋ถ ๋๊ตฌ๋ฅผ ๋์ ํ๊ธฐ๊น์ง ์ง๋ฃจํ๊ณ ๋ถํ์ํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ด๊ฑฐํ์ ์ง๋์น๊ฒ ๋ณต์กํ๊ณ ์ ํํ์ง ์์ผ๋ฉด์ ํ์ํ ๋ชจ๋ ๊ฒ์ ๋ค๋ฃน๋๋ค. ๋๋ Go๊ฐ Swift๋ Java์ ์ด๊ฑฐํ๊ณผ ๊ฐ์ ๊ฒ์ ํ์๋ก ํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
switch ๋ฌธ์ด ๊ฐ๋ฅํ ๋ชจ๋ ์ด๊ฑฐํ ๊ฐ์ ํฌํจํ๋์ง ์ปดํ์ผ ํ์์ ๊ฒ์ฆํ๋ ๊ฒ์ ๋ํ ๋ ผ์๊ฐ ์์์ต๋๋ค. ๋ด ์ ์์ผ๋ก๋ ์๋ฌด ์์ฉ์ด ์์ต๋๋ค. ์์ง ๊ฒ์ฌ๋ฅผ ์ํํด๋ ์ ํจํ์ง ์์ ์ด๊ฑฐํ ๊ฐ์ ๋ค๋ฃจ์ง ์์ผ๋ฏ๋ก ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด ๊ธฐ๋ณธ ์ผ์ด์ค๊ฐ ์์ด์ผ ํฉ๋๋ค. ์ด๋ ์ ์ง์ ์ธ ์ฝ๋ ๋ณต๊ตฌ๋ฅผ ์ง์ํ๋ ๋ฐ ํ์ํฉ๋๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ ์ผ์ switch ๋ฌธ์ ๊ธฐ๋ณธ ์ผ์ด์ค๊ฐ ์์ผ๋ฉด ๊ฒฝ๊ณ ๋ฅผ ์์ฑํ๋ ๊ฒ๋ฟ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ธ์ด๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ํ ์ ์์ต๋๋ค.
@ianlancetaylor ๋๋ ๋น์ ์ ์ฃผ์ฅ์ ๋ช ๊ฐ์ง ๊ฒฐํจ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ด๊ฑฐํ ์ ํ์ ๋ณ์๊ฐ ํด๋น ์ด๊ฑฐํ์ ๊ฐ๋ง ๋ฐ์๋ค์ผ ์ ์๋ค๋ฉด ๊ทธ๊ฒ์ ์ธ๋ชจ๊ฐ ์์ ๊ฒ์ ๋๋ค. ํนํ ์์์ ์ ์์์ ์ด๊ฑฐํ ์ ํ์ผ๋ก์ ๋ณํ์ด ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ํตํด ์ด๊ฑฐํ์ ๋ณด๋ผ ์ ์์ต๋๋ค.
ํ๋ก๊ทธ๋๋จธ๋ฅผ ์ํ ์ถ์ํ๋ ๊ด์ฐฎ์ต๋๋ค. Go
๋ ๋ง์ ์ถ์ํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์ ์ฝ๋๋ ์ปดํ์ผ๋์ง ์์ต๋๋ค.
package main
import "fmt"
const NULL = 0x0
func main() {
str := "hello"
if &str == NULL {
fmt.Println("str is null")
}
}
๊ทธ๋ฌ๋ C
์์๋ ์ด ์คํ์ผ์ ํ๋ก๊ทธ๋จ์ด ์ปดํ์ผ๋ฉ๋๋ค. Go
๋ ๊ฐ๋ ฅํ ํ์์ด๊ณ C
๋ ๊ทธ๋ ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด๊ฑฐํ์ ์ธ๋ฑ์ค๋ ๋ด๋ถ์ ์ผ๋ก ์ ์ฅ๋ ์ ์์ง๋ง ๋ณ์์ ์ฃผ์์ ์ ์ฌํ ์ถ์ํ๋ก ์ฌ์ฉ์์๊ฒ ์จ๊ฒจ์ง๋๋ค.
@zerkms ์, ๊ทธ๊ฒ์ ํ๋์ ๊ฐ๋ฅ์ฑ์ด์ง๋ง d
์ ํ์ด ์ฃผ์ด์ง๋ฉด ์ ํ ์ถ๋ก ์ด ๊ฐ๋ฅํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ (๊ทํ์ ์์์์ ๊ฐ์ด) ์ด๊ฑฐํ์ ์ ๊ทํ๋ ์ฌ์ฉ์ ์ฝ๊ธฐ๊ฐ ์กฐ๊ธ ๋ ์ฝ์ต๋๋ค.
@ianlancetaylor ๋น์ ์ด ๋งํ๋ ์ด๊ฑฐํ์ C ๋ฒ์ ์ ๋๋ค. ๋๋ ๋ง์ ์ฌ๋๋ค์ด ๊ทธ๊ฒ์ ์ํ์ง๋ง, imo:
์ด๊ฑฐํ ๊ฐ์๋ ์ซ์ ์์ฑ์ด ์์ด์ผ ํฉ๋๋ค. ๊ฐ ์ด๊ฑฐํ ์ ํ์ ๊ฐ์ ์ซ์๋ ๋ค๋ฅธ ์ด๊ฑฐํ ์ ํ๊ณผ ๊ด๋ จ์ด ์๋ ์ปดํ์ผ ์๊ฐ์ ์ ์ฉ๋๋ ๊ฐ๋ณ ๋ ์ด๋ธ์ ๊ณ ์ ํ ์ ํํ ์ ๋๋ฒ์ค์ฌ์ผ ํฉ๋๋ค. ์ด๋ฌํ ๊ฐ ์์ผ๋ก ํ ์ ์๋ ์ ์ผํ ๊ฒ์ ==
๋๋ !=
์
๋๋ค. ๋ค๋ฅธ ์์
์ ๋ฉ์๋ ๋๋ ํจ์๋ก ์ ์ํ ์ ์์ต๋๋ค.
๊ตฌํ์ ํด๋น ๊ฐ์ ์ ์๋ก ์ปดํ์ผํ์ง๋ง ์์ ํ์ง ์๊ฑฐ๋ ๋ฐ์ฌ๋ฅผ ์ ์ธํ๊ณ ํ๋ก๊ทธ๋๋จธ์๊ฒ ์ง์ ๋
ธ์ถ๋์ด์ผ ํ๋ ์ ๋นํ ์ด์ ๊ฐ ์๋ ๊ทผ๋ณธ์ ์ธ ๊ฒ์ ์๋๋๋ค. ๊ฐ์ ์ด์ ๋ก false
bool(0)
๋ฅผ ํ ์ ์์ต๋๋ค.
์ด๊ฑฐํ์ ์ซ์๋ ๋ค๋ฅธ ์ ํ์ผ๋ก ๋ณํํ๋ ค๋ฉด ๋ชจ๋ ์ผ์ด์ค๋ฅผ ์์ฑํ๊ณ ์ํฉ์ ์ ํฉํ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ํฌํจํฉ๋๋ค. ๊ทธ๊ฒ์ด ์ง๋ฃจํ๋ค๋ฉด ์คํธ๋ง๊ฑฐ์ ๊ฐ์ ์ฝ๋ ์์ฑ๊ธฐ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ ์ด๋ switch ๋ฌธ์ ๊ฒฝ์ฐ๋ฅผ ์ฑ์ฐ๊ธฐ ์ํด ๋ฌด์ธ๊ฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํ๋ก์ธ์ค ์ธ๋ถ๋ก ๊ฐ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ ์ ์ ์๋ ํ์ค์ ๋ฐ๋ฅด๊ฑฐ๋ ์์ค์์ ์ปดํ์ผ๋ ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ์ธ์คํด์ค์ ๋ํํ๊ณ ์๊ฑฐ๋ ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ ๊ฒฝ์ฐ int๊ฐ ์ข์ต๋๋ค. ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ ๊ฒฝ์ฐ์๋ ๊ฐ๋ฅํ ํ ๊ฐ์ฅ ์์ ๊ณต๊ฐ์ ์ ํฉํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ด๋ค ์ค ์ด๋ ๊ฒ๋ ์ ์ง๋์ง ์์ผ๋ฉฐ ๊ฐ์ด ์ ํ ์ ์์ ์์ค ์์์ ์ํฅ์ ๋ฐ์ง ์๋๋ก ๋ฌธ์์ด ํํ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ์ ์์์ ์ํ๋ฒณ์์ผ๋ก ์ ์งํ๊ธฐ ์ํด Blue๊ฐ Green ์์ ์ถ๊ฐ๋์ด์ผ ํ๋ค๊ณ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค A์ Green์ด ํ๋ก์ธ์ค B์ Blue๊ฐ ๋๋ ๊ฒ์ ์ํ์ง ์์ต๋๋ค. ๋น์ ์ unrecognized color "Blue"
๋ฅผ ์ํฉ๋๋ค.
์ฌ๋ฌ ์ํ๋ฅผ ์ถ์์ ์ผ๋ก ๋ํ๋ด๋ ์ข์ ์์ ํ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ฌํ ์ํ๊ฐ ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ ์ํ๋ ๊ฒ์ ํ๋ก๊ทธ๋จ์ ๋ ๋๋ ๊ฒ์ ๋๋ค.
(๋ฌผ๋ก ์ข ์ข ๋ฐ์ดํฐ๋ฅผ ํด๋น ์ํ์ ์ฐ๊ฒฐํ๊ณ ํด๋น ๋ฐ์ดํฐ์ ์ ํ์ ์ํ๋ง๋ค ๋ค๋ฆ ๋๋ค. . .)
@ljeabmreosn ๋ด ์์ ์ Go๊ฐ ์ ์์์ ์ด๊ฑฐํ ์ ํ์ผ๋ก ๋ณํ์ ํ์ฉํ๋ค๋ฉด ์ ํ์ด ์ง์ ๋์ง ์์ ์์๊ฐ ์๋์ผ๋ก ์ด๊ฑฐํ ์ ํ์ผ๋ก ๋ณํ๋๋ ๊ฒ์ด ๋น์ฐํ๋ค๋ ๊ฒ์ ๋๋ค. Go๋ ์ ์์์ ํฌ์ธํฐ ์ ํ์ผ๋ก์ ๋ณํ์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ ์๋ ๋ค๋ฆ ๋๋ค.
@jimmyfrasche ์ ์์ ์ด๊ฑฐํ ์ฌ์ด๋ฅผ ๋ณํํ๋ ์ค์์น๋ฅผ ์์ฑํด์ผ ํ๋ค๋ฉด Go์์ ๊น๋ํ๊ฒ ์๋ํ ๊ฒ์ด๋ผ๋ ๋ฐ ๋์ํ์ง๋ง ์์งํ ์ธ์ด ์์ฒด์ ์ถ๊ฐํ๋ ๊ฒ์ ์ถฉ๋ถํ ์ ์ฉํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ํฉ๊ณ ์ ํ์ ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ๋๋ฉฐ, ์ด์ ๋ํด์๋ #19412๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์ฌ๊ธฐ์ ๋ง์ ์ ์์ด ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ์๊ฒฌ: ์ด๊ฑฐํ์ ๋ํด ๋ณํํ๊ฑฐ๋ ๋ณํํ ์ ์๋ ๊ธฐ๋ณธ ๊ฐ(์: int)์ ๋ ธ์ถํ์ง ์๋ ์ ์์ ๋ํด ๋ต๋ณํด์ผ ํ ๋ช ๊ฐ์ง ์ง๋ฌธ์ด ์์ต๋๋ค.
์ด๊ฑฐํ ์ ํ์ 0 ๊ฐ์ ๋ฌด์์ ๋๊น?
ํ ์ด๊ฑฐํ์์ ๋ค๋ฅธ ์ด๊ฑฐํ์ผ๋ก ์ด๋ป๊ฒ ์ด๋ํฉ๋๊น? ๋๋ ๋ง์ ์ฌ๋๋ค์๊ฒ ์์ผ์ด ์ด๊ฑฐํ์ ์ ์ ์๋ผ๊ณ ์๊ฐํ์ง๋ง ์์์ผ์์ ๋ชฉ์์ผ๋ก "์ฆ๊ฐ"ํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ํด ํฐ switch ๋ฌธ์ ์์ฑํ๊ณ ์ถ์ง ์์ ๊ฒ์ ๋๋ค.
(๋ํ "๋ฌธ์์ดํ"์ ๊ด๋ จํ์ฌ ์์ผ์ ๋ํ ์ฌ๋ฐ๋ฅธ ๋ฌธ์์ด์ ์ธ์ด ๋ฐ ๋ก์ผ์ผ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.)
@josharian stringification์ ์ผ๋ฐ์ ์ผ๋ก ์ด๊ฑฐํ ๊ฐ์ ์ด๋ฆ์ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ๋ฌธ์์ด๋ก ๋ณํํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํ์งํ ๋๋ ์๋ฌด๊ฒ๋ ์์ต๋๋ค. ๋ก์ปฌ๋ผ์ด์ ์ด์ ๊ณผ ๊ฐ์ ๊ทธ ์์ ๋ฌด์ธ๊ฐ๋ฅผ ๊ตฌ์ถํ๋ ค๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ์๋จ์ ์ฌ์ฉํ์ฌ ์ํํ๊ณ ๋ค๋ฅธ ์ธ์ด๋ ์ด๋ฅผ ์ํํ ์ ์๋ ํ๋ถํ ์ธ์ด ๋ฐ ํ๋ ์์ํฌ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ผ๋ถ C# ์ ํ์๋ ๋ฌธํ ์ ๋ณด๋ ์ฌ์ฉํ๋ ToString
์ฌ์ ์๊ฐ ์์ต๋๋ค. ๋๋ DateTime
๊ฐ์ฒด ์์ฒด๋ฅผ ์ฌ์ฉํ๊ณ ํ์ ๋ฐ ๋ฌธํ ์ ๋ณด๋ฅผ ๋ชจ๋ ํ์ฉํ๋ ToString
๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ฌ์ ์๋ ํ์ค์ด ์๋๋๋ค. ๋ชจ๋ ์ฌ๋์ด ์์ํ๋ $#$4$ object
ํด๋์ค์๋ ToString()
์์ต๋๋ค. Go์ ์คํธ๋ง๊ฑฐ ์ธํฐํ์ด์ค์ ๊ฑฐ์ ๋น์ทํฉ๋๋ค.
๋ฐ๋ผ์ ํ์งํ๋ ์ผ๋ฐ์ ์ผ๋ก ์ด ์ ์๊ณผ ์ด๊ฑฐ์์ ๋ฒ์ด๋์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ํํ์ญ์์ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์ ์ ์ ์คํธ๋ง๊ฑฐ ์ธํฐํ์ด์ค์ ๊ฐ์ต๋๋ค.
@josharian ๊ตฌํ ์ธก๋ฉด์์ ์ฌ์ ํ int์ด๊ณ 0 ๊ฐ์ ๋ชจ๋ ๋นํธ๊ฐ 0์ด๋ฏ๋ก 0 ๊ฐ์ ์์ค ์์์ ์ฒซ ๋ฒ์งธ ๊ฐ์ด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์์์ผ ๋๋ ์ผ์์ผ์ ํ ์ฃผ๊ฐ ์์๋๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ 0 ๊ฐ์ ์ ํํ ์ ์๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก๋ ๊ฝค ์ข์ต๋๋ค. ๋ฌผ๋ก , ๋๋จธ์ง ํญ์ ์์๊ฐ ๊ทธ๋ฐ ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ๊ฐ์ ์ฌ์ ๋ ฌํ๋ ๊ฒ์ด ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ฌ์ํ์ง ์์ ์ํฅ์ ๋ฏธ์น ์ ์๋ค๋ ๊ฒ์ ๋ ์ข์ ์ผ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ค์ ๋ก const/iota์ ๋ค๋ฅด์ง ์์ต๋๋ค.
@creker ๊ฐ ๋งํ ๊ฒ์ ๋ค์ ๋ฌธ์์ดํํ์ญ์์ค. ํ์ฅํ๋ ค๋ฉด
var e enum {
Sunday
Monday
//etc.
}
fmt.Println(reflect.ValueOf(e))
์ผ์์ผ์ ์ธ์ํ๋ ค๋ฉด 0์ด ์๋๋๋ค. ๋ ์ด๋ธ์ ํ์๊ฐ ์๋๋ผ ๊ฐ์ ๋๋ค.
๋ถ๋ช ํ ํ๊ธฐ ์ํด ์์์ String ๋ฉ์๋๊ฐ ์์ด์ผ ํ๋ค๊ณ ๋งํ๋ ๊ฒ์ด ์๋๋๋ค. ๋ ์ด๋ธ์ด ์ ํ์ ์ผ๋ถ๋ก ์ ์ฅ๋๊ณ ๋ฆฌํ๋ ์ ์ ํตํด ์ก์ธ์คํ ์ ์๋ค๋ ๊ฒ๋ฟ์ ๋๋ค. (์๋ง๋ Println์ ์ด๊ฑฐํ์ด๋ ์ด์ ์ ์ฌํ ๊ฒ์์ ๋ฐ์ฌ.Value์ ๋ํด Label()์ ํธ์ถํฉ๋๊น? fmt๊ฐ ๋ถ๋๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊น์ด ์ดํด๋ณด์ง ์์์ต๋๋ค.)
ํ ์ด๊ฑฐํ์์ ๋ค๋ฅธ ์ด๊ฑฐํ์ผ๋ก ์ด๋ป๊ฒ ์ด๋ํฉ๋๊น? ๋๋ ๋ง์ ์ฌ๋๋ค์๊ฒ ์์ผ์ด ์ด๊ฑฐํ์ ์ ์ ์๋ผ๊ณ ์๊ฐํ์ง๋ง ์์์ผ์์ ๋ชฉ์์ผ๋ก "์ฆ๊ฐ"ํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ํด ํฐ switch ๋ฌธ์ ์์ฑํ๊ณ ์ถ์ง ์์ ๊ฒ์ ๋๋ค.
๋ฆฌํ๋ ์ ์ด๋ ํฐ ์ค์์น๊ฐ ๋ง๋ ๊ฒ ๊ฐ์์. ์ผ๋ฐ ํจํด์ ํด๋น ์ ํ์ ํฉํ ๋ฆฌ ํจ์ ๋๋ ์ ํ์ ๋ํ ๋ฉ์๋๋ฅผ ์์ฑํ๊ธฐ ์ํด go generate๋ก ์ฝ๊ฒ ์ฑ์์ง ์ ์์ต๋๋ค(๊ทธ๋ฆฌ๊ณ ์๋ง๋ ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ฅผ ํํ์ ๋ํ ์ฐ์ ์ฐ์ฐ์ผ๋ก ๋ฎ์ถ๊ธฐ ์ํด ์ธ์ํ ์๋ ์์).
๋ชจ๋ ์ด๊ฑฐํ์ ์ ์ฒด ์์๊ฐ ์๊ฑฐ๋ ์ํ์ ์ด๋ผ๊ณ ๊ฐ์ ํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. type failure enum { none; input; file; network }
๊ฐ ์ฃผ์ด์ง๋ฉด ์๋ชป๋ ์
๋ ฅ์ด ํ์ผ ์ค๋ฅ๋ณด๋ค ์ ๊ฑฐ๋ ํ์ผ ์ค๋ฅ๋ฅผ ๋๋ฆฌ๋ฉด ๋คํธ์ํฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ๋คํธ์ํฌ ์ค๋ฅ๋ฅผ ๋๋ฆฌ๋ฉด ์ฑ๊ณตํ๊ฒ ๋๋ ๊ฒ์ด ์ ๋ง ์๋ฏธ๊ฐ ์์ต๋๊น?
์ฃผ์ ์ฉ๋๊ฐ ์ํ ์์ ๊ฐ์ ์ํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ๋ฉด ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋งค๊ฐ๋ณ์ํ๋ ์ ์ ์ ํ์ ์ ํด๋์ค๋ฅผ ๋ง๋๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ์๋ชป๋ ๊ตฌ๋ฌธ์ด์ง๋ง ํ ๋ก ์ ์ํด I
๊ฐ ์ ์ ์ ํ์ด๊ณ N
๊ฐ ์ ์ ์์์ธ I%N
๋ผ๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ์ ํ์ ๊ฐ์ ๊ฐ์ง ๋ชจ๋ ์ฐ์ ์ ์์์ ์ผ๋ก mod N์
๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
type Weekday uint%7
const (
Sunday Weekday = iota
//etc.
๊ทธ๋์ ํ ์์ผ + 1 == ์ผ์์ผ ๋ฐ ํ์ผ(456) == ์์์ผ. ์ ํจํ์ง ์์ ์์ผ์ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ const/iota ์ธ๋ถ์์ ์ ์ฉํ ์ ์์ต๋๋ค.
@ianlancetaylor ๊ฐ ๋ด๊ฐ ์ ๋ง๋ก ์ํ๋ ๊ฒ์ ํฉ๊ณ ์ ํ์ด๋ผ๊ณ ์ง์ ํ๋ฏ์ด ์ซ์ y๋ฅผ ์ ํ ์ํ์ง ์์ ๋.
์์์ ๋ชจ๋์ ์ฐ์ ์ ํ์ ๋์ ํ๋ ๊ฒ์ ํฅ๋ฏธ๋ก์ด ์ ์์ ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด๊ฑฐํ์ ๋ค์๊ณผ ๊ฐ์ ํ์์ด ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ฐ๋จํ String ๋ฉ์๋๋ฅผ ์ป์ ์ ์์ต๋๋ค.
var Weekdays = [...]string{"Sunday", ..., "Saturday"}
type Weekday = uint % len(Weekdays)
์์์ ํฌ๊ธฐ์ int์ ๊ฒฐํฉํ๋ฉด int128, int256 ๋ฑ๋ ์ป์ ์ ์์ต๋๋ค.
๋ช ๊ฐ์ง ๋ด์ฅ ๊ธฐ๋ฅ์ ์ ์ํ ์๋ ์์ต๋๋ค.
type uint8 = uint%(1<<8)
// etc
์ปดํ์ผ๋ฌ๋ ์ด์ ๋ณด๋ค ๋ ๋ง์ ๋ฒ์๋ฅผ ์ฆ๋ช
ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ API๋ ์ ํ์ ํตํด ๋ณด๋ค ์ ํํ ์ด์ค์
์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด math/bits
์ ํจ์ Len64
$๋ ์ด์ uint % 64
๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค.
RISC-V ํฌํธ์์ ์์
ํ ๋ ๋ช
๋ น์ด ์ธ์ฝ๋ฉ ๊ตฌ์ฑ ์์๊ฐ 12๋นํธ์ด๊ธฐ ๋๋ฌธ์ uint12
์ ํ์ ์ํ์ต๋๋ค. uint % (1<<12)
์ ์์ต๋๋ค. ๋ง์ ๋นํธ ์กฐ์, ํนํ ํ๋กํ ์ฝ์์ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค.
๋ฌผ๋ก ๋จ์ ๋ ์๋นํฉ๋๋ค. Go๋ ์ ํ๋ณด๋ค ์ฝ๋๋ฅผ ์ ํธํ๋ ๊ฒฝํฅ์ด ์์ผ๋ฉฐ ์ด๋ ์ ํ์ด ๋ง์ต๋๋ค. + ๋ฐ -์ ๊ฐ์ ์ฐ์ฐ์ ๊ฐ์๊ธฐ %๋งํผ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค. ์ด๋ค ์ข
๋ฅ์ ์ ํ ๋งค๊ฐ๋ณ์๊ฐ ์์ผ๋ฉด ๊ฑฐ์ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฅ๊ณผ ์ํธ ์ด์ฉํ๊ธฐ ์ํด ํ์ค uint8
, uint16
๋ฑ์ผ๋ก ๋ณํํด์ผ ํ๋ฉฐ ๋ค์ ๋ณํํ๋ฉด ๊ฒฝ๊ณ๋ฅผ ์จ๊ธธ ์ ์์ต๋๋ค. ์คํจ(์์ฒด ๋ณต์ก์ฑ์ ๋์
ํ๋ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ํจ๋ ๋ณํ์ ์ํํ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒฝ์ฐ). ๊ทธ๋ฆฌ๊ณ HTTP ์ํ ์ฝ๋์ uint % 1000
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ด ๊ณผ๋ํ๊ฒ ์ฌ์ฉ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ํฅ๋ฏธ๋ก์ด ์์ด๋์ด์ ๋๋ค. :)
๊ธฐํ ์ฌ์ํ ๋ต๋ณ:
๊ทธ๊ฒ์ ์ผ์ข ์ ๋ด๋ฉด์ ๋์คํ๋ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ๊ทธ๋ค์ด ์ ๋ง๋ก int๋ผ๊ณ ์๊ฐํ๊ฒ ๋ง๋ญ๋๋ค. :)
์ผ๋ฐ์ ์ธ ํจํด์ go generate๋ก ์ฝ๊ฒ ์ฑ์ธ ์ ์์ต๋๋ค.
์ด์จ๋ ์ด๊ฑฐํ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ String ํจ์ ๋ฐ ๊ฒฝ๊ณ ๊ฒ์ฌ ๋ฑ์ ์์ฑํ๊ณ ์ธ์ด ์ง์์ ๋ฌด๊ฒ ๋์ ์ฝ๋ ์์ฑ์ผ๋ก ์ด๊ฑฐํ์ ์ํํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ชจ๋ ์ด๊ฑฐํ์ ์ ์ฒด ์์๊ฐ ์๊ฑฐ๋ ์ํ์ ์ด๋ผ๊ณ ๊ฐ์ ํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
๊ทธ๋ด ์ ์์ง. ์ด๊ฒ์ ์์์ ๊ตฌ์ฒด์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ๋ ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ด๊ฑฐํ์์ ์ํ๋ ๊ฒ์ ์ ํํ ๋ช ํํ๊ฒ ํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ฒ ๋ง๋ญ๋๋ค. ๋ช ํํ ์๊ตฌ ์ฌํญ์ด ์์ ๊ฒ์ด๋ฉฐ ๋ค๋ฅธ ์ธ์ด ๊ตฌ์ฑ(์ฆ, ํ์ ์ ์ง)์ ์ฌ์ฉํ์ฌ ์ด๊ฑฐํ์ ์๋ฎฌ๋ ์ดํธํ๋ ๊ฒ์ด ๊ฐ์ฅ ํฉ๋ฆฌ์ ์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๊ฐ์ค์ผ ๋ฟ์ ๋๋ค.
@creker ๊ฐ ๋งํ ๊ฒ์ ๋ค์ ๋ฌธ์์ดํํ์ญ์์ค.
๊ทธ๋ด ์ ์์ง. ๊ทธ๋ฌ๋ ์ผ๋ง๋ ๋ง์ ๊ฒฝ์ฐ๊ฐ ์์ผ๊ณผ ๊ฐ์์ง ๊ถ๊ธํฉ๋๋ค. ํ์คํ ์ฌ์ฉ์๊ฐ ๋๋ฉดํ๋ ๋ชจ๋ ๊ฒ. ๊ทธ๋ฆฌ๊ณ ๋ฌธ์์ดํ๋ ์ด๊ฑฐํ์ ๋ํ ์ฃผ์ ์์ฒญ ์ค ํ๋์ธ ๊ฒ ๊ฐ์ต๋๋ค.
@josharian ์ค์ ๋ก int์ธ ์ด๊ฑฐํ์ ์๋ง๋ ๋น์ทํ ๋ฉ์ปค๋์ฆ์ด ํ์ํ ๊ฒ์
๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด enum { A; B; C}(42)
๋ ๋ฌด์์
๋๊น?
์ปดํ์ผ๋ฌ ์ค๋ฅ๋ผ๊ณ ๋งํ ์ ์์ง๋ง ๋ฐํ์์ int๋ก ๋ณํํ๊ฑฐ๋ int์์ ๋ณํํ ์ ์์ผ๋ฏ๋ก ๋ ๋ณต์กํ ์ฝ๋์์๋ ์๋ํ์ง ์์ต๋๋ค.
A ๋๋ ๋ฐํ์ ํจ๋์ ๋๋ค. ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ ํ๋ ๋๋ฉ์ธ์ด ์๋ ์ ์ ์ ํ์ ์ถ๊ฐํฉ๋๋ค. ๋ฐํ์ ํจ๋์ธ ๊ฒฝ์ฐ ๋ค๋ฅธ ํญ๋ชฉ์ด ๋๋ฌ์ธ์ผ ๋ ์ค๋ฒํ๋ก ํจ๋์ด ๋ฐ์ํ๋ ์ ์ ์ ํ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค. A๋ผ๋ฉด ๋ช ๊ฐ์ง ์์์ผ๋ก uint%N์ ์ถ๊ฐํ ๊ฒ์ ๋๋ค.
๋ค๋ฅธ ์ต์ ์ A, B ๋๋ C ์ค ์ด๋ ๊ฒ๋ ํ์ฉํ์ง ์๋ ๊ฒ์ด์ง๋ง ์ด๊ฒ์ด ์ค๋๋ const/iota๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ฏ๋ก ์ด๋์ด ์์ต๋๋ค.
int%N์ด๋ผ๊ณ ๋งํ๋ ๋ชจ๋ ์ด์ ๋ int์ธ ์ด๊ฑฐํ์๋ ๋๊ฐ์ด ์ ์ฉ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. (ํ์ง๋ง ๊ทธ๋ค๊ณผ ๊ฐ์ ๊ฒ์ด ํฌํจ๋๋ค๋ฉด ๋๋ ํ๋ฅผ ๋ด์ง ์์ ๊ฒ์ ๋๋ค).
์์ํจ์ ์์ ๋ฉด ๊ทธ ์์๊ป๋ผ๊ฐ ์ฌ๋ผ์ง๋๋ค. ์ผ๋ถ int-iness๋ฅผ ๋ค์ ์ถ๊ฐํ๋ ค๋ ๊ฒฝ์ฐ ์ฝ๋ ์์ฑ์ด ํ์ํ์ง๋ง ๊ทธ๋ ๊ฒ ํ์ง ์์ ์๋ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋์
ํ int-iness์ ์ ๋์ ์ข
๋ฅ๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. no "๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. next" ๋ฉ์๋, ์ํ์ next ๋ฉ์๋, ๊ฐ์ฅ์๋ฆฌ์์ ๋จ์ด์ง๋ฉด ์ค๋ฅ๋ฅผ ๋ฐํํ๋ next ๋ฉ์๋. (๋ํ Monday*Sunday - Thursday
๊ฐ ํฉ๋ฒํ๋๋ ๊ฒ์ผ๋ก ๋๋์ง ์์ต๋๋ค.) ์ถ๊ฐ ๊ฐ์ฑ์ผ๋ก ์ธํด ๋ ๊ฐ๋จ์ฑ ์๋ ๊ฑด์ถ ์์ฌ๊ฐ ๋ฉ๋๋ค. ํ๋ณ๋ ๊ณต์ฉ์ฒด๋ ๋ฌด์๋ณด๋ค๋ pick { A, B, C struct{} }
์ ๊ฐ์ด int-y๊ฐ ์๋ ๋ค์์ฑ์ ๋ฉ์ง๊ฒ ๋ชจ๋ธ๋งํฉ๋๋ค.
์ด์ ๊ฐ์ ์ ๋ณด๋ฅผ ์ธ์ด๋ก ์ ๊ณตํ๋ ๊ฒ์ ์ฃผ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ธ์ด๋ก ์ด์ ๊ฐ์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์ฃผ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์๋ชป๋ ๊ฐ์ ๋ถ๋ฒ์ ๋๋ค.
๋ชจ๋ ์ฌ๋์ด ์ด๊ฒ์ ์ด์ ์ผ๋ก ๋ณด๋ ๊ฒ์ ์๋๋ผ๋ ์ ์ ๊ฐ์กฐํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ํ์คํํ์ง ์์ต๋๋ค. ๊ฐ์ ์๋นํ ๋๋ ๋ ์ฝ๊ฒ ๋ง๋ค์ง๋ง ๊ฐ์ ์์ฑํ ๋๋ ๋ ์ด๋ ต๊ฒ ๋ง๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ ์ชฝ์ด ๋ ๋ฌด๊ฑฐ์ธ์ง๋ ์ง๊ธ๊น์ง๋ ๊ฐ์ธ์ ์ทจํฅ์ ๋ฌ๋ ค ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฐ๋ผ์ ์ด๊ฒ์ด ์ ์ฒด์ ์ผ๋ก ์ ์ด์ต์ธ์ง ์ฌ๋ถ์ ๋ํ ์ง๋ฌธ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
๋ํ ๋ถ๋ฒ์ ์ธ ๊ฐ์ ํ์ฉํ์ง ์๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ ํจ์ฑ์ ์ค์ค๋ก ํ์ธํ ์๋จ์ด ์ด๋ฏธ ์๋ ๊ฒฝ์ฐ(์์ ์ ์์์์ ๊ฐ์ด), ๊ทธ ์ ํ์ด ์ฃผ๋ ์ด์ ์ ๋ฌด์์ ๋๊น? ๋์๊ฒ ๊ทธ๊ฒ์ ์ผ์ ๋ณต์กํ๊ฒ ํ ๋ฟ์ ๋๋ค. ๋ด ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด๊ฑฐํ์๋ ์ ํจํ์ง ์๊ฑฐ๋ ์ ์ ์๋ ๊ฐ์ด ํฌํจ๋ ์ ์์ผ๋ฉฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฐ๋ผ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ์ต๋๋ค. ์์ ํ ํ๊ธฐํ๊ฑฐ๋ ์ผ๋ถ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ค์ด๊ทธ๋ ์ด๋ํ๊ฑฐ๋ ๊ทธ๋๋ก ์ ์ฅํด์ผ ํฉ๋๋ค.
์๋ชป๋ ๊ฐ์ ํ์ฉํ์ง ์๋ ์๊ฒฉํ ์ด๊ฑฐํ์ ์ฑ์ด ์ธ๋ถ ์ธ๊ณ์ ๊ฒฉ๋ฆฌ๋์ด ์๊ณ ์๋ชป๋ ์ ๋ ฅ์ ๋ฐ์ ๋ฐฉ๋ฒ์ด ์๋ ๋งค์ฐ ์ ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์์ ๋ง ๋ณด๊ณ ์ฌ์ฉํ ์ ์๋ ๋ด๋ถ ์ด๊ฑฐํ๊ณผ ๊ฐ์ต๋๋ค.
iota๋ฅผ ์ฌ์ฉํ๋ const๋ ์ปดํ์ผ ์๊ฐ์ ์์ ํ์ง ์๊ณ ๊ฒ์ฌ๋ ๋ฐํ์์ผ๋ก ์ง์ฐ๋๋ฉฐ ์์ ํ ๊ฒ์ฌ๋ ์ ํ ์์ค์ด ์๋๋๋ค. ๊ทธ๋์ ์ ๋ iota๊ฐ enum์ ๋ฌธ์ ๊ทธ๋๋ก ๋์ฒดํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ ๋ enum์ด ๋ ๊ฐ๋ ฅํ๊ธฐ ๋๋ฌธ์ enum์ ์ ํธํฉ๋๋ค.
์๋ชป๋ ๊ฐ์ ๋ถ๋ฒ์ ๋๋ค.
๋ชจ๋ ์ฌ๋์ด ์ด๊ฒ์ ์ด์ ์ผ๋ก ๋ณด๋ ๊ฒ์ ์๋๋ผ๋ ์ ์ ๊ฐ์กฐํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ๋ ์ด ๋ ผ๋ฆฌ๊ฐ ์ดํด๊ฐ ๋์ง ์์ต๋๋ค. ์ ํ์ ๊ฐ์ ์งํฉ์ ๋๋ค. ๊ฐ์ด ํด๋น ์ ํ์ ์๋ ๋ณ์์๋ ์ ํ์ ํ ๋นํ ์ ์์ต๋๋ค. ๋ด๊ฐ ๋ญ๊ฐ ์คํดํ๊ณ ์๋ ๊ฑธ๊น?
์ถ์ : ์ด๊ฑฐํ์ ํฉ๊ณ ์ ํ์ ํน๋ณํ ๊ฒฝ์ฐ์ด๋ฉฐ ๊ทธ ๋ฌธ์ ๊ฐ ์ด ๋ฌธ์ ๋ณด๋ค ์ฐ์ ํด์ผ ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
๋ค์ ๋งํด์/์ข ๋ ์ ํํ๊ฒ ํ์๋ฉด ๋ชจ๋ ์ฌ๋์ด ์ด๊ฑฐํ์ ๋ซ๋ ๋ฐ ์ด์ ์ด ์๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ ์๋๋๋ค.
๊ทธ๋ฐ ์์ผ๋ก ์๊ฒฉํ๊ธฐ๋ฅผ ์ํ๋ค๋ฉด a) "์๋ชป๋ ๊ฐ์ ๋ถ๋ฒ์ ๋๋ค"๋ ๋์ด๋ฐ๋ณต์ด๊ณ b) ๋ฐ๋ผ์ ์ด์ ์ผ๋ก ๊ฐ์ฃผ๋ ์ ์์ต๋๋ค. const ๊ธฐ๋ฐ ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ฉด ํด์์ ์๋ชป๋ ๊ฐ๋ ๋ถ๋ฒ์ ๋๋ค. ์ ํ์ ํจ์ฌ ๋ ๋ง์ ๊ฐ์ ํ์ฉํฉ๋๋ค.
์ด๊ฑฐํ์ด int์ด๊ณ ๋ชจ๋ int๊ฐ ์ ๋ฒํ ๊ฒฝ์ฐ(์ ํ ์์คํ ์ ๊ด์ ์์) ์ ์ผํ ์ด์ ์ ์ ํ์ ๋ช ๋ช ๋ ๊ฐ์ด ๋ฐ์๋๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋จ์ง const/iota์ด์ง๋ง fmt ํจํค์ง๊ฐ ๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ์ฌ ์ด๋ฆ์ ๊ฐ์ ธ์ฌ ์ ์๊ธฐ ๋๋ฌธ์ ์คํธ๋ง๊ฑฐ๋ฅผ ์คํํ ํ์๊ฐ ์์ต๋๋ค. (์๋ณธ์ ์๋ ์ด๋ฆ๊ณผ ๋ฌธ์์ด์ ๋ค๋ฅด๊ฒ ํ๋ ค๋ฉด ์ฌ์ ํ stringer๋ฅผ ์คํํด์ผ ํฉ๋๋ค.)
@jimmyfrasche ๋ฌธ์์ด ํ๋ ์ข์ ๋ณด๋์ค์ ๋๋ค. ์์ ์ ์์์ ์ฝ์ ์ ์๋ฏ์ด ์ ์๊ฒ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ฐํ์์ ์ฃผ์ด์ง ๊ฐ์ด ์ฃผ์ด์ง ์ด๊ฑฐํ ์ ํ์ ์ ํจํ ๊ฐ์ธ์ง ํ์ธํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์ฃผ์ด์ง
type Foo enum {
Val1 = 1
Val2 = 2
}
๊ทธ๋ฆฌ๊ณ ๋ฐ์ฌ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
func IsValidEnum(v {}interface) bool
์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
a := Foo.Val1
b := Foo(-1)
reflection.IsValidEnum(a) //returns true
reflection.IsValidEnum(b) //returns false
์ค์ ์ฌ๋ก์ ๊ฒฝ์ฐ Java๊ฐ ์ํํ ๊ฒ์ ๋งน๋ชฉ์ ์ผ๋ก ๋ฐ๋ฅด๋ ๋์ ์ด ์ค๊ฐ ์ง์ ์ ์๋ฒฝํ๊ฒ ํฌ์ฐฉํ C#์ ์ด๊ฑฐํ ์ ๋ณผ ์ ์์ต๋๋ค. C#์์ ์ ํจ์ฑ์ ํ์ธํ๋ ค๋ฉด Enum.IsDefined
static method ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
@crecker ๊ทธ๊ฒ๊ณผ const/iota์ ์ ์ผํ ์ฐจ์ด์ ์
๋ฐ์ฌ์ ์ ์ฅ๋ ์ ๋ณด. ์ ์ฒด์ ์ผ๋ก ํฐ ์ด๋์ ์๋๋ค
์๋ก์ด ์ ํ์ ์ ํ.
์ฝ๊ฐ ๋ฏธ์น ์์ด๋์ด:
๋์ผํ ํจํค์ง์ ์ ์ธ๋ ๋ชจ๋ const์ ์ด๋ฆ๊ณผ ๊ฐ์ ์ ์ฅํฉ๋๋ค.
๋ฐ์ํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ ์๋ ์ ํ์ผ๋ก. ๊ทธ๊ฒ์
๊ทธ๋ฌ๋ ์ข์ ํด๋์ค์ const ์ฌ์ฉ๋ฒ์ ๊ณจ๋ผ๋ด๋ ๊ฒ์ ์ด์ํฉ๋๋ค.
์์ ๋ด ์ ์์์ ์ฝ์ ์ ์๋ฏ์ด ๋๋ฅผ ์ํ ์ฃผ์ ๊ธฐ๋ฅ
IMO๋ ์ด ๋
ผ์๋ฅผ ๋๊ณ ์๋ ์ฃผ์ ์ฌํญ ์ค ํ๋๋ฅผ ๋ณด์ฌ์ค๋๋ค. "์ฃผ์ ๊ธฐ๋ฅ" ์งํฉ์ด ๋ฌด์์ธ์ง์ ๋ํ ๋ช
ํ์ฑ์ด ๋ถ์กฑํฉ๋๋ค. ์ฌ๋๋ค๋ง๋ค ๊ทธ๊ฒ์ ๋ํด ์ฝ๊ฐ ๋ค๋ฅธ ์๊ฐ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋๋ ์ฌ์ ํ ๊ทธ ์ธํธ๋ฅผ ๋ฐ๊ฒฌํ๊ธฐ ์ํ ๊ฒฝํ ๋ณด๊ณ ์ ์ ํ์์ ์ข์ํฉ๋๋ค. ๋ชฉ๋ก์ ํ๋๊ฐ ์์ต๋๋ค(๊ฐ์ธ์ ์ผ๋ก๋ "์๋ชป๋ ๊ฒ" ์น์
์ด ์ค์ ๋ก ๋ฐ์ํ ๊ฒ์ด ์๋๋ผ ์๋ชป ๋ ์ ์๋ ๊ฒ์ ๋ํด์๋ง ์ธ๊ธํ๋ค๋ ์ฌ์ค์ ์ฌ์ ํ ์ธ๊ธํ๊ณ ์ถ์ต๋๋ค). ์ ํ ๊ฒ์ฌ์ ๋ถ์กฑ์ผ๋ก ์ธํด ์ค๋จ/๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์๋ฅผ ๋ค์ด ๋๊ท๋ชจ ๋ฆฌํฉํ ๋ง์ ์ํํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ฅผ ์ค๋ช
ํ๋ ๋ช ๊ฐ์ง๋ฅผ ์ถ๊ฐํ๋ฉด ๋์์ด ๋ ๊ฒ์
๋๋ค.
@jimmyfrasche ํ์ง๋ง ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ ๋ง์ ์์ฉ ํ๋ก๊ทธ๋จ์ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ ํ ์์คํ ์ ๋์ ์์ด๋ ์๋์ผ๋ก ์ํํด์ผ ํ๋ฉฐ ๋ช ์ค์ ์ฝ๋๋ก ์ํํ ์ ์๋ ์์ ์ด ์๋๋๋ค. ์ผ์ข ์ ์ ํ ์ง์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๊ทธ ์์ ๋ฌธ์์ดํ๋ฅผ ์ถ๊ฐํ๋ฉด ๊ธฐ๋ณธ ์ ํ ๊ฐ์ด ์๋ ์ฌ๋ฐ๋ฅธ ํ์์ ์ด๋ฆ์ ๊ฐ๊ฒ ๋๋ฏ๋ก ๋ก๊น ์ด ๋จ์ํ๋ฉ๋๋ค.
๋ฐ๋ฉด์ ์ด๊ฑฐํ์ ์๊ฒฉํ๊ฒ ๋ง๋ค๋ฉด ๊ฐ๋ฅํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์ฌ๊ฐํ๊ฒ ์ ํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ด์ ํ๋กํ ์ฝ์์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ํจํ์ง ์์ ๊ฐ๋ ๋ณด์กดํ๋ ค๋ฉด ์ด๊ฑฐํ์ ์ญ์ ํ๊ณ ์ผ๋ฐ ๊ฐ ์ ํ์ ์ฌ์ฉํด์ผ ํ๋ฉฐ, ํ์ํ ๊ฒฝ์ฐ ๋์ค์ ์ด๊ฑฐํ์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์๋ชป๋ ๊ฐ์ ์ญ์ ํ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ์ผ๋ถ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ค์ด๊ทธ๋ ์ด๋ํ ์ ์์ต๋๋ค. ์ด๋ ์ชฝ์ด๋ , ๋น์ ์ ์ค๋ฅ๋ฅผ ํผํ๋ ๋ฐ ๋์์ด ๋๋ ๋์ ์ ํ ์์คํ ์ ์ ํ๊ณผ ์ธ์ฐ๊ณ ์์ต๋๋ค.
Java ์ด๊ฑฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Java์ฉ protobuf๊ฐ ์์ฑํด์ผ ํ๋ ๊ฒ์ ์ดํด๋ณด์ญ์์ค.
์ ํจ์ฑ ๊ฒ์ฌ์ ๊ด๋ จํ์ฌ @Merovius ๋ ์ด๋ฏธ ์ฌ๋ฌ ๋ฒ ๋ค๋ฃจ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ ํจ์ฑ ๊ฒ์ฌ ์์ด๋ ์ ๋ ฅ ์ ํจ์ฑ์ ๊ฒ์ฌํ๊ธฐ ์ํด ์์ฒญ๋ ์์ ๋ณต์ฌ-๋ถ์ฌ๋ฃ๊ธฐ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ๋ฌธ์ ๋ ๋ถ๋ช ํ๋ฉฐ ์ ์๋ ์๋ฃจ์ ์ด ์ด๋ฅผ ์ด๋ป๊ฒ ๋์ธ ์ ์๋์ง๋ ์ ์ ์์ต๋๋ค. ์ ๋ ๋ชจ๋ ์ฌ๋์ด ์๊ณ ์๋ ๋๊ท๋ชจ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์์ ํ์ง ์์ง๋ง ํด๋น ์ ํจ์ฑ ๊ฒ์ฌ ์ฝ๋์ ์ค๋ฅ๊ฐ ๋์ผํ ์ด๊ฑฐํ ๊ฐ๋ ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ธ์ด๋ก ์ฌ๋ฌ ๋ฒ ์ ๋ฅผ ๋ฌผ์์ต๋๋ค.
๋ฐ๋ฉด์ ์๋ชป๋ ๊ฐ์ ํ์ฉํ์ง ์๋ ์ด๊ฑฐํ์ ๊ตฌํํ๋ ๋ฐ ์ฐฌ์ฑํ๋ ์ด๋ค ์ฃผ์ฅ๋ ๋ณผ ์ ์์ต๋๋ค(๋ญ๊ฐ ๋์น ๊ฒฝ์ฐ ์ฌ๊ณผ). ์ด๋ก ์์ผ๋ก๋ ๋ฉ์ง๊ณ ๊น๋ํ์ง๋ง ์ค์ ์์ฉ ํ๋ก๊ทธ๋จ์์๋ ๋์์ด ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ๋๋ค์ด ์ด๊ฑฐํ์์ ์ํ๋ ๊ธฐ๋ฅ์ ๊ทธ๋ฆฌ ๋ง์ง ์์ต๋๋ค. ๋ฌธ์์ดํ, ์ ํจ์ฑ ๊ฒ์ฌ, ์ ํจํ์ง ์์ ๊ฐ ์ธก๋ฉด์์ ์๊ฒฉ/๋์จํจ, ์ด๊ฑฐ - ๋ด๊ฐ ๋ณผ ์ ์๋ ๊ฒ๊ณผ ๊ฑฐ์ ๋น์ทํฉ๋๋ค. ๋ชจ๋ (๋ฌผ๋ก ๋๋ฅผ ํฌํจํ์ฌ)์ด ์์ ์์ ๊ทธ๊ฒ๋ค์ ์์ต๋๋ค. ์๊ฒฉํจ/๋์จํจ์ ์์ถฉ๋๋ ์ฑ๊ฒฉ ๋๋ฌธ์ ์ฃผ์ ๋ ผ์๊ฑฐ๋ฆฌ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ๋ชจ๋ ์ฌ๋์ด ํ๋ ๋๋ ๋ค๋ฅธ ๊ฒ์ ๋์ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด์ฉ๋ฉด ํด๊ฒฐ์ฑ ์ ๋ ๋ค ์ด๋ค ์์ผ๋ก๋ ํตํฉํ๊ณ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ ํํ๋๋ก ํ๋ ๊ฒ์ผ ์ ์์ง๋ง ์ค์ ์ธ๊ณ์์ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณผ ์ ์๋ ์ธ์ด๊ฐ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
@crecker ์์ ๋ด๋ณด๋ด๊ธฐ ๋ฐ์ดํฐ์ const๋ฅผ ์ ์ฅํ๋ผ๋ ๋ด ์ ์
์ํฉ์ ๋น์ ์ด ์๊ตฌํ๋ ์ข
๋ฅ์ ๊ฒ์ ํ์ฉํฉ๋๋ค
์๋ก์ด ์ข
๋ฅ์ ๋์
์์ด.
์ด๊ฒ์ด ๊ด์ฉ์ ๋ฐฉ๋ฒ์ธ์ง ํ์คํ์ง ์์ผ๋ฉฐ ์ธ์ด๋ ์ฒ์์ด์ง๋ง ๋ค์์ ์๋ํ๊ณ ๊ฐ๊ฒฐํฉ๋๋ค.
type Day struct {
value string
}
// optional, if you need string representation
func (d Day) String() string { return d.value }
var (
Monday = Day{"Monday"}
Tuesday = Day{"Tuesday"}
)
func main() {
getTask(Monday)
}
func getTask(d Day) string {
if d == Monday {
fmt.Println("today is ", d, "!โ) // today is Monday !
return "running"
}
return "nothing to do"
}
type Day
func getTask
์ ์ ๋ฌํ ์ ์์ต๋๋ค.
https://play.golang.org/p/4JZOIG5PbRX
๊ฐ์ ์ฌ์ ๋ ฌํด๋ ์ฝ๋๊ฐ ์์๋์ง ์์ต๋๋ค( ๋์ iota
๊ฐ ๊น๋ค๋กญ์ต๋๋ค)
์ฝ๋ ์์ฑ๊ธฐ๊ฐ ํ์ ์์
์ง๋์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค
https://play.golang.org/p/KlTNWrJpbDi
๋ฐ๋ณต๋ ์ ์๋ค
https://play.golang.org/p/ld3TNtenEkD
์ปดํ์ผ๋ฌ๊ฐ ๋ถํํ์ง ์๊ณ ์ต๋ช
๊ตฌ์กฐ์ฒด๋ฅผ getTask
์ ์ ๋ฌํ ์ ์์ต๋๋ค.
https://play.golang.org/p/NaV38og7e2h
์์ ๊ตฌ์กฐ์ฒด๋ ์ง์๋์ง ์์ผ๋ฉฐ var
๋ง ์ง์๋ฉ๋๋ค.
https://play.golang.org/p/X6KSpACA4N0
๋๊ตฐ๊ฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ผ์ ํ์ง ๋ชปํ๋๋ก ๋ง๋ ๊ฒ:
NotADay := Day{"NotADay"}
getTask(NotADay)
๊ทธ๋ฌํ ๋ณ์์ ์๋น์๋ ์์ ๊ฐ์ ์ ์ ํ๊ฒ ํ์ธํ์ฌ ์ด๋ฅผ ํฌ์ฐฉํ ์๋ ์๊ณ ํฌ์ฐฉํ์ง ๋ชปํ ์๋ ์์ต๋๋ค(์๋ฅผ ๋ค์ด ํ ์์ผ์ด๋ ์ผ์์ผ์ด ์๋ ๊ฒ์ ํ์ผ์ธ ๊ฒ์ฒ๋ผ switch ๋ฌธ์ ๊ฐ์ ์ ํตํด ๋์ ํ๋ฝ์ด ์๋ค๊ณ ๊ฐ์ ). ๋ฐํ์๊น์ง. ๋ฐํ์์ด ์๋ ์ปดํ์ผ ํ์์ ์ด๋ฐ ์ ํ์ ์ค์๋ฅผ ์ก๋ ๊ฒ์ด ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
@bpkroth
์์ฒด ํจํค์ง์ Day
์ด ์๊ณ ์ ํํ ํ๋ ๋ฐ ๋ฉ์๋๋ง ๋
ธ์ถํ๋ฉด package day
Day
์ ํ์ ์ ๊ฐ์ ๋ง๋ค ์ ์์ต๋๋ค.
๋ํ ์ด ๋ฐฉ๋ฒ์ผ๋ก ์ต๋ช
๊ตฌ์กฐ์ฒด๋ฅผ getTask
์ ์ ๋ฌํ ์ ์์ต๋๋ค.
./day/day.go
package day
type Day struct {
value string
}
func (d Day) String() string { return d.value }
var (
Monday = Day{"Monday"}
Tuesday = Day{"Tuesday"}
Days = []Day{Monday, Tuesday}
)
./main.go
package main
import (
"fmt"
"github.com/somePath/day"
)
func main() {
january := day.Day{"january"} // implicit assignment of unexported field 'value' in day.Day literal
var march struct {
value string
}
march.value = "march"
getTask(march) // cannot use march (type struct { value string }) as type day.Day in argument to getTask
getTask(day.Monday)
}
func getTask(d day.Day) string {
if d == day.Monday {
fmt.Println("today is ", d, "!") // today is Monday !
return "running"
}
return "nothing to do"
}
func iterateDays() {
for _, d := range day.Days {
fmt.Println(d)
}
}
์ด๊ฑฐํ, ์ผํญ ์ฐ์ฐ์, ์ฌ์ฉํ์ง ์๋ ๋ณ์๋ฅผ ์ฌ์ฉํ ์ปดํ์ผ, ํฉ๊ณ ์ ํ, ์ ๋ค๋ฆญ, ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์ ๋ฑ๊ณผ ๊ฐ์ ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ์ ์ฉํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ง ์์ ๊ฒ์ ์ฃผ์ฅํ๋ ๋ค๋ฅธ ์ธ์ด๋ ํ์ ๋ณธ ์ ์ด ์์ต๋๋ค.
Golang์ ๊ฐ๋ฐ์๊ฐ ์ผ๋ง๋ ๋ฉ์ฒญํ ์ ์๋์ง ์์๋ณด๊ธฐ ์ํ ์ฌํ์ ์คํ์ ๋๊น?
@gh67uyyghj ๋๊ตฐ๊ฐ ๊ทํ์ ๋๊ธ์ ์ฃผ์ ๊ฐ ์๋ ๊ฒ์ผ๋ก ํ์ํ์ต๋๋ค! ๋๊ตฐ๊ฐ ๋ด ๋๋ต์ ๋๊ฐ์ด ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง ๊ทํ์ ์ง๋ฌธ์ ๋ํ ๋๋ต์ YES๋ผ๊ณ ์๊ฐํฉ๋๋ค. GoLang์์ ๊ธฐ๋ฅ์ด ์๋ค๋ ๊ฒ์ ๊ธฐ๋ฅ์ด ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฏ๋ก GoLang์ ์๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ค์ ๋ก ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์๋ ์๋ GoLang์ ๊ธฐ๋ฅ์ ๋๋ค!!
@L-oris ์ด๊ฒ์ ์ด๊ฑฐํ์ ์ ํ์ผ๋ก ๊ตฌํํ๋ ๋งค์ฐ ํฅ๋ฏธ๋ก์ด ๋ฐฉ๋ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด์ํ๊ฒ ๋๊ปด์ง๋ฉฐ enum ํค์๋(ํ์ฐ์ ์ผ๋ก ์ธ์ด๋ฅผ ์ข ๋ ๋ณต์กํ๊ฒ ํจ)๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์์ ๋ ์ฝ๊ฒ ์ํํ ์ ์์ต๋๋ค.
๊ทํ์ ์์์ (์ค๋๋ ์๋ํ๊ธฐ ๋๋ฌธ์ ํ๋ฅญํจ) ์ด๊ฑฐ ํ (์ด๋ค ํํ๋ก๋ )์ ๊ฐ๋ ๊ฒ์ ๋ค์์ด ํ์ํจ์ ์๋ฏธํฉ๋๋ค.
์ด๊ฒ์ ์ฝ๊ณ , ์ฐ๊ณ , ์ถ๋ก ํ๋ ๋ฐ ๋ ์ค๋ ๊ฑธ๋ฆฝ๋๋ค(ํจ์ฌ ๋ ๊ธธ์ง๋ ์์ง๋ง).
๋ฐ๋ผ์ ๊ตฌ๋ฌธ ์ ์์ ์ธ์ด์ ๋จ์์ฑ๊ณผ ๋ถ๊ฐ ๊ฐ์น ์ธก๋ฉด์์ ์ฌ๋ฐ๋ฅธ ๋ฉ๋ชจ๋ฅผ ์ ๊ณตํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@andradei ๊ฐ์ฌํฉ๋๋ค
์, ํด๊ฒฐ ๋ฐฉ๋ฒ์ด์ง๋ง ์ธ์ด์ ๋ชฉํ๋ ์๊ณ ๋จ์ํ๊ฒ ์ ์งํ๋ ๊ฒ์
๋๋ค.
์์
์ ๋์น๊ณ ์๋ค๊ณ ์ฃผ์ฅํ ์๋ ์์ง๋ง Java๋ก ์ด๋ํด ๋ณด๊ฒ ์ต๋๋ค. :)
์ฐจ๋ผ๋ฆฌ Go 2 ์ ์, ๋ ๋์ ์ค๋ฅ ์ฒ๋ฆฌ์ ์ง์คํ๊ณ ์ถ์ต๋๋ค. ์ด ์ด๊ฑฐ ํ๋ณด๋ค ๋ ๋ง์ ๊ฐ์น๋ฅผ ์ ๊ณต ํ ๊ฒ์ ๋๋ค.
๊ทํ์ ์์ ์ผ๋ก ๋์๊ฐ๊ธฐ:
package day
// Day Enum
type Day struct {
value string
}
@L-oris ์๊ฒ ์ต๋๋ค. Go 2์ ์ ์๋ ๊ธฐ๋๋ฉ๋๋ค. ๋๋ ์ ๋ค๋ฆญ์ด ์ด๊ฑฐํ๋ณด๋ค ์ธ์ด์ ๋ณต์ก์ฑ์ ๋ ์ฆ๊ฐ์ํฌ ๊ฒ์ด๋ผ๊ณ ์ฃผ์ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทํ์ ์์ ์ ๊ณ ์ํ๋ ค๋ฉด ๋ค์์ ์ํํ์ญ์์ค.
๋๋ ์ด ์ ์์ ๋ํด ๋ง์ ์๊ฐ์ ํ๊ณ , ๋จ์ํจ์ด ์์ฐ์ฑ์ ํฐ ๊ฐ์น๊ฐ ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ถ๋ช ํ ํ์ํ ๋ณ๊ฒฝ์ด ์๋ ํ ์ ์งํ๋ ค๋ ์ด์ ๋ฅผ ์ ์ ์์ต๋๋ค. ์ด๊ฑฐํ์ ๋ํ ์ธ์ด๋ฅผ ๋๋ฌด ๊ธ๊ฒฉํ๊ฒ ๋ณ๊ฒฝํ์ฌ ๋ ์ด์ Go๊ฐ ์๋ ์ ์์ผ๋ฉฐ, ์ด์ ๋ํ ์ฅ๋จ์ ์ ํ๊ฐํ๋ ๋ฐ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋์ ๋๋ ์ฝ๋๊ฐ ์ฌ์ ํ ์ฝ๊ธฐ ์ฌ์ด ๋น์ ๊ณผ ๊ฐ์ ๊ฐ๋จํ ์๋ฃจ์ ์ด ์ ์ด๋ ํ์ฌ๋ก์๋ ์ข์ ์๋ฃจ์ ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
์ฌ๋ฌ๋ถ, ๋ฏธ๋์ ์ด ๊ธฐ๋ฅ์ ์ ๋ง ์ํฉ๋๋ค!. _์์ฆ_์์ ํฌ์ธํฐ ์ " ์ด๊ฑฐํ "์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ์ ์ด์ธ๋ฆฌ์ง ์์ต๋๋ค. ์: https://play.golang.org/p/A7rjgAMjfCx
enum์ ๋ํ ์ ์ ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ์๋ก์ด ์ ํ์ผ๋ก ๊ฐ์ฃผํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์์์ ๊ตฌ์กฐ์ ๋ค์ ๊ตฌํ์ผ๋ก ์ด๊ฑฐํ์ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค.
package application
type Status struct {
Name string
isFinal bool
}
enum Status {
Started = &Status{"Started",false}
Stopped = &Status{"Stopped",true}
Canceled = &Status{"Canceled",true}
}
// application.Status.Start - to use
์ด ๊ตฌ์กฐ๋ฅผ ์ด๋ป๊ฒ ๋ง์ฌ๋งํ๊ณ ์ด๋ป๊ฒ ์๋ํ๋์ง, ์ด๋ป๊ฒ ๋ฌธ์์ด๋ก ๋ณ๊ฒฝํ๋์ง ๋ฑ์ ์ดํดํ ์ ์์ต๋๋ค.
๋ฌผ๋ก "๋ค์" ๊ธฐ๋ฅ์ ์ฌ์ ์ํ ์ ์๋ค๋ฉด ํ๋ฅญํ ๊ฒ์
๋๋ค.
์ด๋ฅผ ์ํด Go๋ ๋จผ์ ๊น์ ๋ถ๋ณ ๊ตฌ์กฐ์ฒด๋ฅผ ์ง์ํด์ผ ํฉ๋๋ค. ๋ถ๋ณ ์ ํ์ด ์์ผ๋ฉด ์ด๊ฑฐํ์ผ๋ก ์ด ์์ ์ ์ํํ์ฌ ๋์ผํ ๊ฒ์ ๊ฐ์ง ์ ์๋ค๊ณ ์์ํ ์ ์์ต๋๋ค.
type Status enum {
Started
Stopped
}
func isFinal(s Status) bool {
exhaustive switch(s) {
case Started: return false;
case Stopped: return true;
}
}
๋ ์ฌํํด ๋ณด์ฌ์ผ ํ ๊ฒ ๊ฐ์์
func isFinal(s Status) bool {
return s == Status.Stopped
}
๋
ผ๋ฆฌ์ ์ผ๋ก ์ด๊ฑฐํ์ ์ ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค.
์ด์ ์ด๊ฑฐํ์ ๋ถ๋ฆฌ๋์ด์ผ ํ๋ค๊ณ ์ธ๊ธํ์ต๋๋ค.
ํน์ ๋ค์์คํ์ด์ค์ ์ฐ๊ฒฐ๋ ๋ช
์์ ์ผ๋ก ๋ช
๋ช
๋ ์์์
๋๋ค.
enum Status uint8 {
Started // Status.Started == 0
Stopped // Status.Stopped == 1, etc, like we have used iota
}
// or
enum Status string {
Started // Status.Started == "Started", like it works with JSON
Stopped // Status.Stopped == "Stopped", etc
}
// unless you wanna define its values explicitly
enum Status {
Started "started" // compiler can infer underlying type
Stopped "finished"
}
// and enums are type extensions and should be used like this
type MyStatus Status
MyStatus validatedStatus // holds a nil until initialized
// for status value validation we can use map pattern
if validatedStatus, ok := MyStatus[s]; ok {
// this value is a valid status
// and we can use it later as regular read-only string
// or like this
if validatedStatus == MyStatus.Started {
fmt.Printf("Hey, my status is %s", validatedStatus)
}
}
์ด๊ฑฐํ์ "์์ ์ปจํ ์ด๋"์ธ ์ ํ ํ์ฅ์ ๋๋ค.
์ ํ์ผ๋ก ๋ณด๊ณ ์ถ์ ์ฌ๋๋ค์ ์ํ ๊ตฌ๋ฌธ ๋์
type Status uint8 enum {
Started // Status.Started == 0
Stopped // Status.Stopped == 1, etc, like we have used iota
}
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๋ํ ๋ช ์์ ์ธ ์ต์์ ์ ์ธ์ ํผํ ์ ์์ต๋๋ค.
type Status enum {
Started // Status.Started == 0
Stopped // Status.Stopped == 1, etc, like we have used iota
}
์ ํจ์ฑ ๊ฒ์ฌ ์๋ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ฒฝ์ฐ์
type Status1 uint8 enum {
Started // Status1.Started == 0
Stopped // Status1.Stopped == 1, etc, like we have used iota
}
type Status2 uint8 enum {
Started // Status1.Started == 0
Stopped // Status1.Stopped == 1, etc, like we have used iota
}
Status1.Started == Status2.Started๋ ์ด๋ป์ต๋๊น?
๋ง์ฌ๋ง์ ๋ํด?
ํฌ์ง์ ์ ๋ฐ๊พธ๋ฉด?
type Status uint8 enum {
Started // Status.Started == 0
InProcess
Stopped // Status.Stopped == 1, etc, like we have used iota
}
๋๋ ๋ถ๋ณ ์ ํ์ ๋ํด @Goodwine ์ ๋์ํฉ๋๋ค.
๋ง์ฌ๋ง์ ํฅ๋ฏธ๋ก์ด ์ง๋ฌธ์
๋๋ค.
์ด๊ฒ์ ๋ชจ๋ ๊ธฐ๋ณธ ๊ฐ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ์ง์ ๋ฌ๋ ค ์์ต๋๋ค. ์ค์ ๊ฐ์ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ Status1.Started
๋ Status2.Started
์ ๊ฐ์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ์์ง์ ํด์์ ํ๋ค๋ฉด ๊ทธ๊ฒ๋ค์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๊ฐ์ฃผ๋ ๊ฒ์
๋๋ค.
๋ฌด์ธ๊ฐ๋ฅผ ์ฝ์
ํ๋ฉด ๊ฐ์ด ๋ณ๊ฒฝ๋ฉ๋๋ค( iota
์ ๋์ผํ ๋ฐฉ์).
์ด๋ฅผ ํผํ๊ธฐ ์ํด ๊ฐ๋ฐ์๋ ์ ์ธ๊ณผ ํจ๊ป ๊ฐ์ ์ง์ ํด์ผ ํฉ๋๋ค.
type Status uint8 enum {
Started 0
InProcess 2
Stopped 1
}
์ด๊ฒ์ ๋ถ๋ช
ํ ๊ฒ์
๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํผํ๋ ค๋ฉด ์ด๊ฑฐํ ๊ฐ์ ์ดํ ํด์์ ๊ธฐ๋ฐ์ผ๋ก ์์ธก ๊ฐ๋ฅํ ์ปดํ์ผ๋ฌ ์ถ๋ ฅ์ ์ ๊ณตํด์ผ ํฉ๋๋ค. ์ฌ์ฉ์ ์ ์ ์ ํ ์บ์คํ
์ด ์ ์๋์ง ์๋ ํ ํด์ ํ
์ด๋ธ์ ์์ฑํ๊ฑฐ๋ ๊ธฐํธ ์ด๋ฆ(๋ฌธ์์ด)์ ๊ณ ์ํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๊ฐ์ ํฉ๋๋ค.
Rust๊ฐ Enum์ ๊ตฌํํ๋ ๋ฐฉ์์ด ๋ง์์ ๋ญ๋๋ค.
์ ํ์ด ์ง์ ๋์ง ์์ ๊ธฐ๋ณธ๊ฐ
enum IpAddr {
V4,
V6,
}
์ฌ์ฉ์ ์ ์ ์ ํ
enum IpAddr {
V4(string),
V6(string),
}
home := IpAddr.V4("127.0.0.1");
loopback := IpAddr.V6("::1");
๋ณตํฉ ์ ํ
enum Message {
Quit,
Move { x: int32, y: int32 },
Write(String),
ChangeColor(int32, int32, int32),
}
C#์์์ ๊ฐ์ด ์ ์ ํ์์ผ๋ก ์ ์ฅ๋๋ ๊ฐ๋จํ ์ด๊ฑฐํ์ด ์์ด๋ ์ข์ ๊ฒ์ ๋๋ค.
์์ ๋ด์ฉ์ enum
๋ฅผ ๋์ด _discriminated unions_ ์
๋๋ค. ํนํ _pattern matching_์์ ๋ ๊ฐ๋ ฅํฉ๋๋ค. ์ด๋ switch
์ ๋ํ ์ฝ๊ฐ์ ํ์ฅ์ด ๋ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
switch something.(type) {
case Quit:
...
case ChangeColor; r, g, b := something:
...
case Write: // Here `something` is known to be a string
...
// Ideally Go would warn here about the missing case for "Move"
}
์ธ๊ธ ํ ๊ฒ์ฒ๋ผ ์ํ ํ ์ ์์ผ๋ฏ๋ก ์ด๊ฑฐ ํ์ ๋ํ ์ปดํ์ผ ์๊ฐ ๊ฒ์ฌ๊ฐ ํ์ํ์ง ์์ต๋๋ค.
์ฌ๋ฌ ๋ฒ ํ์ํ ๊ฒ์ ์ฃผ์ด์ง ์ ํ์ ๋ชจ๋ ์์๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ด์์ต๋๋ค.
iota๋ก ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํํ๊ณ ๋ชฉ๋ก์ ๋์ ์ง์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฝ๋ ๋ด๋ถ ์ด์ธ์ ๋ค๋ฅธ ์ฉ๋๋ก iota๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ชป๋ ์ค์ ์์๋ฅผ ์ฝ์ ํ์ฌ ๋ด์ฉ์ด ์ค๋จ๋๊ธฐ ๋๋ฌธ์ ์๋นํ ์ํํฉ๋๋ค. ๋ค๋ฅธ ๊ฒ๋ค๋ณด๋ค ์ฐพ๊ธฐ๊ฐ ํจ์ฌ ๋ ์ด๋ ต์ต๋๋ค). ๋ํ ์์๊ฐ ์ซ์์ผ ๋ ์ค์ ๋ก ๋ฌด์์ ๋ํ๋ด๋์ง์ ๋ํ ์ค๋ช ์ด ์์ต๋๋ค. ๋ค์ ์์ ์ผ๋ก ์ด์ด์ง๋๋ค.
๋ฉ์ง ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ด๋ฆ์ stringify๋ก ์ง์ ํ๋ ๊ฒ์ ๋๋ค.
๋๊ตฐ๊ฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ผ์ ํ์ง ๋ชปํ๋๋ก ๋ง๋ ๊ฒ:
NotADay := Day{"NotADay"} getTask(NotADay)
๊ทธ๋ฌํ ๋ณ์์ ์๋น์๋ ์์ ๊ฐ์ ์ ์ ํ๊ฒ ํ์ธํ์ฌ ์ด๋ฅผ ํฌ์ฐฉํ ์๋ ์๊ณ ํฌ์ฐฉํ์ง ๋ชปํ ์๋ ์์ต๋๋ค(์๋ฅผ ๋ค์ด ํ ์์ผ์ด๋ ์ผ์์ผ์ด ์๋ ๊ฒ์ ํ์ผ์ธ ๊ฒ์ฒ๋ผ switch ๋ฌธ์ ๊ฐ์ ์ ํตํด ๋์ ํ๋ฝ์ด ์๋ค๊ณ ๊ฐ์ ). ๋ฐํ์๊น์ง. ๋ฐํ์์ด ์๋ ์ปดํ์ผ ํ์์ ์ด๋ฐ ์ ํ์ ์ค์๋ฅผ ์ก๋ ๊ฒ์ด ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
@L-oris ๊ทธ๋์ ์ด๊ฒ์ ๋ํด:
package main
import "yet/it/is/not/a/good/practice/in/Go/enum/example/day"
func main()
{
// var foo day.Day
foo := day.Day{}
bar(foo)
}
func bar(day day.Day)
{
// xxxxxxxxxx
}
์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ์ [return "nothing to do"]์ ์ํ ๋ฐํ์ ์นจ๋ฌต ๋ฐ ์ด์ํ ๋ฒ๊ทธ๊ฐ ์๋๋ผ ์ปดํ์ผ ํ์/์ฝ๋ฉ ํ์ ERROR REPORTING !
์ดํดํ๋ค?
enum
๋ ์ค์ ๋ก ์๋ก์ด ์ ํ์
๋๋ค. type State string
๊ฐ ํ๋ ์ผ์ด๋ฏ๋ก ๊ด์ฉ์ ์ผ๋ก ์ ํค์๋๋ฅผ ๋์
ํ ํ์๊ฐ ์์ต๋๋ค. Go๋ ์์ค ์ฝ๋์ ๊ณต๊ฐ์ ์ ์ฝํ๋ ๊ฒ์ด ์๋๋ผ ๊ฐ๋
์ฑ, ๋ชฉ์ ์ ๋ช
ํ์ฑ์ ๊ดํ ๊ฒ์
๋๋ค.
์ ํ ์์ ์ฑ ๋ถ์กฑ, ์ค์ ๋ฌธ์์ด/int์ ๋ํ ์๋ก์ด string
- ๋๋ int
๊ธฐ๋ฐ ์ ํ์ ํผ๋ํ๋ ๊ฒ์ด ํต์ฌ ์ฅ์ ๋ฌผ์
๋๋ค. ๋ชจ๋ ์ด๊ฑฐํ ์ ์ const
๋ก ์ ์ธ๋์ด ์ปดํ์ผ๋ฌ๊ฐ ํ์ธํ ์ ์๋ ์๋ ค์ง ๊ฐ ์งํฉ์ ๋ง๋ญ๋๋ค.
Stringer
์ธํฐํ์ด์ค๋ ๋ชจ๋ ์ ํ์ ์ฌ๋์ด ์ฝ์ ์ ์๋ ํ
์คํธ๋ก ๋ํ๋ด๋ ๊ด์ฉ๊ตฌ์
๋๋ค. ์ฌ์ฉ์ ์ ์ ์์ด type ContextKey string
์ด๊ฑฐํ์ ์ด๊ฒ์ด ๋ฌธ์์ด ๊ฐ์ด๊ณ iota
-generated ์ด๊ฑฐํ์ ๊ฒฝ์ฐ JavaScript์ XHR ReadyState ์ฝ๋ (0 - ๋ฏธ์ ์ก, 4 - ์๋ฃ)์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์์
๋๋ค.
์คํ๋ ค ๋ฌธ์ ๋ ์ฌ์ฉ์ ์ ์ func (k ContextKey) String() string
๊ตฌํ์ ์ค๋ฅ ๊ฐ๋ฅ์ฑ์ ์์ต๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ ค์ง ๋ชจ๋ ์ด๊ฑฐํ ์ ์์๋ฅผ ํฌํจํด์ผ ํ๋ ์ค์์น๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค.
Swift์ ๊ฐ์ ์ธ์ด์๋ _exhaustive switch_๋ผ๋ ๊ฐ๋
์ด ์์ต๋๋ค. ์ด๊ฒ์ const
์งํฉ์ ๋ํ ์ ํ ๊ฒ์ฌ์ ํด๋น ๊ฒ์ฌ๋ฅผ ํธ์ถํ๋ ๊ด์ฉ์ ๋ฐฉ๋ฒ์ ๊ตฌ์ถํ๋ ๋ฐ ๋ชจ๋ ์ข์ ์ ๊ทผ ๋ฐฉ์์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ์ํ String()
ํจ์๋ ๊ตฌํํ๊ธฐ์ ์ข์ ์ฌ๋ก์
๋๋ค.
package main
import (
"context"
"strconv"
"fmt"
"os"
)
// State is an enum of known system states.
type DeepThoughtState int
// One of known system states.
const (
Unknown DeepThoughtState = iota
Init
Working
Paused
ShutDown
)
// String returns a human-readable description of the State.
//
// It switches over const State values and if called on
// variable of type State it will fall through to a default
// system representation of State as a string (string of integer
// will be just digits).
func (s DeepThoughtState) String() string {
// NEW: Switch only over const values for State
switch s.(const) {
case Unknown:
return fmt.Printf("%d - the state of the system is not yet known", Unknown)
case Init:
return fmt.Printf("%d - the system is initializing", Init)
} // ERR: const switch must be exhaustive; add all cases or `default` clause
// ERR: no return at the end of the function (switch is not exhaustive)
}
// RegisterState allows changing the state
func RegisterState(ctx context.Context, state string) (interface{}, error) {
next, err := strconv.ParseInt(state, 10, 32)
if err != nil {
return nil, err
}
nextState := DeepThoughtState(next)
fmt.Printf("RegisterState=%s\n", nextState) // naive logging
// NEW: Check dynamically if variable is a known constant
if st, ok := nextState.(const); ok {
// TODO: Persist new state
return st, nil
} else {
return nil, fmt.Errorf("unknown state %d, new state must be one of known integers", nextState)
}
}
func main() {
_, err := RegisterState(context.Background(), "42")
if err != nil {
fmt.Println("error", err)
os.Exit(1)
}
os.Exit(0)
return
}
PS Swift ์ด๊ฑฐํ์ ๊ด๋ จ ๊ฐ์ ์ ๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ํน์ ํจ๊ณผ ์ค ํ๋์
๋๋ค. Go์์๋ ๊ทธ๋ค์ ์ํ ์๋ฆฌ๊ฐ ์์ต๋๋ค. ์ด๊ฑฐํ ๋ฐ์ดํฐ ์์ ๊ฐ์ ๊ฐ๊ณ ์ถ๋ค๋ฉด โ ๋ ๊ฐ๋ฅผ ๊ฐ์ธ๋ ๊ฐ๋ ฅํ ํ์์ struct
๋ฅผ ์ฌ์ฉํ์ธ์.
๋ช ๋ฌ ์ ์ ๋๋ ์ด๊ฑฐ๋ ์ ํ์ด ์ ๋๋ก ์ฒ๋ฆฌ๋๋์ง ํ์ธํ๋ ๋ฆฐํฐ์ ๋ํ ๊ฐ๋ ์ฆ๋ช ์ ์์ฑํ์ต๋๋ค. https://github.com/loov/enumcheck
ํ์ฌ ์ฃผ์์ ์ฌ์ฉํ์ฌ ํญ๋ชฉ์ ์ด๊ฑฐํ์ผ๋ก ํ์ํฉ๋๋ค.
type Letter byte // enumcheck
const (
Alpha Letter = iota
Beta
Gamma
)
func Switch(x Letter) {
switch x { // error: "missing cases Beta and Gamma"
case Alpha:
fmt.Println("alpha")
case 4: // error: "implicit conversion of 4 to Letter"
fmt.Println("beta")
default: // error: "Letter shouldn't have a default case"
fmt.Println("default")
}
}
๋ชจ๋ ์์์ ๋ณํ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ด๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์์ง๋ง ๊ธฐ๋ณธ์ ์ธ ๊ฒฝ์ฐ์๋ ์ ๋๋ก ์๋ํฉ๋๋ค.
์ฐธ๊ณ ๋ก, ํ์ฌ๋ ์์ง ์์ ์ค์ด๋ฏ๋ก ์ํฉ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฃผ์ ๋์ ์ ํ์ ์ฃผ์์ ์ถ๊ฐํ๊ธฐ ์ํด ์ผ๋ถ ์คํ ํจํค์ง๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ์ฃผ์์ ํ์ฌ ์ถฉ๋ถํฉ๋๋ค.
ํ์ฌ Go1์ ์ด๊ฑฐํ ๊ตฌํ์ ๋ด๊ฐ ์๊ณ ์๋ ๋ชจ๋ ์ธ์ด์์ ๊ฐ์ฅ ์ด์ํ๊ณ ๊ฐ์ฅ ๋ถ๋ถ๋ช ํ ์ด๊ฑฐํ ๊ตฌํ์ ๋๋ค. C์กฐ์ฐจ๋ ๊ทธ๊ฒ๋ค์ ๋ ๋ฉ์ง๊ฒ ๊ตฌํํฉ๋๋ค. iota ๋ฌผ๊ฑด์ ํดํน์ฒ๋ผ ๋ณด์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ฒด iota๋ ๋ฌด์์ ์๋ฏธํฉ๋๊น? ๊ทธ ํค์๋๋ฅผ ์ด๋ป๊ฒ ์ธ์์ผ ํ ๊น์? Go๋ ๋ฐฐ์ฐ๊ธฐ ์ฌ์์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋จ์ง ๊ธฐ๋ฐํฉ๋๋ค.
@pofl :
Go ์ด๊ฑฐํ์ด ๊ฝค ์ด์ํ๋ค๋ ๋ฐ ๋์ํ์ง๋ง iota
๋ ์ค์ ๋ก๋ ์ผ๋ฐ์ ์ธ ์์ด ๋จ์ด์
๋๋ค.
์ด์คํ
_๋ช
์ฌ_
์๋ง๋ ๊ทธ๋ค์ ์ธ์ด์ ์ฌ์ฉ ์ธก๋ฉด์์ ์ ์ 1๋ก ๊ฐ๊ณ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ๊ธฐ์ ์๋ ์ด์ ์๊ฒฌ์ ๋ํ ๋ต๋ณ์ผ๋ก:
Go์์๋ ์ฐจ๋ณ๋ ๊ณต์ฉ์ฒด๋ฅผ ์ ๋ง ์ํ์ง๋ง ์ค์ ์ด๊ฑฐํ๊ณผ ๋ถ๋ฆฌ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ฌ ์ ๋ค๋ฆญ์ด ์งํ๋๊ณ ์๋ ๋ฐฉ์์ผ๋ก ์ธํฐํ์ด์ค์ ์ ํ ๋ชฉ๋ก์ ํตํด ์๋ณ๋ ๊ณต์ฉ์ฒด์ ๋งค์ฐ ์ ์ฌํ ๊ฒ์ ์ค์ ๋ก ์ป์ ์ ์์ต๋๋ค. #41716์ ์ฐธ์กฐํ์ญ์์ค.
Go์์ iota
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ APL์์์ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ธ์ฉ https://en.wikipedia.org/wiki/Iota :
์ผ๋ถ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(์: A+, APL, C++[6], Go[7])์์ iota(์๋ฌธ์ ๊ธฐํธ โณ ๋๋ ์๋ณ์ iota๋ก)๋ ์ฐ์ ์ ์ ๋ฐฐ์ด์ ๋ํ๋ด๊ณ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, APL โณ4์์๋ 1 2 3 4๊ฐ ๋ฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@md2perpe ์ด๊ฑฐํ์ด ์๋๋๋ค.
```๊ฐ๋ค
ํจํค์ง ๋ฉ์ธ
์์ (
"fmt"
)
ํจ์ ๋ฉ์ธ() {
์ ํ SearchRequest ์ ์
์์ (
๋ฒ์ฉ ๊ฒ์ ์์ฒญ = iota
ํธ๋ฌผ
)
}
````
Go๊ฐ ์ผ๋ฅ ์๋ฏผ์ผ๋ก์ ์ผ๋ถ ์ด๊ฑฐํ์ด ํ์ํ๋ค๋ @derekperkins ์ ๋ง์ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ์ด๋ป๊ฒ ์๊ฒผ์์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, Go 1 ์ ๋ฆฌ์ง์ ๋ถ์์ง ์๊ณ ๋ ๊ฐ๋ฅํ ๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค.