• Stars
    star
    1,305
  • Rank 36,065 (Top 0.8 %)
  • Language
    Go
  • Created almost 5 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The Evolution of a Go Programmer

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".

More Repositories

1

nice

Highly customizable and idiomatic Go CLI app framework 👌
Go
209
star
2

babel-plugin-transform-pipeline

Compile pipeline operator to ES5
JavaScript
59
star
3

ulid

Universally Unique Lexicographically Sortable Identifier (ULID) in Crystal
Crystal
27
star
4

serve

Command line static HTTP server
Crystal
23
star
5

babel-plugin-syntax-pipeline

Allow parsing of pipeline operator |>
JavaScript
23
star
6

habrlang

Step by Step guide how to make your own programming language
JavaScript
20
star
7

Tomorrow-Night-Telegram-Theme

A Tomorrow Night Telegram theme
Shell
17
star
8

phaser-typescript-tutorial

A tutorial on making a game with Phaser + TypeScript + Webpack
JavaScript
17
star
9

design-for-failure

Repository for the book "Design for Failure" 📈
16
star
10

ms

Library to easily convert various time formats to milliseconds and milliseconds to human readable format.
Crystal
14
star
11

crystal-ctags

Tool for generation ctags for Crystal
Crystal
13
star
12

blog

SuperPaintman's personal blog
10
star
13

request-id

Middleware for generates / pick up a unique request ID for Crystal servers.
Crystal
8
star
14

response-time

Response time for Crystal servers.
Crystal
8
star
15

dotfiles

~/.*
Shell
7
star
16

winston-seq

A Seq transport for Winston
TypeScript
7
star
17

phaser-typescript-boilerplate

Template for Phaser project (TypeScript + Webpack)
JavaScript
4
star
18

vscode-monokai-extended

Extends Monokai Theme (port of the Monokai TextMate Theme)
JavaScript
3
star
19

etag

Library to generate HTTP ETags
Crystal
3
star
20

superpaintman.com

SuperPaintman's jumppad
Svelte
1
star
21

express-lazy-middleware

Express lazy middleware initialize
TypeScript
1
star