go 程序员的进化史 | go优质外文翻译 | go 技术论坛-380玩彩网官网入口
初级 go 程序员
package fac
func factorial(n int) int {
res := 1
for i := 1; i <= n; i {
res *= i
}
return res
}
学会了使用函数
package fac
func factorial(n int) int {
if n == 0 {
return 1
} else {
return factorial(n - 1) * n
}
}
学会如何在 go 中使用泛型编程
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
}
多线程优化过的 go 程序员
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
}
学会了使用 go 设计模式的程序员
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
}
学会使用成熟方案弥补 go 的不足
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
}
资深 go 程序员
package fac
// factorial returns n!.
func factorial(n int) int {
res := 1
for i := 1; i <= n; i {
res *= i
}
return res
}
rob pike(golang 创始人之一)
package fac
// factorial returns n!.
func factorial(n int) int {
res := 1
for i := 1; i <= n; i {
res *= i
}
return res
}
改编自 ““.
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 cc 协议,如果我们的工作有侵犯到您的权益,请及时联系380玩彩网官网入口。
原文地址:
本帖已被设为精华帖!
高认可度评论:
创始人告诉我们,大道至简,不要老是搞那些花里胡哨的
创始人告诉我们,大道至简,不要老是搞那些花里胡哨的
返璞归真
真丶少搞点花里胡哨 :stuck_out_tongue_closed_eyes:
走着走着,又回归到最初了
返璞归真?
资深比初级多了注释,哈哈