interfaces: refactor
This commit is contained in:
36
interfaces/01-methods/book.go
Normal file
36
interfaces/01-methods/book.go
Normal file
@ -0,0 +1,36 @@
|
||||
// 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 book struct {
|
||||
title string
|
||||
price float64
|
||||
}
|
||||
|
||||
func (b book) print() {
|
||||
// b is a copy of the original `book` value here.
|
||||
fmt.Printf("%-15s: $%.2f \n", b.title, b.price)
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// + you can use the same method names among different types.
|
||||
// + you don't need to type `printGame`, it's just: `print`.
|
||||
//
|
||||
// func (b book) printBook() {
|
||||
// // b is a copy of the original `book` value here.
|
||||
// fmt.Printf("%-15s: $%.2f \n", b.title, b.price)
|
||||
// }
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// b is a copy of the original `book` value here.
|
||||
//
|
||||
// func printBook(b book) {
|
||||
// fmt.Printf("%-15s: $%.2f \n", b.title, b.price)
|
||||
// }
|
36
interfaces/01-methods/game.go
Normal file
36
interfaces/01-methods/game.go
Normal file
@ -0,0 +1,36 @@
|
||||
// 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 game struct {
|
||||
title string
|
||||
price float64
|
||||
}
|
||||
|
||||
func (g game) print() {
|
||||
fmt.Printf("%-15s: $%.2f\n", g.title, g.price)
|
||||
}
|
||||
|
||||
// PREVIOUS CODE:
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// you can use same method name among different types.
|
||||
// you don't need to type `printGame`, it's just: `print`.
|
||||
//
|
||||
// func (g game) printGame() {
|
||||
// fmt.Printf("%-15s: $%.2f\n", g.title, g.price)
|
||||
// }
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// you cannot use the same function name within the same package.
|
||||
//
|
||||
// func printGame(g game) {
|
||||
// fmt.Printf("%-15s: $%.2f\n", g.title, g.price)
|
||||
// }
|
46
interfaces/01-methods/main.go
Normal file
46
interfaces/01-methods/main.go
Normal file
@ -0,0 +1,46 @@
|
||||
// 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"
|
||||
|
||||
func main() {
|
||||
mobydick := book{
|
||||
title: "moby dick",
|
||||
price: 10,
|
||||
}
|
||||
|
||||
minecraft := game{
|
||||
title: "minecraft",
|
||||
price: 20,
|
||||
}
|
||||
|
||||
tetris := game{
|
||||
title: "tetris",
|
||||
price: 5,
|
||||
}
|
||||
|
||||
// #4: method expressions
|
||||
// methods are just functions that receive a value of a type.
|
||||
game.print(minecraft) // sends `minecraft` value to `game.print`
|
||||
game.print(tetris) // sends `tetris` value to `game.print`
|
||||
fmt.Println()
|
||||
|
||||
// #3
|
||||
mobydick.print() // sends `mobydick` value to `book.print`
|
||||
minecraft.print() // sends `minecraft` value to `game.print`
|
||||
tetris.print() // sends `tetris` value to `game.print`
|
||||
|
||||
// #2
|
||||
// mobydick.printBook()
|
||||
// minecraft.printGame()
|
||||
|
||||
// #1
|
||||
// printBook(mobydick)
|
||||
// printGame(minecraft)
|
||||
}
|
Reference in New Issue
Block a user