ã»ãŒãã¹ãŠã®ææ°ã®ããã°ã©ãã³ã°èšèªã«ã¯ãäœããã®åœ¢ã§ãªããžã§ã¯ãæåæ©èœãå«ãŸããŠããŸãããGoã®äœæè
ã¯ãå¯èœãªéãåœä»€åãã©ãã€ã ã«å¶éããããšããŠããŸãã èšèªã®äœè
ã®1人ã
ã±ã³ãã³ããœã³ ïŒUNIXããã³Cã®éçºè
ïŒã§ããããšãèãããšãããã¯é©ãã¹ãããšã§ã¯ãããŸããã ãã®ãããªèšèªã®æç¢ºãªåœä»€ã¯ãçµéšè±å¯ãªãªããžã§ã¯ãæåããã°ã©ããŒãåœæããããã®ãããªèšèªã§çŸä»£ã®åé¡ã解決ããå¯èœæ§ã«ã€ããŠçå¿µãæ±ãããå¯èœæ§ããããŸãã
ãã®èšäºã®ç®çã¯ãGoã«èå³ã®ããããã°ã©ããŒãèšèªã®å¿
é æ©èœãçè§£ã§ããããã«ããããšã§ãã ç¹ã«ãäž»èŠãªèšèšãã¿ãŒã³ã®å®è£
ãæ¯æŽããŸãã ããã«ãGoèªäœããã®æšæºã©ã€ãã©ãªãšããŒã«ã«å®è£
ãããè峿·±ããœãªã¥ãŒã·ã§ã³ããããå€ãã®äººãåã°ããŸãã
ã¯ããã«ïŒã¿ã€ããæ§é ã倿°
å€ãã®åœä»€åããã°ã©ãã³ã°èšèªïŒC / Algol / Pascalãªã©ïŒãšåæ§ã«ãéèŠãªãšã³ãã£ãã£ã¯æ§é ã§ãã Goã§ã¯ãæ§é ã¯æ¬¡ã®ããã«å®çŸ©ãããŸãã
type User struct{ Name string Email string Age int }
æ§é ã«å ããŠããšã€ãªã¢ã¹ãåãæ¹æ³ã§å®£èšã§ããŸãã
type UserAlias User type Number int type UserName string
æ§é äœã®ã€ã³ã¹ã¿ã³ã¹ãå«ã倿°ãäœæããã«ã¯ãããã€ãã®æ¹æ³ããããŸãã
åæåäžã®æ§é äœãã£ãŒã«ãã®ååã¯ã宣èšã·ãŒã±ã³ã¹ãç¶æããªããçç¥ã§ããŸãã
u1 := User{Name: "Jhon", Email: "jhon@example.or", Age: 27} u2 := User{"Jhon", "jhon@example.or", 27}
ãªããªã Goã«ã¯ã¬ããŒãžã³ã¬ã¯ã¿ãŒãçµã¿èŸŒãŸããŠãããããçŽæ¥ã€ã³ã¹ã¿ã³ã¹åããã倿°ãšãªã³ã¯ãä»ããŠã€ã³ã¹ã¿ã³ã¹åããã倿°ã«éãã¯ãããŸããã
ã¹ã³ãŒããããªã³ã¯ãçµäºããŠãã¡ã¢ãªãªãŒã¯ã¯çºçãããå°ãªããšã1ã€ã®ãªã³ã¯ãååšããå Žåãå€ã«ãã£ãŠã€ã³ã¹ã¿ã³ã¹åãããå€ã¯è§£æŸãããŸããã ç¯å²å€ã
ã€ãŸã 次ã®ã³ãŒãã¯å®å
šã«å®å
šã§ãããC / C ++ã®åæ§ã®æ§é ã¯èŽåœçãªçµæã«ã€ãªããå¯èœæ§ããããŸãã
type Planet struct{ Name string } func GetThirdPlanetByRef() *Planet{ var planet Planet planet.Name = "Earth" return &planet } func GetThirdPlanetByVal() Planet{ var planet *Planet planet = &Planet{Name: "Earth"} return *planet }
ç¶æ¿ã§ã¯ãªãã€ã³ã¿ãŒãã§ãŒã¹ãšå¿åãã£ãŒã«ã
Goã«ã¯ç¿æ
£çãªç¶æ¿ã¯ãããŸããããç¶æ¿ãéä¿¡ã¡ã«ããºã ãšããŠèããå Žå
ãaïŒç¹å®ã®ã¿ã€ãã«å±ãããbïŒç¹å®ã®åäœã®éä¿¡ãcïŒåºæ¬ãã£ãŒã«ãã®éä¿¡ãå¿åãã£ãŒã«ããšã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã®ãããªç¶æ¿ã¡ã«ããºã ã«èµ·å ããå¯èœæ§ããããŸãã
å¿åãã£ãŒã«ãã¯ãæ§é å
ã®éè€ãããã£ãŒã«ãèšè¿°ãé¿ããŸãã ãããã£ãŠãããšãã°ããŠãŒã¶ãŒæ§é ãããããã®æ§é ã«åºã¥ããŠããã€ã€ãŒãã€ã€ãŒãšãã£ãã·ã£ãŒãã£ãã·ã£ãŒãããã«ããã€ãäœæããå¿
èŠãããå Žåãæ°ããæ§é ã®ãã£ãŒã«ãã¯æ¬¡ã®ããã«ãŠãŒã¶ãŒããåçšã§ããŸãã
type Buyer struct { User Balance float64 Address string } type Cashier struct { User InsurenceNumber string }
ãŠãŒã¶ãŒã¯ãå®¶æã®ã€ãªãããã§ã€ãªãã£ãŠãããããã€ã€ãŒããŠãŒã¶ãŒã®åå«ã§ãããšã¯èšããŸãããããŠãŒã¶ãŒæ§é ã®ãã£ãŒã«ãã¯ãã€ã€ãŒ/ãã£ãã·ã£ãŒã§å©çšã§ããŸãã
äžæ¹ãUser / Buyer / Cashierã®ã¡ãœãããåå¥ã«å®è£
ããå¿
èŠããããŸãããããŸã䟿å©ã§ã¯ãããŸããã 巚倧ãªè€è£œã«ã€ãªãããŸãã
代ããã«ãåãåäœãå®è£
ããã¡ãœããããå
±éã®ã€ã³ã¿ãŒãã§ã€ã¹ãåŒæ°ãšããŠåã颿°ã«å€æã§ããŸãã äŸã¯ãSendMailã«ã¡ãã»ãŒãžãéä¿¡ããæ¹æ³ïŒããã¹ãæååïŒã§ãã ãªããªã åæ§é ã«å¿
èŠãªã®ã¯é»åã¡ãŒã«ã ãã§ãGetEmailã¡ãœããã®èŠä»¶ãåããã€ã³ã¿ãŒãã§ã€ã¹ãäœæããã°ååã§ãã
type UserWithEmail interface { GetEmail() string } func SendMail(u *UserWithEmail, text string) { email := u.GetEmail()
ã«ãã»ã«å
Goã«ã¯ã¢ã¯ã»ã¹ä¿®é£ŸåããããŸããã 倿°ãæ§é ããŸãã¯é¢æ°ã®å¯çšæ§ã¯ãèå¥åã«äŸåããŸãã
Goã¯ãèå¥åãäž¡æ¹ã®æ¡ä»¶ãæºãããšã³ãã£ãã£ã®ã¿ããšã¯ã¹ããŒãããŸãã
- èå¥åã¯å€§æåã§å§ãŸããŸãïŒUnicodeã¯ã©ã¹ãLuãïŒ
- èå¥åã¯ããã±ãŒãžãããã¯ã§å®£èšãããŠããïŒã€ãŸããã©ãã«ããã¹ããããŠããªãïŒããã¡ãœãããŸãã¯ãã£ãŒã«ãã®ååã§ã
ã€ãŸããèå¥åãé衚瀺ã«ããã«ã¯ãå°ããªæåã§ååãä»ããŸãã
ã¿ã€ããã£ã¹ããã
æ¬è³ªçã«ãGoã«ã¯ã¢ãããã¯ãªããªã¢ãŒãã£ãºã ããªãããã©ã¡ããªãã¯ãªããªã¢ãŒãã£ãºã ïŒã€ãŸããJavaãžã§ããªãã¯ãšc ++ãã³ãã¬ãŒãïŒããªãããµãã¿ã€ãã®æç€ºçãªããªã¢ãŒãã£ãºã ã¯ãããŸããã
ã€ãŸããåãã¢ãžã¥ãŒã«ã§åãååãšç°ãªãã·ã°ããã£ãæã€2ã€ã®é¢æ°ãå®çŸ©ããããšã¯ã§ããŸããããŸããç°ãªãã¿ã€ãã«å
±éã®ã¡ãœãããäœæããããšãã§ããŸããã
ã€ãŸã Goã®æ¬¡ã®æ§æäœã¯ãã¹ãŠéæ³ã§ãããã³ã³ãã€ã«ãšã©ãŒãçºçããŸãã
func Foo(value int64) { }
ãã ããGoã«ã¯ã倿
çãªåäœããšãã¥ã¬ãŒããã2ã€ã®ã¡ã«ããºã ããããŸãã
ããã¯ã第äžã«ãåçãªã¿ã€ãã®ãã£ã¹ãããã§ããã第äºã«ãã¢ãã«ã®ã¿ã€ãã³ã°ã§ãã
ãããã£ãŠãGoã®ãªããžã§ã¯ãã¯ãã€ã³ã¿ãŒãã§ã€ã¹{}åã«çž®å°ã§ããŸããããã«ãããä»»æã®åã®å€æ°ã颿°ã«æž¡ãããšãã§ããŸãã
package main func Foo(v interface{}) { } func main() { Foo(123) Foo("abs") }
ãªããªã ã€ã³ã¿ãŒãã§ã€ã¹{}ã«ç¬èªã®ã¡ãœãããå«ããããšã¯ã§ããŸãããåãžã®ã¢ã¯ã»ã¹ãè¿ãããã«ãç¹å¥ãªã¹ã€ããåã®æ§é ããããŸãã
func Foo(v interface{}) { switch t := v.(type) { case int:
å¯å€å¯¿åœç®¡ç
Goã«ã¯ã³ã³ã¹ãã©ã¯ã¿ãŸãã¯ãã¹ãã©ã¯ã¿ããããŸããã è€éãªæ§é ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããã«ãNewã§å§ãŸãç¹å¥ãªé¢æ°ãå®çŸ©ãããŠããŸããäŸïŒ
func NewUser(name, email string, age int) *User { return &User{name, email, age} }
ãã®ãããªã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã®ååšã¯ãæ§é ãçŽæ¥ã€ã³ã¹ã¿ã³ã¹åããæ©èœãå¶éããŸããã ãã ãããã®ã¢ãããŒãã¯æšæºã®Goã©ã€ãã©ãªã§ã䜿çšãããŠãããå€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§ã³ãŒããäœç³»åããã®ã«åœ¹ç«ã¡ãŸãã
Goã§ãã¹ãã©ã¯ã¿ã䜿çšããç¶æ³ã¯ããã«è€éã§ãã C ++ã§äœ¿çšå¯èœãªæ©èœãšåæ§ã®æ©èœãå®å
šã«å®è£
ããããšã¯ã§ããŸããã
ãªãœãŒã¹ãè§£æŸããå¿
èŠãããå Žåã¯ãReleaseã¡ãœãããäœæã§ããŸãã
func (r *Resource) Release() {
ãã¡ãããC ++ã§çºçããããã«ã倿°ãã¹ã³ãŒãå€ã«åºãå ŽåãäŸå€ãçºçããå Žåããã®ã¡ãœããã¯åç¬ã§åŒã³åºãããŸããïŒGoã«ã¯äŸå€ã¯ãããŸããïŒã ãã®ãããªç¶æ³ã§ã¯ã
å»¶æããããã¯ãããã³å埩ã¡ã«ããºã ã䜿çšãã
ããšããå§ãããŸãã ããšãã°ãDeferãã£ã¬ã¯ãã£ãã䜿çšããŠReleaseã¡ãœãããé
å»¶ãããããšãã§ããŸãã
func Foo() { r := NewResource() defer r.Release() if err := r.DoSomething1(); err != nil { return } if err := r.DoSomething2(); err != nil { return } if err := r.DoSomething3(); err != nil { return } }
ããã«ãããã·ããªãªã«é¢ä¿ãªããFoo颿°ãåŒã³åºããåŸã«ãªãœãŒã¹ãè§£æŸã§ããŸãã
é
å»¶åäœã¯åžžã«äºæž¬å¯èœã§ããã3ã€ã®ã«ãŒã«ã§èšè¿°ãããŸãã
- é
延颿°ã®åŒæ°ã¯ãé
å»¶ã³ã³ã¹ãã©ã¯ãã圢æããããšãã«èšç®ãããŸãã
- é
延颿°ã¯ããã¬ãŒãã³ã°é¢æ°ã®ã¡ãã»ãŒãžãè¿ããåŸããæåŸã«å
¥åããã-æåã®å·Šãã®é åºã§åŒã³åºãããŸãã
- é
延颿°ã¯ãååä»ãæ»ãå€ãèªã¿åã£ãŠå€æŽã§ããŸãã
çµã¿èŸŒã¿ã®
ãããã¯ããã³
å埩æ©èœã¯ãäŸå€ã®ä»£ãããšããŠæ©èœããŸãã
func Bar() { panic("something is wrong") } func Foo() { defer func() { if r := recover(); r != nil { fmt.Println("Recovered in Bar: ", r) } }() Bar() fmt.Prinln("this message will not be printed on panic inside Bar") }
ãããã¯ã«ããããã¹ãŠã®ãã¬ãŒãã³ã°æ©èœãçµäºããããããããã¯ã®æ¡å€§ãæ¢ããå¯äžã®æ¹æ³ã¯ãrecoverïŒïŒé¢æ°ãåŒã³åºãããšã§ãã é
å»¶åŒãšãããã¯/å埩æ©èœã®äœ¿çšãçµã¿åãããããšã«ãããtry / catchæ§é ã䜿çšããŠãªããžã§ã¯ãæåèšèªã§éæãããã®ãšåãã»ãã¥ãªãã£ãå®çŸã§ããŸãã ç¹ã«ããªãœãŒã¹ã®æŒæŽ©ãšããã°ã©ã ã®äºæããªãçµäºãé²ãããã
æ§é ã®ã€ã³ã¹ã¿ã³ã¹ã®ç Žå£ã®ç¬éãäºæž¬ã§ããªãå ŽåãGo to free resourcesã®å¯äžã®æ¹æ³ã¯ãæšæºã©ã³ã¿ã€ã ããã±ãŒãžã®
SetFinalizer颿°ã䜿çšããããš
ã§ã ã ã€ã³ã¹ã¿ã³ã¹ãã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ãã£ãŠã¯ãªã¢ãããç¬éããã£ããã§ããŸãã
èšèšãã¿ãŒã³
ãããã£ãŠã説æããã¡ã«ããºã ã«ããããªããžã§ã¯ãæåããã°ã©ãã³ã°ã§ã®
ç¶æ¿ãã«ãã»ã«åãå€çžæ§ã®è§£æ±ºãšåãåé¡ã解決ã§ããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ãšçµã¿åãããã¢ãã«ã®ã¿ã€ãã³ã°ã®ååšã¯ããªããžã§ã¯ãæåèšèªã®åŸæ¥ã®ç¶æ¿ãšã»ãŒåãå¯èœæ§ãæç€ºããŸãã ããã¯ã以äžã®ããã€ãã®äž»èŠãªå€å
žçãªèšèšãã¿ãŒã³ã®å®è£
ã«ãã£ãŠãã瀺ãããŠããŸãã
ã·ã³ã°ã«ãã³-ã·ã³ã°ã«ãã³
Goã«ã¯éç修食åã¯ãããŸãããéç倿°ãå¿
èŠãªå Žåã¯ãããã±ãŒãžæ¬äœã§å®è¡ãããŸãã ã·ã³ã°ã«ãã³ãã¿ãŒã³ã¯ãæãåçŽãªå Žåããã®ãœãªã¥ãŒã·ã§ã³ã«åºã¥ããŠæ§ç¯ãããŸãã
type Singleton struct{ }
æœè±¡çãªå·¥å Žã ãã¡ã¯ããªãŒã¡ãœããã ãã«ããŒ-æœè±¡çãªå·¥å Žã ãã¡ã¯ããªãŒã¡ãœããã ãã«ããŒ
3ã€ã®ãã¿ãŒã³ã¯ãã¹ãŠãäœããã®æœè±¡ã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ã«åºã¥ããŠããŸããããã«ãããç¬èªã®ã¡ãœããäœæè
ãå®è£
ããããšã«ãããç¹å®ã®è£œåã®äœæãå¶åŸ¡ã§ããŸãã ã€ã³ã¿ãŒãã§ã€ã¹å®£èšã¯æ¬¡ã®ããã«ãªããŸãã
type AbstractProduct interface{ }
ç¹å®ã®æ§é ã®1察1ã¡ãœããã®å®è£
ã¯ããªããžã§ã¯ãæåããã°ã©ãã³ã°ã®å®è£
ã«å¯Ÿå¿ããŠããŸãã
äŸã¯githubã§èŠãããšãã§ããŸãïŒ
æœè±¡ãã¡ã¯ããªãŒ ã
å·¥å Žæ³ãã«ã㌠ã
ãããã¿ã€ã-ãããã¿ã€ã
å€ãã®å ŽåãPrototypeãã¿ãŒã³ã¯åçŽã«æ§é ã®æµ
ãã³ããŒã«çœ®ãæããããŸãã
type T struct{ Text string } func main(){ proto := &T{"Hello World!"} copied := &T{} // *copied = *proto if copied != proto { fmt.Println(copied.Text) } }
äžè¬çãªå Žåãåé¡ã¯Cloneã¡ãœããã䜿çšããŠã€ã³ã¿ãŒãã§ã€ã¹ãäœæããããšã«ãããå€å
žçãªæ¹æ³ã§è§£æ±ºãããŸãã
type Prototype interface{ Clone() Prototype }
å®è£
äŸã¯githubïŒ
Prototypeã«ãããŸãã
RAII
RAIIãã¿ãŒã³ã®äœ¿çšã¯ããã¹ãã©ã¯ã¿ãååšããªãããè€éã«ãªããŸãããã®ããã蚱容ã§ããåäœãå€ããå°ãªããåŸãã«ã¯ãruntime.setFinalizer颿°ã䜿çšããå¿
èŠããããŸãã
type Resource struct{ } func NewResource() *Resource {
å®è£
äŸïŒ
RAII ã
ã¢ããã¿ãŒ ãã³ã¬ãŒã¿ã æ©ã ãã¡ãµãŒã-ã¢ããã¿ãŒã æ© ãã³ã¬ãŒã¿ æ£é¢
4ã€ã®ãã¿ãŒã³ã¯ãã¹ãŠéåžžã«äŒŒãŠãããåãæ¹æ³ã§æ§æãããŠãããããã¢ããã¿ãŒã®å®è£
ã®ã¿ãæäŸããã ãã§ååã§ãã
type RequiredInterface interface { MethodA() } type Adaptee struct { } func (a *Adaptee) MethodB() { } type Adapter struct{ Impl Adaptee } func (a *Adapter) MethodA() { a.Impl.MethodB() }
ãªã³ã«ãŒ-è€å
ãªã³ã«ã®å®è£
ã¯ããã«ç°¡åã§ãã CompositeïŒæ§é çãªåäœãèšè¿°ããïŒãšComponentïŒãŠãŒã¶ãŒå®çŸ©é¢æ°ãèšè¿°ããïŒã®2ã€ã®ã€ã³ã¿ãŒãã§ã€ã¹ã ãã§ååã§ãã
type Component interface { GetName() string } type Composite interface { Add(c Component) Remove(c Component) GetChildren() []Component }
ãã¿ãŒã³ã®å®è£
äŸïŒ
Linker ã
責任ã®é£é-責任ã®é£é
Goã®éåžžã«äžè¬çãªãã¿ãŒã³ã§ãããäž»ã«å¿å颿°ãã³ãã©ãŒãä»ããŠå®è£
ãããŸãã ãããã¯ãããšãã°ããã±ãŒãž
net / httpæšæºã©ã€ãã©ãªãªã©ã倿°ãããŸãã ã¯ã©ã·ãã¯ããŒãžã§ã³ã§ã¯ããã¿ãŒã³ã¯æ¬¡ã®ããã«ãªããŸãã
type Handler interface{ Handle(msg Message) } type ConcreteHandler struct { nextHandler Handler } func (h *ConcreteHandler) Handle(msg Message) { if msg.type == "special_type" {
å®è£
äŸïŒ
責任ã®é£é ã
Nice Goã®æ©èœ
瀺ãããŠããããã«ãã»ãšãã©ãã¹ãŠã®å€å
žçãªãã¶ã€ã³ãã¿ãŒã³ãèšèªã§åçŸã§ããŸãã ãã ããããã¯ãã®èšèªã®äž»ãªå©ç¹ã§ã¯ãããŸããã ãŽã«ãŒãã³ããŒã¹ã®ãã«ãã¹ã¬ããã®ãµããŒããã¹ã¬ããéã®ããŒã¿ãã£ãã«ãå¿å颿°ãšã³ã³ããã¹ãã¯ããŒãžã£ã®ãµããŒããCã©ã€ãã©ãªãšã®å®¹æãªçµ±åãããã³åŒ·åãªæšæºããã±ãŒãžã©ã€ãã©ãªãéåžžã«éèŠã§ãã ããã¯ãã¹ãŠãåå¥ã®æ³šææ·±ãæ€èšã®äŸ¡å€ããããŸããããã¡ããèšäºã®ç¯å²ãè¶
ããŠããŸãã
åœç¶ã®ããšãªããããã®èšèªã«ã¯ä»ã®ã€ãããŒã·ã§ã³ããããŸããããã¯ãèšèªèªäœãããèšèªã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã«ããé¢é£ããŠããŸãã ãã ããçµéšè±å¯ãªããã°ã©ããªã誰ã§ãæè¬ããŸãã
gitãhgãsvnãbazaarããµããŒããããã«ãã€ã³ããã±ãŒãžãããŒãžã£ãŒ
Goã§ã¯ããã¹ãŠãããã±ãŒãžã«åå²ãããŸããJavaã®å Žåãšåæ§ã«ããã¹ãŠãã¯ã©ã¹ã«åå²ãããŸãã ããã°ã©ã ã®å®è¡ãéå§ããã¡ã€ã³ããã±ãŒãžã¯ãmainãšåŒã°ããŸãã éåžžãåããã±ãŒãžã¯ããã°ã©ã ã®å€ããå°ãªããç¬ç«ããéšåã§ãããã¡ã€ã³ããã€ã³ããŒããŸã§å«ãŸããŸãã ããšãã°ãæšæºã®æ°åŠããã±ãŒãžã䜿çšããã«ã¯ã
importâ mathâãšå
¥åããã ãã§ãã ããã±ãŒãžãžã®ãã¹ã¯ããªããžããªã®ã¢ãã¬ã¹ã§ããããŸãã ã·ã³ãã«ãªOpenGLããã°ã©ã ã¯æ¬¡ã®ããã«ãªããŸãã
package main import ( "fmt" glfw "github.com/go-gl/glfw3" ) func errorCallback(err glfw.ErrorCode, desc string) { fmt.Printf("%v: %v\n", err, desc) } func main() { glfw.SetErrorCallback(errorCallback) if !glfw.Init() { panic("Can't init glfw!") } defer glfw.Terminate() window, err := glfw.CreateWindow(640, 480, "Testing", nil, nil) if err != nil { panic(err) } window.MakeContextCurrent() for !window.ShouldClose() {
ãã¹ãŠã®äŸåé¢ä¿ãããŠã³ããŒãããã«ã¯ããããžã§ã¯ããã£ã¬ã¯ããªããååŸããŸãã
Local Goããã¥ã¡ã³ã
godocã³ãã³ãã䜿çšããŠãã³ãã³ãã©ã€ã³ããããã¥ã¡ã³ãããã€ã§ãèªãããšãã§ããŸãã ããšãã°ãmathããã±ãŒãžããSin颿°ã®èª¬æãååŸããã«ã¯ãgodoc math sinã³ãã³ããå
¥åããŸãã
$ godoc math Sin func Sin(x float64) float64 Sin returns the sine of the radian argument x. Special cases are: Sin(±0) = ±0 Sin(±Inf) = NaN Sin(NaN) = NaN
ãŸããããŒã«ã«ãã·ã³ã§ã¯ãã€ã³ã¿ãŒããããäœããã®çç±ã§å©çšã§ããªããªã£ãå Žåã«golang.comãµãŒããŒã¯ããŒã³ãéå§ã§ããŸãã
$ godoc -http=:6060
godocã®è©³çްãã芧ãã ããã
ã³ãã³ãã©ã€ã³ã®ãªãã¡ã¯ã¿ãªã³ã°ãšãã©ãŒããã
ã³ãŒãã§ã¯ãããšãã°ããã¿ãŒã³ã䜿çšããŠååã倿Žããããåçš®ã®æ°åŒãä¿®æ£ããããããªã©ãåäžãªå€æŽãè¡ãå¿
èŠãããå ŽåããããŸãã ãã®ããã«gofmtããŒã«ãæäŸãããŠããŸãã
gofmt -r
bytes.CompareïŒaãbïŒãšãã圢åŒã®ãã¹ãŠã®åŒãbytes.EqualïŒaãbïŒã«çœ®ãæããŸãã 倿°ãç°ãªãæ¹æ³ã§åŒã³åºãããå Žåã§ãã
Gofmtã¯ã-sãã©ã°ã䜿çšããŠäžè¬çãªåŒãç°¡çŽ åããããã«ã䜿çšã§ããŸãã ãã®ãã©ã°ã¯ã次ã®çœ®æã«äŒŒãŠããŸãã
[]T{T{}, T{}} -> []T{{}, {}} s[a:len(s)] -> s[a:] for x, _ = range v {...} -> for x = range v {...}
ãŸããgofmtã䜿çšããŠããããžã§ã¯ãã®ã³ãŒãã¹ã¿ã€ã«ãä¿åã§ããŸãã
gofmtã®è©³çް
åäœãã¹ããšãã³ãããŒã¯
Goã«ã¯ãç¹å¥ãªãã¹ã
ãã¹ãããã±ãŒãžãå«ãŸããŠããŸãã ããã±ãŒãžã®ãã¹ããäœæããã«ã¯ããµãã£ãã¯ã¹ã_testing.goããä»ããŠåãååã®ãã¡ã€ã«ãäœæããŸãã ãã¹ãŠã®ãã¹ããšãã³ãããŒã¯ã¯ããã¹ããŸãã¯ãã³ãã§å§ãŸããŸãã
func TestTimeConsuming(t *testing.T) { if testing.Short() { t.Skip("skipping test in short mode.") } ... } func BenchmarkHello(b *testing.B) { for i := 0; i < bN; i++ { fmt.Sprintf("hello") } }
ãã¹ããå®è¡ããã«ã¯ãgo testãŠãŒãã£ãªãã£ã䜿çšããŸãã ããã䜿çšããŠããã¹ãã®å®è¡ãã«ãã¬ããžã®æž¬å®ããã³ãããŒã¯ã®å®è¡ããŸãã¯ãã¿ãŒã³ã®ãã¹ãã®å®è¡ãè¡ãããšãã§ããŸãã ãã®èšäºã®ãã¿ãŒã³ãäŸãšããŠèšè¿°ããã³ãã¹ãããããã«äœæããã
gopatternsãããžã§ã¯ãã䜿çšãããšã次ã®ããã«ãªããŸãã
$ go test -v === RUN TestAbstractFactory --- PASS: TestAbstractFactory (0.00 seconds) === RUN TestBuilder --- PASS: TestBuilder (0.00 seconds) === RUN TestChain --- PASS: TestChain (0.00 seconds) === RUN TestComposite --- PASS: TestComposite (0.00 seconds) === RUN TestFactoryMethod --- PASS: TestFactoryMethod (0.00 seconds) === RUN TestPrototype --- PASS: TestPrototype (0.00 seconds) === RUN TestRaii --- PASS: TestRaii (1.00 seconds) === RUN TestSingleton --- PASS: TestSingleton (0.00 seconds) PASS ok gopatterns 1.007s $ go test -cover PASS coverage: 92.3% of statements $go test -v -run "Raii" === RUN TestRaii --- PASS: TestRaii (1.00 seconds) PASS ok gopatterns 1.004s
ãããã«
ãããã£ãŠãGoã¯åœä»€åãã©ãã€ã ã«åºã¥ããŠæ§ç¯ãããŠãããšããäºå®ã«ãããããããåŸæ¥ã®ãã¶ã€ã³ãã¿ãŒã³ãå®è£
ããã®ã«ååãªè³éããããŸãã ãã®ç¹ã§ãäžè¬çãªãªããžã§ã¯ãæåèšèªãããæ±ºããŠå£ã£ãŠããŸããã åæã«ãçµã¿èŸŒã¿ã®ããã±ãŒãžãããŒãžã£ãŒãèšèªã€ã³ãã©ã¹ãã©ã¯ãã£ã¬ãã«ã§ã®åäœãã¹ãã®ãµããŒããçµã¿èŸŒã¿ã®ãªãã¡ã¯ã¿ãªã³ã°ããã³ææžåããŒã«ãªã©ã«ãããèšèªãšç«¶åä»ç€Ÿã倧å¹
ã«åºå¥ããŸãã ãã®ãããªãã®ã¯éåžžãã³ãã¥ããã£ã«ãã£ãŠå®è£
ãããŸãã
ããããã¹ãŠã¯ããŽã«ãŒãã³ããã£ãã«ããã€ãã£ãã©ã€ãã©ãªãšã®ã€ã³ã¿ãŒãã§ã€ã¹ã®è©³çްãªèª¿æ»ãªãã§ãå¯èœã§ãã
äžè¬ã«ãGoã¯ãåœä»€ããã°ã©ãã³ã°ãšæ§é ããã°ã©ãã³ã°ãæŽå²ã®äžã§äžãããªãããšã瀺ããŠããŸãã ãœãããŠã§ã¢éçºã®äž»ãªåŸåã«é©åããçŸä»£èšèªã¯ãåœä»€åãã©ãã€ã ã«åºã¥ããŠæ§ç¯ã§ããŸããããªããžã§ã¯ãæåãŸãã¯æ©èœçãã©ãã€ã ã«åºã¥ããå Žåãããæªãã¯ãªããŸããã