This commit is contained in:
Edward 2020-05-03 01:53:37 +08:00
commit f2d95570bb
4 changed files with 113 additions and 0 deletions

View File

@ -0,0 +1,33 @@
package data
import "io"
type Store interface {
Open(string) (io.ReadWriteCloser, error)
}
type StorageType int
const (
DiskStorage StorageType = 1 << iota
TempStorage
MemoryStorage
)
func NewStore(t StorageType) Store {
switch t {
case MemoryStorage:
return newMemoryStorage( /*...*/ )
case DiskStorage:
return newDiskStorage( /*...*/ )
default:
return newTempStorage( /*...*/ )
}
}
s, _ := NewStore(data.MemoryStorage)
f, _ := s.Open("file")
n, _ := f.Write([]byte("data"))
defer f.Close()

27
creational/object_pool.go Normal file
View File

@ -0,0 +1,27 @@
package pool
type Pool chan *Object
func New(total int) *Pool {
p := make(Pool, total)
for i := 0; i < total; i++ {
p <- new(Object)
}
return &p
}
p := New(2)
select {
case obj := <-p:
obj.Do( /*...*/ )
p <- obj
default:
// No more objects left — retry later or fail
return
}

25
profiling/profile.go Normal file
View File

@ -0,0 +1,25 @@
package profile
import (
"time"
"log"
)
func Duration(invocation time.Time, name string) {
elapsed := time.Since(invocation)
log.Printf("%s lasted %s", name, elapsed)
}
func BigIntFactorial(x big.Int) *big.Int {
// Arguments to a defer statement is immediately evaluated and stored.
// The deferred function receives the pre-evaluated values when its invoked.
defer Duration(time.Now(), "IntFactorial")
y := big.NewInt(1)
for one := big.NewInt(1); x.Sign() > 0; x.Sub(x, one) {
y.Mul(y, x)
}
return x.Set(y)
}

28
structural/decorate.go Normal file
View File

@ -0,0 +1,28 @@
package main
type Object func(int) int
func LogDecorate(fn Object) Object {
return func(n int) int {
log.Println("Starting the execution with the integer", n)
result := fn(n)
log.Println("Execution is completed with the result", result)
return result
}
}
func Double(n int) int {
return n * 2
}
func main(){
f := LogDecorate(Double)
f(5)
}
// Starting execution with the integer 5
// Execution is completed with the result 10