内容简介:Tribute to the Iavor Diatchki's original page "
The Evolution of a Go Programmer
Junior Go programmer
package fac func Factorial(n int) int { res := 1 for i := 1; i <= n; i++ { res *= i } return res }
Functional Go programmer
package fac func Factorial(n int) int { if n == 0 { return 1 } else { return Factorial(n - 1) * n } }
Generic Go programmer
package fac func Factorial(n interface{}) interface{} { v, valid := n.(int) if !valid { return 0 } res := 1 for i := 1; i <= v; i++ { res *= i } return res }
Multithread optimized Go programmer
package fac import "sync" func Factorial(n int) int { var ( left, right = 1, 1 wg sync.WaitGroup ) wg.Add(2) pivot := n / 2 go func() { for i := 1; i < pivot; i++ { left *= i } wg.Done() }() go func() { for i := pivot; i <= n; i++ { right *= i } wg.Done() }() wg.Wait() return left * right }
Discovered Go patterns
package fac func Factorial(n int) <-chan int { ch := make(chan int) go func() { prev := 1 for i := 1; i <= n; i++ { v := prev * i ch <- v prev = v } close(ch) }() return ch }
Fix Go weaknesses with mature solutions
package fac /** * @see https://en.wikipedia.org/wiki/Factorial */ type IFactorial interface { CalculateFactorial() int } // FactorialImpl implements IFactorial. var _ IFactorial = (*FactorialImpl)(nil) /** * Used to find factorial of the n. */ type FactorialImpl struct { /** * The n. */ n int } /** * Constructor of the FactorialImpl. * * @param n the n. */ func NewFactorial(n int) *FactorialImpl { return &FactorialImpl{ n: n, } } /** * Gets the n to use in factorial function. * * @return int. */ func (this *FactorialImpl) GetN() int { return this.n } /** * Sets the n to use in factorial function. * * @param n the n. * @return void. */ func (this *FactorialImpl) SetN(n int) { this.n = n } /** * Returns factorial of the n. * * @todo remove "if" statement. Maybe we should use a factory or somthing? * * @return int. */ func (this *FactorialImpl) CalculateFactorial() int { if this.n == 0 { return 1 } n := this.n this.n = this.n - 1 return this.CalculateFactorial() * n }
Senior Go programmer
package fac // Factorial returns !n. func Factorial(n int) int { res := 1 for i := 1; i <= n; i++ { res *= i } return res }
Rob Pike
package fac // Factorial returns !n. func Factorial(n int) int { res := 1 for i := 1; i <= n; i++ { res *= i } return res }
Tribute to the Iavor Diatchki's original page " The Evolution of a Programmer ".
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
你必须知道的495个C语言问题
Steve Summit / 孙云、朱群英 / 人民邮电出版社 / 2009-2 / 45.00元
“本书是Summit以及C FAQ在线列表的许多参与者多年心血的结晶,是C语言界最为珍贵的财富之一。我向所有C语言程序员推荐本书。” ——Francis Glassborow,著名C/C++专家,ACCU(C/C++用户协会)前主席 “本书清晰阐明了Kernighan与Ritchie《The C programming Language》一书中许多简略的地方,而且精彩地总结了C语言编程......一起来看看 《你必须知道的495个C语言问题》 这本书的介绍吧!