[ā§Š.ā§Ē] āĻĒā§āĻ°ā§āĻ¯āĻžāĻāĻāĻŋāĻ¸ āĻĒā§āĻ°āĻŦā§āĻ˛ā§āĻŽāĻ¸ (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"})
}