Skip to content

Instantly share code, notes, and snippets.

View mkock's full-sized avatar
💭
Currently building stuff in Go and Vue.js

Martin Kock mkock

💭
Currently building stuff in Go and Vue.js
View GitHub Profile
@mkock
mkock / busride_code_snippet_02.go
Created August 20, 2020 18:54
Bus Ride, code snippet 02
func main() {
expressLine := busservice.Bus{"Express Line"}
expressLine.Passengers := make([]busservice.Passenger, 0)
expressLine.Passengers = append(expressLine.Passengers, busservice.Passenger{SSN: "001"})
expressLine.Passengers = append(expressLine.Passengers, busservice.Passenger{SSN: "002"})
// Get a manifest!
ssns := make([]string, 0)
for _, p := range expressLine.Passengers {
ssns = append(ssns, p.SSN)
@mkock
mkock / busride_code_snippet_03.go
Created August 20, 2020 18:55
Bus Ride, code snippet 03
// Bus carries Passengers from A to B if they have a valid bus ticket.
type Bus struct {
name string
Passengers map[string]Passenger // Map of SSN to Passengers
}
@mkock
mkock / busride_code_snippet_04.go
Created August 20, 2020 18:58
Bus Ride, code snippet 04
// Bus carries Passengers from A to B if they have a valid bus ticket.
type Bus struct {
name string
passengers map[string]Passenger
}
// Add adds a single Passenger to the Bus. For brevity, we don't care too much about accidentally adding the same Passenger more than once.
func (b *Bus) Add(p Passenger) {
if b.passengers == nil {
b.passengers = make(map[string]Passenger)
@mkock
mkock / busride_code_snippet_05.go
Created August 20, 2020 18:59
Bus Ride, code snippet 05
func main() {
expressLine := busservice.Bus{"Express Line"}
expressLine.Add(busservice.Passenger{"001"})
expressLine.Add(busservice.Passenger{"002"})
// Get a manifest!
ssns := make([]string, 0)
expressLine.VisitPassengers(func(p busservice.Passenger) { ssns = append(ssns, p.SSN) })
fmt.Printf("This bus carries %d passengers, here are their SSN's: %v\n", len(ssns), ssns)
}
@mkock
mkock / busride_code_snippet_06.go
Created August 20, 2020 19:00
Bus Ride, code snippet 06
// FindPassenger returns the Passenger that matches the given SSN, if found. Otherwise, an empty Passenger is returned.
func (b *Bus) FindPassenger(ssn string) Passenger {
if p, ok := b.passengers[ssn]; ok {
return p
}
return Passenger{} // A nobody.
}
@mkock
mkock / busride_code_snippet_07.go
Created August 20, 2020 19:01
Bus Ride, code snippet 07
// UpdatePassengers calls function visitor for each Passenger on the bus. Passengers are passed by reference and may be modified.
func (b *Bus) UpdatePassengers(visitor func(*Passenger)) {
ps := make(map[string]Passenger, len(b.passengers))
for ssn, p := range b.passengers {
visitor(&p)
ps[ssn] = p
}
b.passengers = ps
}
@mkock
mkock / busride_code_snippet_08.go
Created August 20, 2020 19:03
Bus Ride, code snippet 08
func main() {
// Previous statements...
// Assign seat numbers to passengers.
var seatNumber uint8
expressLine.UpdatePassengers(func(p *busservice.Passenger) {
seatNumber++
p.SeatNumber = seatNumber
})
@mkock
mkock / busride_code_snippet_09.go
Last active September 6, 2020 11:39
Bus Ride, code snippet 09
// Passengers represents a set of Passengers, using their SSN as key.
type Passengers map[string]Passenger
// NewPassengerSet returns an empty set of Passengers, ready to use.
func NewPassengerSet() Passengers {
return make(map[string]Passenger)
}
// Add adds a Passenger to Passengers. The Passenger will be overwritten if exists.
func (p Passengers) Add(p Passenger) {
@mkock
mkock / busride_code_snippet_10.go
Last active September 6, 2020 11:36
Bus Ride, code snippet 10
// Bus carries Passengers from A to B if they have a valid bus ticket.
type Bus struct {
name string
passengers Passengers
}
// NewBus returns a new Bus with an empty passenger set.
func NewBus(name string) Bus {
b := Bus{}
b.name = name
@mkock
mkock / busride_code_snippet_11.go
Created August 20, 2020 19:07
Bus Ride, code snippet 11
func main() {
expressLine := busservice.NewBus()
expressLine.Add(busservice.Passenger{SSN: "001"})
expressLine.Add(busservice.Passenger{SSN: "002"})
// Get a manifest!
ssns := expressLine.Manifest()
fmt.Printf("This bus carries %d passengers, here are their SSN's: %v\n", len(ssns), ssns)
}