func produce(source int, permutation func(int) int) func() int { return func() int { // lambda source = permutation(source) // source return source } }
func mutate(j int) int { return (1664525*j + 1013904223) % 2147483647 }
next := produce(1, mutate) next()
package main import ( "fmt" ) func produce(source int, permutation func(int) int) func() int { return func() int { // lambda source = permutation(source) // source return source } } // func mutate(j int) int { return (1664525*j + 1013904223) % 2147483647 } func main() { next := produce(1, mutate) // fmt.Println(next()) fmt.Println(next()) fmt.Println(next()) fmt.Println(next()) fmt.Println(next()) }
type MyType string // func (arg MyType) JustPrint(){ // fmt.Println(arg) }
timer := time.AfterFunc(50 * time.Millisecond, arg.JustPrint)
package main import ( "fmt" "time" ) type MyType string // func (arg MyType) JustPrint() { // fmt.Println(arg) } func main() { arg := MyType("Hello") // time.AfterFunc(50*time.Millisecond, arg.JustPrint) arg = "By" time.AfterFunc(75*time.Millisecond, arg.JustPrint) time.Sleep(100 * time.Millisecond) }
func Fib(n int) int { if n == 0 { return 0 } if n == 1 { return 1 } first := Fib(n - 1) second := Fib(n - 2) if first > max { // panic(second) // } return first + second }
var max int = 200 func CallFib(n int) (res int) { defer func() { if r := recover(); r != nil { // res = r.(int) // } }() res = Fib(n) return }
package main import "fmt" var max int = 1000 func Fib(n int) int { if n == 0 { return 0 } if n == 1 { return 1 } first := Fib(n - 1) second := Fib(n - 2) if first > max { // panic(second) // } return first + second } func CallFib(n int) (res int) { defer func() { if r := recover(); r != nil { // res = r.(int) // } }() res = Fib(n) return } func main() { fmt.Println(CallFib(10)) // fmt.Println(CallFib(100000)) // fmt.Println(" ") }
type stateFn func(Machine) stateFn
func run(m Machine) { for state := start; state != nil; { state = state(m) } }
type stateFn func(*lexer) stateFn type lexer struct { *bufio.Reader // }
func lexText(l *lexer) stateFn { for r, _, err := l.ReadRune(); err != io.EOF; r, _, err = l.ReadRune() { if '0' <= r && r <= '9' { // l.UnreadRune() return lexNumber // } } return nil // . } func lexNumber(l *lexer) stateFn { var s string for r, _, err := l.ReadRune(); err != io.EOF; r, _, err = l.ReadRune() { if '0' > r || r > '9' { // num, _ := strconv.Atoi(s) return lexText // } s += string(r) } num, _ := strconv.Atoi(s) return nil // . }
package main import ( "bufio" "fmt" "io" "strconv" "strings" ) type stateFn func(*lexer) stateFn func run(l *lexer) { for state := lexText; state != nil; { state = state(l) } } type lexer struct { *bufio.Reader // , } var output = make(chan int) // func lexText(l *lexer) stateFn { for r, _, err := l.ReadRune(); err != io.EOF; r, _, err = l.ReadRune() { if '0' <= r && r <= '9' { // l.UnreadRune() return lexNumber // } } close(output) return nil // . } func lexNumber(l *lexer) stateFn { var s string for r, _, err := l.ReadRune(); err != io.EOF; r, _, err = l.ReadRune() { if '0' > r || r > '9' { num, _ := strconv.Atoi(s) output <- num // return lexText // } s += string(r) } num, _ := strconv.Atoi(s) output <- num close(output) return nil // . } func main() { var sum int a := "hell 3456 fgh 25 fghj 2128506 fgh 77" // , fmt.Println(" : ", a) rr := strings.NewReader(a) // lexy := lexer{bufio.NewReader(rr)} go run(&lexy) // for nums := range output { fmt.Println(nums) sum += nums } fmt.Println(" : ", sum) }
Decoder = NewDecoder(r io.Reader) err = Decoder.Decode(Message)
reader1 := strings.NewReader(" ") reader2 := strings.NewReader(" ")
writer := os.Stdout
stop := time.After(10000 * time.Millisecond) tick := time.Tick(150 * time.Millisecond) tack := time.Tick(200 * time.Millisecond)
select { case <-tick: io.CopyN(writer, reader1, 5) case <-tack: io.CopyN(writer, reader2, 5) case <-stop: return }
package main import ( "io" "os" "strings" "time" ) func main() { stop := time.After(10000 * time.Millisecond) tick := time.Tick(150 * time.Millisecond) tack := time.Tick(200 * time.Millisecond) reader1 := strings.NewReader(" ") reader2 := strings.NewReader(" ") writer := os.Stdout for { select { case <-tick: io.CopyN(writer, reader1, 5) case <-tack: io.CopyN(writer, reader2, 5) case <-stop: return } } }
Source: https://habr.com/ru/post/280210/
All Articles