[ā§Š.ā§Ē] āĻĒā§āϰā§āϝāĻžāĻāĻāĻŋāϏ āĻĒā§āϰāĻŦā§āϞā§āĻŽāϏ (Practice Problems)
- Post āύāĻžāĻŽā§ āĻāĻāĻāĻŋ Struct āϤā§āϰāĻŋ āĻāϰā§āύ āϝāĻžāϰ ID, Category, Location, Time āύāĻžāĻŽāĻ āĻĢāĻŋāϞā§āĻĄ āĻĨāĻžāĻāĻŦā§āĨ¤ āĻāĻāύ Location āĻāϰ āĻŽāϧā§āϝ⧠āĻāĻŦāĻžāϰ Latitude, Longitude āĻĨāĻžāĻāĻŦā§āĨ¤ Post āĻāϰ āĻĻā§āĻāĻŋ āĻāύā§āϏāĻā§āϝāĻžāύā§āϏ āϤā§āϰāĻŋ āĻāϰā§āύ āĨ¤ āĻļāϰā§āϤ āĻšāĻā§āĻā§, āϤāĻžāĻĻā§āϰ ID, Category, Time āĻāϞāĻžāĻĻāĻž āĻāĻŋāύā§āϤ⧠Location āĻāĻāĻ āĻĨāĻžāĻāĻŦā§ āĨ¤
- āϧāϰā§āύ Post āĻāϰ āĻĻā§āĻāĻŋ āĻā§āϝāĻžāĻāĻžāĻāϰāĻŋ āϰā§ā§āĻā§āĨ¤ āϝā§āĻŽāύ, Photo āĻāĻŦāĻ Video āĨ¤Â āĻĻā§āĻ āĻā§āϝāĻžāĻāĻžāĻāϰāĻŋāϰ āĻāύā§āϝāĻ āĻāĻŽāĻžāĻĻā§āϰ Thumbnail āĻŦāĻžāύāĻžāϤ⧠āĻšāĻŦā§ āĨ¤ āĻĢāĻžāĻāĻļāύāĻāĻž āĻĻā§āĻāϤ⧠āĻāĻŽāύ āĻšāĻŦā§ –
func GenerateThumbnail(category string, data []byte) []byte {
if category == "Photo" {
// implementation
} else {
// implementation
}
return thumbnail // it carries []byte
}
āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻā§āĻļāύ āύāĻŋā§ā§ āĻāĻžāĻŦāĻžāϰ āĻĻāϰāĻāĻžāϰ āύā§āĻāĨ¤ āϤāĻŦā§ āĻāĻā§āĻā§ āĻŦā§āĻāĻž āϝāĻžāĻā§āĻā§ āϝā§, Photo āĻāĻŦāĻ Video āĻāϰ āĻāύā§āϝ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻā§āĻļāύ āĻāϞāĻžāĻĻāĻž āĻšāĻŦā§āĨ¤ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻ āĻāĻžāĻāĻāĻž āĻāĻŋāĻāĻžāĻŦā§ āĻāϰāĻž āϝāĻžā§?
  3. āύāĻŋāĻā§āϰ āĻā§āĻĄāĻāĻŋāϰ āĻāĻāĻāĻĒā§āĻ āĻāĻŋ āĻšāĻŦā§ ?
package main
import (
"fmt"
"math"
)
type geometry interface {
area() float64
perim() float64
}
type rect struct {
width, height float64
}
type circle struct {
radius float64
}
func (r rect) area() float64 {
return r.width * r.height
}
func (r rect) perim() float64 {
return 2*r.width + 2*r.height
}
func (c circle) area() float64 {
return math.Pi * c.radius * c.radius
}
func (c circle) perim() float64 {
return 2 * math.Pi * c.radius
}
func measure(g geometry) {
fmt.Println(g)
fmt.Println(g.area())
fmt.Println(g.perim())
}
func main() {
r := rect{width: 3, height: 4}
c := circle{radius: 5}
measure(r)
measure(c)
}
 4. āĻāĻ āĻā§āĻĄāĻāĻŋāϰ āĻāĻāĻāĻĒā§āĻ āĻāĻŋ āĻšāĻŦā§? āĻŦā§āĻāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻŦ āĻāĻāĻāĻĒā§āĻ āĻā§āύ āĻāĻŽāύ āĻšāĻā§āĻā§ āĻāĻŦāĻ āĻŦā§āĻāϤ⧠āĻĒāĻžāϰāϞ⧠āĻ āĻŋāĻ āĻāϰ⧠āĻĢā§āϞāĻŋ –
package main
import "fmt"
type Location struct {
Latitude float64 `json:"lat"`
Longitude float64 `json:"lon"`
}
type Post struct {
Category string `json:"category"`
Time int64 `json:"time"`
Location Location `json:"location"`
}
func (post Post) setLocation() {
post.Location = Location{
Latitude: 23.99,
Longitude: 90.45,
}
}
func main() {
post := Post{}
post.setLocation()
fmt.Println(post.Location)
}
 5. Employee āύāĻžāĻŽā§āϰ āĻāĻāĻāĻŋ Struct āϤā§āϰāĻŋ āĻāϰā§āύ āϝāĻžāϰ name, age āĻāĻŦāĻ salary āĻĢāĻŋāϞā§āĻĄ āĻĨāĻžāĻāĻŦā§āĨ¤ GiveRaise āύāĻžāĻŽāĻ āĻāĻāĻāĻŋ āĻŽā§āĻĨāĻĄ āϤā§āϰāĻŋ āĻāϰā§āύ āϝāĻž āĻāĻāĻāύ āĻāϰā§āĻŽāĻāĻžāϰā§āϰ āĻŦā§āϤāύ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻļāϤāĻžāĻāĻļ āĻšāĻžāϰ⧠āĻŦā§āĻĻā§āϧāĻŋ āĻāϰā§āĨ¤ āĻāĻŽāύ āĻāĻāĻāĻŋ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āϞāĻŋāĻā§āύ āϝāĻž āĻāĻāĻāĻŋ Employee āĻāύā§āϏāĻā§āϝāĻžāύā§āϏ āϤā§āϰāĻŋ āĻāϰā§, GiveRaise āĻŽā§āĻĨāĻĄ āĻāϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠āĻŦā§āϤāĻ¨Â āĻŦā§āĻĻā§āϧāĻŋ āĻāϰ⧠āĻāĻŦāĻ āϤāĻžāĻĻā§āϰ āύāϤā§āύ āĻŦā§āϤāύ āĻĒā§āϰāĻŋāύā§āĻ āĻāϰā§āĨ¤
package main
type Employee struct {
// implementation
}
func main() {
}
6. Add, Subtract, Multiply āĻāĻŦāĻ Divide āĻŽā§āĻĨāĻĄ āϏāĻš Calculator āύāĻžāĻŽā§ āĻāĻāĻāĻŋ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āϤā§āϰāĻŋ āĻāϰā§āύāĨ¤ BasicCalculator āĻāĻŦāĻ ScientificCalculator āύāĻžāĻŽā§ āĻĻā§āĻāĻāĻŋ Struct āϤā§āϰāĻŋ āĻāϰā§āύ āϝāĻž āĻŽā§āϞāĻŋāĻ āĻāĻžāĻŖāĻŋāϤāĻŋāĻ āĻ āĻĒāĻžāϰā§āĻļāύ āĻā§āϞ⧠āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻāϰ⧠āĻāĻŦāĻ Calculator āĻāύā§āĻāĻžāϰāĻĢā§āϏāĻā§ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰā§āĨ¤ āĻāĻāĻāĻŋ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āϞāĻŋāĻā§āύ āϝāĻž āĻāĻāĻāĻŋ BasicCalculator āĻāĻŦāĻ āĻāĻāĻāĻŋ ScientificCalculator āϤā§āϰāĻŋ āĻāϰā§, āĻāĻāϝāĻŧ Calculator āĻĻāĻŋāϝāĻŧā§ āĻāĻŋāĻā§ āĻāĻŖāύāĻž āĻāϰ⧠āĻāĻŦāĻ āĻĢāϞāĻžāĻĢāϞāĻā§āϞāĻŋ āĻĒā§āϰāĻŋāύā§āĻ āĻāϰā§āĨ¤
7. PrintValues āύāĻžāĻŽā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāύ āϞāĻŋāĻā§āύ āϝāĻž āĻāĻŽā§āĻĒāĻāĻŋ āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āϰ āĻāĻāĻāĻŋ āϏā§āϞāĻžāĻāϏ āύā§āϝāĻŧ āĻāĻŦāĻ āϏā§āϞāĻžāĻāϏā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāĻĒāĻžāĻĻāĻžāύā§āϰ āĻŽāĻžāύ āĻĒā§āϰāĻŋāύā§āĻ āĻāϰā§āĨ¤ āĻāĻĒāύāĻžāϰ āĻĢāĻžāĻāĻļāύ āĻŦāĻŋāĻāĻŋāύā§āύ āϧāϰāύā§āϰ āĻŽāĻžāύ āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻāϰāϤ⧠āϏāĻā§āώāĻŽ āĻšāϤ⧠āĻšāĻŦā§āĨ¤
package main
func main() {
vals := []interface{}{1, "hello", true}
PrintValues(vals)
}
// āĻāĻāĻāĻĒā§āĻāĻ
// 1
// hello
// true
8. āĻāĻāĻāĻŋ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āϞāĻŋāĻā§āύ āϝā§āĻāĻžāύ⧠Formatter āύāĻžāĻŽāĻ āĻāύā§āĻāĻžāϰāĻĢā§āϏ⧠āĻāĻāĻāĻŋ Format() āĻŽā§āĻĨāĻĄ āĻāĻā§ āϝāĻž āĻāĻŋāĻā§ āϏā§āĻā§āϰāĻŋāĻ āĻāϰ āĻāĻāĻāĻŋ āϏā§āϞāĻžāĻāϏ āύā§āϝāĻŧ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻĢāϰā§āĻŽā§āϝāĻžāĻ āĻāϰāĻž āϏā§āĻā§āϰāĻŋāĻ āϰāĻŋāĻāĻžāϰā§āύ āĻāϰā§āĨ¤ Formatter āύāĻžāĻŽāĻ āĻāύā§āĻāĻžāϰāĻĢā§āϏāĻāĻŋāĻā§ CSVFormatter struct āĻāĻŦāĻ HTMLFormatter struct āĻĻā§āĻŦāĻžāϰāĻž āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰā§āύāĨ¤ ⧎ Format āύāĻžāĻŽā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāύ āϤā§āϰāĻŋ āĻāϰā§āύ āϝāĻž āĻāĻāĻāĻŋ Formatter āĻāϰā§āĻā§āĻŽā§āύā§āĻ āĻāĻŦāĻ āϏā§āĻā§āϰāĻŋāĻāĻā§āϞāĻŋāϰ āĻāĻāĻāĻŋ āϏā§āϞāĻžāĻāϏ āύā§āϝāĻŧ āĻāĻŦāĻ Format() āĻŽā§āĻĨāĻĄāĻā§ āĻāϞ āĻāϰā§āĨ¤ āĻāĻāĻāĻŋ CSVFormatter āĻāĻŦāĻ āĻāĻāĻāĻŋ HTMLFormatter āĻĻāĻŋāϝāĻŧā§ āĻĢāĻžāĻāĻļāύāĻāĻŋ āĻĒāϰā§āĻā§āώāĻž āĻāϰā§āύ⧎ āĻāϰā§āĻā§āĻŽā§āύā§āĻ āĻšāĻŋāϏā§āĻŦā§ āĻĒāĻžāϏ āĻāϰāĻž Formatter āĻāĻŋ āĻāĻāĻāĻŋ CSVFormatter āύāĻžāĻāĻŋ HTMLFormatter āϤāĻž āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰāϤ⧠āĻāĻžāĻāĻĒ āĻ ā§āϝāĻžāϏāĻžāϰāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ āĻāĻŦāĻ āĻāĻāĻžāϰ āύāĻŋāĻāϏā§āĻŦ āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āĻŽā§āĻĨāĻĄāĻā§ āĻāϞ āĻāϰā§āύ⧎
package main
import (
"fmt"
"strings"
)
// Formatter interface
type Formatter interface {
Format([]string) string
}
// CSVFormatter struct
// Format method for CSVFormatter
// HTMLFormatter struct
// Format method for HTMLFormatter
// TestFormat function
func TestFormat(f Formatter, data []string) {
}
// CSVSpecificMethod for CSVFormatt
// HTMLSpecificMethod for HTMLFormatter
func main() {
// Test CSV formatter
csvFormatter := CSVFormatter{}
TestFormat(csvFormatter, []string{"apple", "banana", "orange"})
fmt.Println()
// Test HTML formatter
htmlFormatter := HTMLFormatter{}
TestFormat(htmlFormatter, []string{"apple", "banana", "orange"})
}