refactor: common ifaces
This commit is contained in:
29
interfaces/09-little-refactor/list.go
Normal file
29
interfaces/09-little-refactor/list.go
Normal file
@ -0,0 +1,29 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
type list []*product
|
||||
|
||||
func (l list) print() {
|
||||
if len(l) == 0 {
|
||||
fmt.Println("Sorry. We're waiting for delivery 🚚.")
|
||||
return
|
||||
}
|
||||
|
||||
for _, p := range l {
|
||||
p.print()
|
||||
}
|
||||
}
|
||||
|
||||
func (l list) discount(ratio float64) {
|
||||
for _, p := range l {
|
||||
p.discount(ratio)
|
||||
}
|
||||
}
|
19
interfaces/09-little-refactor/main.go
Normal file
19
interfaces/09-little-refactor/main.go
Normal file
@ -0,0 +1,19 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
func main() {
|
||||
l := list{
|
||||
{title: "moby dick", price: 10, released: toTimestamp(118281600)},
|
||||
{title: "odyssey", price: 15, released: toTimestamp("733622400")},
|
||||
{title: "hobbit", price: 25},
|
||||
}
|
||||
|
||||
l.discount(.5)
|
||||
l.print()
|
||||
}
|
16
interfaces/09-little-refactor/money.go
Normal file
16
interfaces/09-little-refactor/money.go
Normal file
@ -0,0 +1,16 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
type money float64
|
||||
|
||||
func (m money) string() string {
|
||||
return fmt.Sprintf("$%.2f", m)
|
||||
}
|
26
interfaces/09-little-refactor/product.go
Normal file
26
interfaces/09-little-refactor/product.go
Normal file
@ -0,0 +1,26 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type product struct {
|
||||
title string
|
||||
price money
|
||||
released timestamp
|
||||
}
|
||||
|
||||
func (p *product) print() {
|
||||
fmt.Printf("%s: %s (%s)\n", p.title, p.price.string(), p.released.string())
|
||||
}
|
||||
|
||||
func (p *product) discount(ratio float64) {
|
||||
p.price *= money(1 - ratio)
|
||||
}
|
45
interfaces/09-little-refactor/timestamp.go
Normal file
45
interfaces/09-little-refactor/timestamp.go
Normal file
@ -0,0 +1,45 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
// timestamp stores, formats and automatically prints a timestamp.
|
||||
type timestamp struct {
|
||||
// timestamp anonymously embeds a time.
|
||||
// no need to convert a time value to a timestamp value to use the methods of the time type.
|
||||
time.Time
|
||||
}
|
||||
|
||||
func (ts timestamp) string() string {
|
||||
if ts.IsZero() { // same as: ts.Time.IsZero()
|
||||
return "unknown"
|
||||
}
|
||||
|
||||
// Mon Jan 2 15:04:05 -0700 MST 2006
|
||||
const layout = "2006/01"
|
||||
return ts.Format(layout) // same as: ts.Time.Format(layout)
|
||||
}
|
||||
|
||||
// toTimestamp returns a timestamp value depending on the type of `v`.
|
||||
func toTimestamp(v interface{}) (ts timestamp) {
|
||||
var t int
|
||||
|
||||
switch v := v.(type) {
|
||||
case int:
|
||||
t = v
|
||||
case string:
|
||||
t, _ = strconv.Atoi(v)
|
||||
}
|
||||
|
||||
ts.Time = time.Unix(int64(t), 0)
|
||||
return ts
|
||||
}
|
Reference in New Issue
Block a user