Alert
μ΄ κΈμ Claude Codeμ λμμ λ°μ μμ±λμμ΅λλ€
TL;DR
- Goλ λ³μ μ μΈ μ μλμΌλ‘ zero valueλ₯Ό ν λΉνλ©°, Pythonμ
Noneκ³Όλ λ€λ₯Έ κ°λ - μμμ νμ λ³νμ΄ μμ΄
float64(x)κ°μ λͺ μμ λ³ν νμvarλ zero value μ΄κΈ°νλ νμ λͺ μκ° νμν λ,:=λ λλ¨Έμ§ μν©μμ μ¬μ©- μ μΈ ν μ¬μ©νμ§ μμ λ³μλ μ»΄νμΌ μλ¬ λ°μ
- λ€μ΄λ°μ camelCase κΈ°λ°μ΄λ©° 첫 κΈμ λμλ¬Έμλ‘ κ³΅κ° λ²μ κ²°μ
1. Zero Value - Pythonμ Noneκ³Ό λ€λ₯Έ κ°λ
Goμμ λ³μλ₯Ό μ μΈλ§ νλ©΄ μλμΌλ‘ zero valueκ° ν λΉλλ€. νμ λ³ κΈ°λ³Έκ°μ λ€μκ³Ό κ°λ€.
| νμ | Zero Value |
|---|---|
int | 0 |
float64 | 0.0 |
string | "" (λΉ λ¬Έμμ΄) |
bool | false |
| pointer | nil |
Pythonμ λ³μλ₯Ό μ΄κΈ°ννμ§ μκ³ μ¬μ©νλ©΄ NameErrorκ° λ°μνλ€. Goλ μ μΈλ§ ν΄λ νμ κΈ°λ³Έκ°μ΄ μλ€.
# Python - μ΄κΈ°ν μμ΄ μ¬μ©νλ©΄ μλ¬
print(x) # NameError: name 'x' is not defined// Go - μ μΈλ§ ν΄λ zero valueκ° ν λΉλ¨
var x int
fmt.Println(x) // 0
var s string
fmt.Println(s) // "" (λΉ λ¬Έμμ΄)
var b bool
fmt.Println(b) // falseZero Valueμ μ₯μ
nil체ν¬λ μ΄κΈ°ν μ¬λΆλ₯Ό λ³λλ‘ νμΈν νμκ° μ€μ΄λ λ€- ꡬ쑰체(struct)μ λͺ¨λ νλλ zero valueλ‘ μ΄κΈ°νλλ―λ‘ μμ±μ μμ΄λ μμ νκ² μ¬μ© κ°λ₯
2. κΈ°λ³Έ νμ - μ μ, λΆλμμμ , λ¬Έμμ΄, λΆλ¦¬μΈ
μ μ
Goλ μ μ ν¬κΈ°λ₯Ό λͺ μν μ μλ€.
var a int // νλ«νΌμ λ°λΌ 32 λλ 64λΉνΈ
var b int8 // -128 ~ 127
var c int64 // -9223372036854775808 ~ 9223372036854775807
var d uint // λΆνΈ μλ μ μ
var e uint8 // 0 ~ 255μ€λ¬΄μμλ λλΆλΆ intλ₯Ό μ¬μ©νλ€. νΉλ³ν μ΄μ (λ©λͺ¨λ¦¬ μ΅μ ν, λ°μ΄λ리 νλ‘ν μ½ λ±)κ° μμΌλ©΄ ν¬κΈ°λ₯Ό λͺ
μν νμ μλ€.
Pythonμ μ μ ν¬κΈ°μ μ νμ΄ μλ€. 10 ** 1000λ κ·Έλ₯ λλ€. Goμμ κ°μ κ±Έ νλ €λ©΄ math/big ν¨ν€μ§κ° νμνλ€.
# Python - μ μ ν¬κΈ° μ ν μμ
x = 10 ** 1000 # μ λμν¨// Go - μ€λ²νλ‘μ° λ°μ
var x int64 = 9223372036854775807
x = x + 1 // μ€λ²νλ‘μ°: -9223372036854775808λΆλμμμ
var f1 float32 = 3.14
var f2 float64 = 3.14 // κΈ°λ³Έκ°, λλΆλΆ μ΄κ±Έ μ¬μ©λ¬Έμμ΄
Goμ λ¬Έμμ΄μ Pythonκ³Ό λ§μ°¬κ°μ§λ‘ immutableμ΄λ€. ν°λ°μ΄νμ λ°±ν± λ κ°μ§ λ°©μμΌλ‘ μμ±νλ€.
s1 := "hello\nworld" // ν°λ°μ΄ν: μ΄μ€μΌμ΄ν μνμ€ μ²λ¦¬
s2 := `hello\nworld` // λ°±ν±(raw string): μ΄μ€μΌμ΄ν 무μ, μ€λ°κΏ κ·Έλλ‘ ν¬ν¨μμμ λμ€λ
:=μ¬κΈ°μ
:=κ° μ²μ λμλ€. λ³μλ₯Ό μ μΈνλ©΄μ κ°μ ν λ²μ ν λΉνλ μ§§μ μ μΈ λ¬Έλ²μΌλ‘,s1 := "hello"λvar s1 = "hello"μ κ°λ€. μμΌλ‘ μμμ μμ£Ό λ±μ₯νλλ°,varμμ μ°¨μ΄μ μ ν κΈ°μ€μ 4λ²μμ λ°λ‘ μ 리νλ€.
Pythonμ r"..." raw stringκ³Ό Goμ λ°±ν±μ΄ λΉμ·ν μν μ΄λ€.
λΆλ¦¬μΈ
Goλ λ€λ₯Έ νμ
μ boolλ‘ μλ λ³ννμ§ μλλ€. Pythonμμ νν μ°λ truthy/falsy ν¨ν΄μ΄ Goμμλ ν΅νμ§ μλλ€.
# Python - truthy/falsy μλ λ³ν
x = 0
if not x: # λμν¨
print("zero")
items = []
if not items: # λμν¨
print("empty")// Go - λͺ
μμ λΉκ΅ νμ
x := 0
if x == 0 { // if x {} λ μ»΄νμΌ μλ¬
fmt.Println("zero")
}
items := []int{}
if len(items) == 0 { // if items {} λ μ»΄νμΌ μλ¬
fmt.Println("empty")
}byteμ rune β νΉμ μ©λμ μ μ λ³μΉ
Goμλ μ μ νμ μ€ μ΄λ¦μ λ°λ‘ λΆμ¬λ λ³μΉμ΄ λ κ°μ§ μλ€.
byte=uint8μ λ³μΉ. 0~255 μ¬μ΄μ 8λΉνΈ μ μ νλλ₯Ό λνλΈλ€.rune=int32μ λ³μΉ. μ λμ½λ λ¬Έμ(μ½λν¬μΈνΈ) νλλ₯Ό λνλΈλ€.
λ λ€ λ΄λΆμ μΌλ‘λ κ·Έλ₯ μ μμ§λ§, uint8/int32 λμ byte/runeμ μ°λ©΄ βμ΄ κ°μ΄ μ΄λ€ μ©λμΈμ§β μ½λμμ λ°λ‘ λλ¬λλ€.
byte β λ°μ΄λ리 λ°μ΄ν°λ₯Ό λ€λ£° λ
νμΌ μ½κΈ°, λ€νΈμν¬ ν΅μ , λ¬Έμμ΄ λ³ν λ± I/O κ΄λ ¨ ν¨μλ€μ λλΆλΆ []byte(λ°μ΄νΈ μ¬λΌμ΄μ€)λ₯Ό λ°ννλ€.
// νμΌ μ½κΈ° β κ²°κ³Όκ° []byte
data, err := os.ReadFile("config.json")
// λ¬Έμμ΄ β λ°μ΄νΈ λ³ν
b := []byte("hello")
fmt.Println(b) // [104 101 108 108 111]
fmt.Println(string(b)) // "hello"rune β λ¬Έμλ₯Ό λ€λ£° λ
UTF-8μμ λ¬Έμ νλκ° μ°¨μ§νλ λ°μ΄νΈ μλ λ¬Έμλ§λ€ λ€λ₯΄λ€.
| λ¬Έμ μ’ λ₯ | λ°μ΄νΈ μ | μμ |
|---|---|---|
| ASCII (μλ¬Έ, μ«μ, κΈ°νΈ) | 1λ°μ΄νΈ | A, 1, ! |
| μ λ½ λ¬Έμ (μ μΌνΈ λ±) | 2λ°μ΄νΈ | Γ±, ΓΌ |
| νκΈ, νμ, μΌλ³Έμ΄ | 3λ°μ΄νΈ | κ°, γ |
| μ΄λͺ¨μ§ | 4λ°μ΄νΈ | π |
runeμ΄ int32(4λ°μ΄νΈ)μΈ μ΄μ κ° μ¬κΈ°μ μλ€. μ΄λ€ λ¬Έμλ μ΅λ 4λ°μ΄νΈμ΄λ―λ‘, rune νλλ©΄ μ΄λ€ μ λμ½λ λ¬Έμλ λ΄μ μ μλ€. λ°λ©΄ byteλ 1λ°μ΄νΈλΌμ ASCIIλ§ 1:1 λμλκ³ , νκΈ 'κ°'λ byte 3κ°κ° νμνλ€.
s := "κ°"
fmt.Println(len(s)) // 3 β λ°μ΄νΈ μ
fmt.Println([]byte(s)) // [234 176 128] β byte 3κ°
fmt.Println([]rune(s)) // [44032] β rune 1κ°Pythonκ³Όμ μ°¨μ΄
Pythonμμλ
bytesμstrμ΄ μμ ν λ€λ₯Έ νμ μ΄λ€. Goμμbyteμruneμ μ μμ λ³μΉμΌ λΏμ΄λΌ νμ μμ€ν μ΄ κ΅¬λΆν΄μ£Όμ§ μλλ€. λμ κ°λ°μκ° μ΄λ¦μΌλ‘ μλλ₯Ό λλ¬λΈλ€.var b byte = 72 // "λ°μ΄λ리 λ°μ΄ν°"λΌλ μλ var r rune = 'κ°' // "λ¬Έμ μ²λ¦¬"λΌλ μλ var b2 uint8 = 72 // μ«μ μ°μ°? λ°μ΄νΈ? λͺ¨νΈν¨ var r2 int32 = 'κ°' // μ«μ μ°μ°? λ¬Έμ? λͺ¨νΈν¨
λ¬Έμμ΄μ rangeλ‘ μνν λ byteμ runeμ μ°¨μ΄κ° μ€μ λ‘ λλ¬λλλ°, μ΄ λΆλΆμ μ μ΄ κ΅¬μ‘° νΈμμ λ μμΈν λ€λ£¬λ€.
3. λͺ μμ νμ λ³ν
Goλ μμμ νμ λ³νμ΄ μλ€. μλ‘ λ€λ₯Έ νμ μ μ°μ°νλ©΄ μ»΄νμΌ μλ¬κ° λ°μνλ€.
# Python - μμμ λ³ν
result = 10 + 3.14 # intκ° μλμΌλ‘ floatλ‘ λ³ν
print(result) # 13.14// Go - μμμ λ³ν μμ
var x int = 10
var y float64 = 30.2
// z := x + y // μ»΄νμΌ μλ¬: mismatched types int and float64
var z float64 = float64(x) + y // λͺ
μμ λ³ν νμ
fmt.Println(z) // 40.2μ μ νμ λΌλ¦¬λ ν¬κΈ°κ° λ€λ₯΄λ©΄ λ³νμ΄ νμνλ€.
var a int32 = 10
var b int64 = 20
// c := a + b // μ»΄νμΌ μλ¬
c := int64(a) + b // OKμ μ΄λ κ² μ격ν κΉ
- μμμ λ³νμ μμμΉ λͺ»ν λ°μ΄ν° μμ€μ μΌμΌν¬ μ μλ€ (μ:
float64->intλ³ν μ μμμ λ²λ¦Ό)- Goλ λͺ μμ μΌλ‘ βλλ μ΄ λ³νμ μλνλ€βκ³ νννλλ‘ κ°μ νλ€
4. var vs := - μΈμ λ μ°λκ°
Goμμ λ³μλ₯Ό μ μΈνλ λ°©λ²μ ν¬κ² λ κ°μ§λ€.
var ν€μλ
var x int = 10 // νμ
κ³Ό κ°μ λͺ¨λ μ§μ
var x = 10 // νμ
μΆλ‘ (intλ‘ μΆλ‘ λ¨)
var x int // zero valueλ‘ μ΄κΈ°ν (x = 0)μ¬λ¬ λ³μλ₯Ό νλ²μ μ μΈν μλ μλ€.
var (
name string
age int
active bool
):= (μ§§μ μ μΈ)
x := 10 // var x = 10 κ³Ό λμΌ
name := "gopher" // var name = "gopher" κ³Ό λμΌ
:=μ νμ μΆλ‘ μ μ»΄νμΌ νμμ μΌμ΄λλ€
:=λ μ€λ₯Έμͺ½ κ°μ νμ μ λ³΄κ³ λ³μ νμ μ μλμΌλ‘ μ νλ€(10βint,"gopher"βstring). λ¨ μ΄ μΆλ‘ μ μ»΄νμΌ μμ μ μ€λ₯Έμͺ½ ννμμ νμ μ λ³΄κ³ λͺ» λ°λ κ²μ΄μ§, μ€ν μ€μ κ°μ λ°λΌ νμ μ΄ λ°λλ κ² μλλ€. Goλ μ μ νμ μΈμ΄μ΄κ³ ,:=λ νμ μ λ λ² μ°μ§ μκ² ν΄μ£Όλ λ¨μΆ λ¬Έλ²μΌ λΏμ΄λ€.x := 10 x = "hello" // μ»΄νμΌ μλ¬ β xλ μμν intPythonμ
x = 10μ λμ€μx = "hello"λ‘ λ°κΏλ λμ§λ§(λμ νμ ), Goμ:=λ λ³μμ μ μ νμ μ κ³ μ νλ€. κ·Έλμ μ»΄νμΌλ¬κ° μ»΄νμΌ μμ μ νμ μ μ μ μλ κ°(μ: λͺ¨μμ λͺ¨λ₯΄λ μΈλΆ JSON)μλ:=λ₯Ό μΈ μ μκ³ , κ·Έλ° κ²½μ°λ 07νΈμanyλ‘ λ€λ£¬λ€.
:=λ ν¨μ μμμλ§ μ¬μ© κ°λ₯νλ€. ν¨ν€μ§ λ 벨(ν¨μ λ°κΉ₯)μμλ λ°λμ varλ₯Ό μ¨μΌ νλ€.
package main
var packageLevel = "OK" // varλ§ κ°λ₯
// badVar := "μλ¬" // μ»΄νμΌ μλ¬: ν¨ν€μ§ λ 벨μμ := μ¬μ© λΆκ°
func main() {
localVar := "OK" // ν¨μ μμμλ := μ¬μ© κ°λ₯
fmt.Println(localVar)
}μ ν κΈ°μ€
| μν© | μ ν |
|---|---|
| zero valueλ‘ μ΄κΈ°ννκ³ μΆμ λ | var x int |
| νμ μ λͺ μμ μΌλ‘ μ§μ ν΄μΌ ν λ | var x float64 = 10 |
| ν¨ν€μ§ λ 벨 λ³μ | var |
| κ·Έ μΈ ν¨μ λ΄λΆ | := |
:= μ¬μ©μ νΌν΄μΌ νλ μν©
:=λ νΈλ¦¬νμ§λ§, λ€μ κ²½μ°μλ varκ° λ λ«λ€.
1. zero valueλ‘ μ΄κΈ°νν λ
:=λ₯Ό μ°λ©΄ λ°λμ μ€λ₯Έμͺ½μ κ°μ΄ μμ΄μΌ νλ€. zero valueκ° λͺ©μ μ΄λ©΄ varκ° μλλ₯Ό λͺ
ννκ² λλ¬λΈλ€.
var count int // "zero valueλ‘ μμνλ€"λ μλκ° λͺ
ν
count := 0 // λμμ κ°μ§λ§ 0μ΄ μλ―Έ μλ κ°μΈμ§ zero valueμΈμ§ λͺ¨νΈ2. νμ μ λͺ μν΄μΌ ν λ 리ν°λ΄1μ΄λ νμ λ―Έμ§μ μμλ₯Ό ν λΉν λ, κΈ°λ³Έ μΆλ‘ νμ μ΄ μνλ νμ κ³Ό λ€λ₯Ό μ μλ€.
var ratio float64 = 10 // 10μ΄μ§λ§ float64λ‘ μ¬μ©ν κ²μμ λͺ
μ
ratio := 10 // intλ‘ μΆλ‘ λ¨ β μλμ λ€λ₯Ό μ μμ3. μλμ μ€μλ₯Ό λ°©μ§ν λ
:=λ νμ μ λ³μλ₯Ό λ§λ€ μ μμ΄μ, λ°κΉ₯ λ³μλ₯Ό μμ νλ €λ€ μ€μλ‘ μ λ³μλ₯Ό λ§λ€κ² λλ€. varλ‘ μ μΈνλ©΄ μ΄νμλ =λ§ μ°κ² λλ―λ‘ μ΄λ° μ€μλ₯Ό μ€μΌ μ μλ€.
x := 10
if true {
x := 20 // μλ‘μ΄ xκ° μκΉ (λ°κΉ₯ xμ λ€λ₯Έ λ³μ!)
fmt.Println(x) // 20
}
fmt.Println(x) // 10 β λ°κΉ₯ xλ κ·Έλλ‘
// μλμ μΌλ‘ λ°κΉ₯ λ³μλ₯Ό μμ νλ €λ©΄ = μ¬μ©
x = 20μ 리
:=λ βμ λ³μ λ§λ€κΈ° + κ° ν λΉβμ λμμ νλ€varλ‘ λ¨Όμ μ μΈνλ©΄ μ΄ν=λ‘λ§ κ°μ λ°κΎΈλ―λ‘, μ λ³μκ° μκΈ°λ μ€μλ₯Ό λ°©μ§ν μ μλ€- κ°μ μ€μ½νμμ
:=λ₯Ό μ°λ©΄ κΈ°μ‘΄ λ³μλ₯Ό μ¬μ¬μ©νμ§λ§, μμͺ½ λΈλ‘(if,forλ±)μμ μ°λ©΄ μ λ³μκ° λ§λ€μ΄μ§λ€
5. μμ (const)
Goμμ μμλ μ½κ² λ§ν΄ 리ν°λ΄μ μ΄λ¦μ λΆμ΄λ λ°©λ²μ΄λ€. 3.14159λΌλ μ«μλ₯Ό μ½λ κ³³κ³³μ μ°λ λμ piλΌλ μ΄λ¦μ λΆμ¬μ μ°λ κ²μ΄λ€.
const pi = 3.14159
const greeting = "hello"
const isDebug = falseλ¨, Goμ constλ μ»΄νμΌ νμμ κ°μ νμ ν μ μλ κ²λ§ κ°λ₯νλ€. κ·Έλμ μμλ‘ μΈ μ μλ νμ
μ΄ μ νμ μ΄λ€.
// κ°λ₯: μ«μ, λ¬Έμμ΄, bool, rune
const maxRetry = 3
const name = "gopher"
// λΆκ°λ₯: λ°νμμ λ§λ€μ΄μ§λ κ°
// const items = []int{1, 2, 3} // μ»΄νμΌ μλ¬: slice
// const now = time.Now() // μ»΄νμΌ μλ¬: ν¨μ νΈμΆ κ²°κ³ΌJavaScriptμ constλ βμ¬ν λΉ κΈμ§βμ΄κ³ , Pythonμλ μμ const ν€μλκ° μλ€(λλ¬Έμ λ³μλͺ
MAX_SIZE = 100μ κ΄λ‘μΌ λΏ μ¬ν λΉμ΄ κ°λ₯νλ€). Goμ constλ λ λ€μ λ€λ₯΄κ² βμ»΄νμΌ νμμ κ°μ΄ κ²°μ λλ κ²λ§ νμ©βνλ μ§μ§ μμλ€.
νμ λ―Έμ§μ μμμ μ μ°ν¨
νμ
μ μ§μ νμ§ μμ μμλ 리ν°λ΄μ²λΌ μ μ°νκ² λμνλ€. const x = 10μμ 10μ΄ λ¦¬ν°λ΄μ΄λ―, xλ μμ§ νμ
μ΄ μ ν΄μ§μ§ μμ μνλ€. κ·Έλμ μ¬λ¬ νμ
μ λ³μμ ν λΉν μ μλ€.
const x = 10 // νμ
λ―Έμ§μ μμ β 리ν°λ΄ 10μ μ΄λ¦λ§ λΆμΈ κ²
var a int = x // OK
var b float64 = x // OK
var c int64 = x // OKνμ μ μ§μ νλ©΄ ν΄λΉ νμ μΌλ‘ κ³ μ λλ€.
const x int = 10
var a int = x // OK
// var b float64 = x // μ»΄νμΌ μλ¬: intλ₯Ό float64μ ν λΉ λΆκ°6. μ¬μ© μ νλ©΄ μ»΄νμΌ μλ¬
Goλ μ μΈν λ³μλ₯Ό μ¬μ©νμ§ μμΌλ©΄ μ»΄νμΌ μμ²΄κ° μ λλ€. importλ λ§μ°¬κ°μ§λ€.
func main() {
x := 10 // μ»΄νμΌ μλ¬: x declared and not used
}import "fmt" // μ»΄νμΌ μλ¬: "fmt" imported and not used
func main() {}Pythonμ λ―Έμ¬μ© λ³μλ importκ° μμ΄λ κ²½κ³ μ‘°μ°¨ λ¨μ§ μλλ€(λ¦°ν°λ₯Ό λ°λ‘ μ€μ νμ§ μλ ν). Goλ μΈμ΄ μ°¨μμμ κ°μ νλ€.
ν¨ν€μ§ λ 벨 λ³μλ μμΈ β κ·Έλμ λ μ£Όμν΄μΌ νλ€
μ¬κΈ°μ βν¨ν€μ§ λ 벨βμ΄λ ν¨μ λ°κΉ₯, νμΌ μ΅μμμ μ μΈνλ λ³μλ₯Ό λ§νλ€.
package main
var globalCount int // ν¨ν€μ§ λ 벨 λ³μ β ν¨μ λ°κΉ₯μ μ μΈ
func main() {
localVar := 10 // μ§μ λ³μ β ν¨μ μμ μ μΈ
}λ¬Έμ λ Go μ»΄νμΌλ¬κ° ν¨ν€μ§ λ 벨 λ³μλ λ―Έμ¬μ© κ²μ¬λ₯Ό νμ§ μλλ€λ κ²μ΄λ€. μ μΈλ§ ν΄λκ³ μ무 λ°μλ μ μ¨λ μ»΄νμΌμ΄ μ λλ€. μ»΄νμΌλ¬κ° μ‘μμ£Όμ§ μμΌλ μ£½μ μ½λκ° μμ΄κΈ° μ½λ€.
κ·Έλμ ν¨ν€μ§ λ 벨μμλ λ³μ μ μΈμ μ΅μννκ³ , κΌ νμνλ€λ©΄ μ¬μ€μ λ³κ²½νμ§ μμ κ°(μμμ κ°κΉμ΄ κ²)λ§ λλ κ²μ΄ μ’λ€.
_ λ‘ λͺ μμ 무μ
κ°μ λ°μμΌ νμ§λ§ μ¬μ©νμ§ μμ λλ _(blank identifier)λ₯Ό μ¬μ©νλ€.
// ν¨μκ° λ κ°μ λ°ννλλ° νλλ§ νμν λ
value, _ := someFunction()
// rangeμμ μΈλ±μ€κ° νμ μμ λ
for _, item := range items {
fmt.Println(item)
}Pythonμ _ κ΄λ‘μ λΉμ·νμ§λ§, Goμμλ μ΄κ±Έ μ μ°λ©΄ μ»΄νμΌ μλ¬κ° λλ μ νμ΄ μλλΌ νμλ€.
7. λ€μ΄λ° 컨벀μ
Goλ snake_caseκ° μλλΌ camelCaseλ₯Ό μ¬μ©νλ€.
// Go μ€νμΌ
userName := "gopher"
maxRetryCount := 3
isActive := true
// Python μ€νμΌ (Goμμλ λΉκΆμ₯)
// user_name := "gopher"
// max_retry_count := 3첫 κΈμ λμλ¬Έμ = κ³΅κ° λ²μ
Goμμ κ°μ₯ λ νΉν λ€μ΄λ° κ·μΉμ΄λ€. 첫 κΈμκ° λλ¬Έμλ©΄ exported(λ€λ₯Έ ν¨ν€μ§μμ μ κ·Ό κ°λ₯), μλ¬Έμλ©΄ unexported(ν¨ν€μ§ λ΄λΆ μ μ©)μ΄λ€.
package user
var MaxAge = 150 // exported: λ€λ₯Έ ν¨ν€μ§μμ user.MaxAgeλ‘ μ κ·Ό κ°λ₯
var defaultRole = "guest" // unexported: ν¨ν€μ§ λ΄λΆμμλ§ μ¬μ©
func GetName() string { ... } // exported
func validate() bool { ... } // unexportedPythonμμλ _ μ λμ¬λ‘ λΉκ³΅κ°λ₯Ό νμνλ κ΄λ‘κ° μμ§λ§, μ€μ λ‘ μ κ·Όμ λ§μ§λ μλλ€.
# Python - κ΄λ‘μ λΉκ³΅κ° (μ€μ λ‘λ μ κ·Ό κ°λ₯)
class User:
def __init__(self):
self._name = "private" # κ΄λ‘μ λΉκ³΅κ°
self.__secret = "hidden" # name mangling (μ¬μ ν μ κ·Ό κ°λ₯)
u = User()
print(u._name) # μ κ·Ό κ°λ₯ (κ²½κ³ λ§)
print(u._User__secret) # μ΄κ²λ μ κ·Ό κ°λ₯Goλ μ»΄νμΌλ¬κ° μ κ·Ό μ μ΄λ₯Ό κ°μ νλ€. unexported μλ³μλ λ€λ₯Έ ν¨ν€μ§μμ μμ μ¬μ©ν μ μλ€.
μμ½: Python vs Go λ€μ΄λ°
- Python:
snake_case,_prefixλ‘ λΉκ³΅κ° νμ (κ΄λ‘)- Go:
camelCase, 첫 κΈμ λλ¬Έμ/μλ¬Έμλ‘ κ³΅κ° λ²μ κ²°μ (μ»΄νμΌλ¬ κ°μ )
Footnotes
-
리ν°λ΄(literal)μ μ½λμ μ§μ μ΄ κ° κ·Έ μ체λ₯Ό λ§νλ€.
42,"hello",3.14κ°μ κ²λ€μ΄ 리ν°λ΄μ΄λ€. λ³μλͺ μ κ°μ κ°λ¦¬ν€λ μ΄λ¦μ΄κ³ , 리ν°λ΄μ μ΄λ¦ μμ΄ μ½λμ λ°ν μλ λ κ²μ κ°μ΄λ€. β©