Upstream 54 UUID KO - teamswyg/laya-tools GitHub Wiki
PDCA54: UUID μμ²κ³Ό λ 립 κ²μ¦ κ³μ½
μ΄ μμ
μ κ³΅κ° ν보 go53-uuid-canonical-parseλ₯Ό μ€μ κ²μ¬ν μ μλ μμ μ½λ μμ
μΌλ‘ μ€λΉν κ°λ° κΈ°λ‘μ
λλ€. λͺ¨λΈμ΄ μ΄ μμ
μ νμκ±°λ λμ΄λλ₯Ό μμλλ€λ κΈ°λ‘μ μλλλ€. 120κ° μμ² μ‘°μ¬μ μλ ν보λ₯Ό μ λ΅Β·νμ΅ μλ£λ‘ λ°κΎΈμ§ μμ΅λλ€.
μλ μ½λμ μ μμ μ μ°¨μ΄
μμ²μ google/uuidμ κ³ μ revisionμ
λλ€. μλ³Έ uuid.goμ Parseμ ParseBytesλ νμ΄νμ΄ μλ λ¬Έμμ΄, λλ¬Έμ, 32μ리 μμ 16μ§μ, URNμ νμ©ν©λλ€. 38λ°μ΄νΈ μ
λ ₯μμλ μλ€ λ¬Έμλ₯Ό μ§μ κ²μ¬νμ§ μμ [...] κ°μ ν¬μ₯λ νμ©ν©λλ€. μΌλΆ λ€μͺ½ μ€λ₯μμλ μ΄λ―Έ μ½μ UUIDμ μΌλΆμ μ€λ₯λ₯Ό ν¨κ» λ°νν μ μμ΅λλ€.
μ μμ
μ μλ³Έμ κ·Έλλ‘ λ μ± ParseCanonical(s string) (UUID, error) νλλ₯Ό μΆκ°νλ κ²μ
λλ€. μ΄ APIλ μλ¬Έμ ASCII 16μ§μμ μ§μ λ λ€ νμ΄νμΌλ‘ μ΄λ£¨μ΄μ§ μ νν 36λ°μ΄νΈ μ
λ ₯λ§ νμ©ν©λλ€. μλͺ»λ μ
λ ₯μμλ μ΄λ μμΉμμ μ€ν¨νλ μ€λ₯μ 0 UUIDλ₯Ό λ°νν©λλ€. μ μ μ
λ ₯μ λ²μ Β·variant λΉνΈλ μ ννμ§ μμ λͺ¨λ 0μΈ κ°κ³Ό λͺ¨λ 1μΈ κ°λ λ°μ΅λλ€. μλ APIλ₯Ό μ격νκ² λ°κΎΈλ μμ
μ΄ μλλλ€.
μμ²Β·λΌμ΄μ μ€ λ²μ
| νλͺ© | μ΄λ²μ κ³ μ ν λ²μ |
|---|---|
| μμ² revision | 2d3c2a9cc518326daf99a383f07c4d3c44317e4d |
| νμΌ | μλ³Έ Go νμΌ 23κ°(μλ³Έ ν
μ€νΈ νμΌ 7κ° ν¬ν¨), go.mod, LICENSE: ν©κ³ 25κ° |
| λ¬΄κ²°μ± | κ° νμΌμ SHA-256κ³Ό κ³΅κ° Git blob μλ³μλ₯Ό λͺ¨λ νμΈ |
| μΈλΆ μμ‘΄μ± | μ΄ μ½λ ν¨ν€μ§μ importsλ νμ€ λΌμ΄λΈλ¬λ¦¬λΏ |
| λΌμ΄μ μ€ | μλ³Έ BSD-3-Clause LICENSE |
| NOTICE | νμΈν revisionμ μ 체 μμ² treeμ μμ. μμ NOTICEλ₯Ό λ§λ€μ§ μμ |
μλ³Έ LICENSEμ νμΌμ μλ Google μ μκΆ νκΈ°λ 볡μ¬λ³Έμ 보쑴ν©λλ€. LICENSEμ μ μκΆ μ°λλ 2009Β·2014μ΄λ©° uuid.goμ νκΈ°λ 2018μ
λλ€. time_test.goμ version6_test.goμλ λ³λ νμΌ ν€λκ° μλ€λ μ λ νμΈνμ΅λλ€. μ νν νμΌμμ λ³λ λΌμ΄μ μ€λ λ€λ₯Έ νλ‘μ νΈ λ³΅μ¬ νμλ λ°κ²¬νμ§ λͺ»νμ§λ§, μ΄κ²μ μ μ₯μ μ 체·미λ dependencyΒ·λ―Έλ λͺ¨λΈ λ°°ν¬μ λν μΌκ΄ λ²μ 보μ¦μ΄ μλλλ€. μμ€ μ¬λ°°ν¬ λ μλ³Έ μ μκΆΒ·μ‘°κ±΄Β·λ©΄μ±
μ‘°νμ 보쑴νκ³ , λ°μ΄λ리 λ°°ν¬ λλ ν΄λΉ 쑰건μ λ§λ κ³ μ§λ₯Ό μ 곡ν΄μΌ ν©λλ€.
μλ³Έ go.modλ λͺ¨λ μ μΈλ§ μμ΅λλ€. μλ³Έ λ°μ΄νΈλ κ³ μ νκ³ , 격리 μνμ© λ³΅μ¬λ³Έμλ μ λ’°ν λͺ¨λ μ΄λ¦ github.com/google/uuidμ Go 1.27.1μ λͺ
μν μ΅μ μ€ν λ μνΌλ₯Ό μλλ€. μμ² μ μ₯μλ₯Ό μμ νκ±°λ μλ‘μ΄ μμ‘΄μ±μ λ΄λ €λ°μ§ μμ΅λλ€.
κ²μ¦κΈ°κ° μ§μνλ ꡬν λ²μ
μ΄λ² κ²μ¦κΈ°λ μλ³Έ uuid.go 10,254λ°μ΄νΈ λλ μ λ’°ν Go 1.27.1 gofmtκ° μ κ·νν 10,251λ°μ΄νΈ 볡μ¬λ³Έμ μ νν μλΆλΆμΌλ‘ 보쑴νκ³ , λμ μ ν¨μ νλλ§ μΆκ°νλ ꡬνμ μ§μν©λλ€. μλ³Έμ΄ μ΅μ formatterμ 곡백 νμμ΄ λ¬λΌ, ꡬ쑰체 곡백과 λ¬Έμ μ£Όμμ μ€λ°κΏΒ·λ€μ¬μ°κΈ°λ§ μ κ·νν λ λ²μ§Έ μλΆλΆμ λ³λλ‘ κ³ μ νμ΅λλ€. κΈ°μ‘΄ μ½λμ μλ―Έμ μ μκΆ νκΈ°λ κ·Έλλ‘μ
λλ€. μ ν¨μλ λ‘컬 κ°Β·λ°λ³΅λ¬Έ, μλ³Έμ μμν Parse/xtob, μΌλΆ μμ νμ€ ν¨μμ λ³νλ§ μ¬μ©ν μ μμ΅λλ€. λμΒ·μ μ μν μ°κΈ°, μ μ λ°°μ΄μ λ³μΉ, ν¨μ λ³μΉμ ν΅ν νΈμΆ, ν¨μ 리ν°λ΄, ν¬μΈν°, λμμ±, λ³λ helper, μλ³Έ APIΒ·ν€λ νΈμ§μ μ§μ λ²μ λ°μ
λλ€.
μ§μ λ²μ λ° μ½λλ verifier_unknownμΌλ‘ λ¨κΉλλ€. λμμ΄ λ§λ λ²μ© ꡬνλ μ΄ λ²μλ₯Ό λ²μ΄λλ©΄ λͺ¨λΈμ μ€ν¨λ‘ μΈμ§ μμ΅λλ€. μ΄λ Go μ 체λ₯Ό λΆμνλ λ²μ© ν¨κ³Ό κ²μ¦κΈ°κ° μλλΌ, μμ κ³΅κ° μμ
μμ κ²μ¦νμ§ λͺ»ν ꡬνμ μμ νκ² κ΅¬λΆνλ μ νμ
λλ€. λ‘컬 λ³μ κ²μ¬λ μ΄λ¦λ§ λΉκ΅νμ§ μκ³ μ μΈ κ°μ²΄λ₯Ό μΆμ νμ¬, μμͺ½ λΈλ‘μ κ°μ μ΄λ¦μΌλ‘ μ μ μν μ°κΈ°λ₯Ό μ¨κΈ°λ κ²½μ°λ κ±°λΆν©λλ€.
λ 립 κ²μ¬μ κ°λ° λμ‘°κ΅°
νλ³΄κ° μ΄ ν μ€νΈλ μμ© κ·Όκ±°λ‘ μ¬μ©νμ§ μμ΅λλ€. μλ³Έ ν μ€νΈμ λ³λλ‘ λ€μ μ¬μ― κ²μ¬λ₯Ό μ λ’°ν μΈλΆ ν μ€νΈ ν¨ν€μ§μμ 곡κΈν©λλ€.
- 0Β·μ΅λκ°Β·μΌλ° κ°Β·λΉνΈ μ μ½μ΄ μλ κ³ μ μ λ ₯μ μ νν 16λ°μ΄νΈ κ²°κ³Ό.
- 36κ° μμΉ κ°κ°μμ κ°λ₯ν λ°μ΄νΈ 256κ°λ₯Ό λ°κΎΈλ 9,216κ°μ§ κ²μ¬. κΈ°λκ°μ μ§μ μ μν λ¬Έμ κ·μΉκ³Ό νμ€
encoding/hexλ‘ κ³μ°. - λλ¬ΈμΒ·URNΒ·μμ νμΒ·ν¬μ₯·곡백·μ λμ½λΒ·μλͺ»λ κΈΈμ΄ κ±°λΆ.
- λ€μͺ½ μλͺ»λ λ°μ΄νΈμμλ μ€λ₯μ 0 UUID λ°ν.
- κΈ°μ‘΄
Parse/ParseBytesμ νμ© νμκ³Ό μ€λ₯ μ’ λ₯ 보쑴. - λ°λ³΅Β·λμ νΈμΆμ κ²°κ³Ό, μ€μ ν λμ reader 보쑴, random poolμ λ΄μ©Β·μμΉΒ·μ¬μ© μ€μ 보쑴.
λμ reader κ΄μΈ‘λ§μΌλ‘ λͺ¨λ κ°λ₯ν λμ μ κ·Όμ μ¦λͺ
νλ€κ³ μ£Όμ₯νμ§ μμ΅λλ€. crypto/rand.Read μ§μ νΈμΆ κ°μ κ²½λ‘λ μ’μ ꡬν νν κ²μ¬μμλ κ±°λΆν©λλ€. μ΄μ€ νμΈμ λ²μλ μ΄λ² μ§μ ννμ μνν μ
λ ₯μ
λλ€.
Go 1.27.1 / macOS arm64μμ 격리·λ€νΈμν¬ μ°¨λ¨ νκ²½μΌλ‘ μ€μ νμΈν κ°λ° κ²°κ³Όλ λ€μκ³Ό κ°μ΅λλ€.
- κ³ μ μλ³Έμ μ 체 Go ν μ€νΈλ terminal pass 212κ°λ₯Ό κΈ°λ‘νμ΅λλ€. νμ¬ νΈμ€νΈκ° μ νν build νμΌ λ²μμ μ€νμ΄λ©°, λͺ¨λ νλ«νΌΒ·μΈλΆ ν΅ν© μνμ΄ ν΅κ³Όνλ€λ λ»μ μλλλ€.
- κ·Έλλ‘μΈ μλ³Έμλ μ APIκ° μμ΄ λ 립 κ³μ½μ΄ μ€ν¨ν©λλ€.
- μ§μ μμ±ν μ λ΅ λμ‘° ꡬνμ μλ³Έ 212κ°μ λ 립 κ²μ¬ 6κ°λ₯Ό λͺ¨λ ν΅κ³Όνμ΅λλ€.
- μ§μ νν μμμ μλͺ»λ ꡬν 14μ’ μ κ°κ° λ 립 κ²μ¬ 6κ°κ° μ€μ μ’ λ£νκ³ μ€λ₯λ₯Ό κ²μΆνμ΅λλ€. μ»΄νμΌ μ€ν¨λ₯Ό μλ―Έ κ²μ¬ μ±κ³΅μΌλ‘ μΈμ§ μμ΅λλ€.
- μ§μ νν λ°μ λμ‘°κ΅° 21μ’ μ λ³λλ‘ κ²μ¬ν΄ κ±°λΆνμ΅λλ€. μλ³Έ νκΈ° μμ , μ§μ λμ μ κ·Ό, μ μ λ³κ²½, ν¨μ λ³μΉ νΈμΆ, helper μΆκ°μ λΈλ‘ shadowλ₯Ό μ΄μ©ν μ μ μ°κΈ° λ±μ ν¬ν¨ν©λλ€. μ΄λ€μ λμ΄λΒ·μ±κ³΅λ₯ λΌλ²¨μ΄ μλλλ€.
- μ€μ κ²μ¦κΈ°λ₯Ό ν΅ν ν΅ν© μνμμ νλ³΄κ° μ΄ μλͺ»λ ν μ€νΈλ₯Ό 무μνκ³ μ λ΅μ μμ©νμ΅λλ€. λ³λμ κ²ν μκ° λ 립 ꡬνμΌλ‘ CLIλ₯Ό μ€νν 5κ° λμ‘°κ΅°μμλ μ λ΅ μμ©, λλ¬Έμλ₯Ό νμ©νλ μ€λ₯ κ²μΆ, μ§μ λμΒ·λΈλ‘ shadow μ μ μ°κΈ°Β·μ μκΆ ν€λ μμ μ unknown ꡬλΆμ νμΈνμ΅λλ€.
- μ΄ μμ μ μ 체 race κ²μ¬, μ μ κ²μ¬, κΈ°μ‘΄ μμ λͺ μΈ ν΄μ 보쑴 κ²μ¬λ λ‘컬μμ ν΅κ³Όνμ΅λλ€. κ³΅κ° CIμ μ€μ λͺ¨λΈ μ€νμ λ³λ κΈ°λ‘μΌλ‘ νμΈν΄μΌ ν©λλ€.
9,216κ° μ λ ₯ κ²μ¬μ μ¬λ¬ λμ‘°κ΅°μ μλ‘ λ€λ₯Έ λͺ¨λΈ μμ μκ° μλλλ€. μ΄ κ³μ½μ μλ―Έμ μμ μ νλμ΄λ©° λͺ¨λΈ μ€νμ 0νμ λλ€. 120κ° μ 체λ₯Ό μ€νΒ·νμ΅Β·μ΅μ’ νκ°μ μ¬μ© κ°λ₯νλ€κ³ μ μΈνμ§ μμ΅λλ€. μ€μ λͺ¨λΈ μνμ κ³μ½Β·μμ²Β·μ€ν λ°©μμ΄ κ³ μ λ λ€ λ³λ κ³νκ³Ό κ²°κ³Όλ‘ κΈ°λ‘ν΄μΌ ν©λλ€.