Search in Slice of Structures in Golang

Create new folder named entities. In entities folder, create new file named product.go as below:

package entities

type Product struct {
	Id       string
	Name     string
	Price    float64
	Quantity int
	Status   bool
}

Create new folder named src. In src folder, create new file named main.go as below:

package main

import (
	"entities"
	"fmt"
	"strings"
)

func main() {
	var products = []entities.Product{
		entities.Product{
			Id:       "p01",
			Name:     "tivi 1",
			Price:    5,
			Quantity: 9,
			Status:   false,
		},
		entities.Product{
			Id:       "p02",
			Name:     "tivi 2",
			Price:    2,
			Quantity: 8,
			Status:   true,
		},
		entities.Product{
			Id:       "p03",
			Name:     "laptop 3",
			Price:    11,
			Quantity: 7,
			Status:   false,
		},
	}

	fmt.Println("Search product")
	keyword := "vi"
	result := Search(keyword, products)
	if len(result) == 0 {
		fmt.Println("No Result")
	} else {
		fmt.Println("Product List")
		for _, product := range result {
			Display(product)
			fmt.Println("-------------------------")
		}
	}
}

func Search(keyword string, products []entities.Product) (result []entities.Product) {
	for _, product := range products {
		if strings.Contains(strings.ToLower(product.Name), strings.ToLower(keyword)) {
			result = append(result, product)
		}
	}
	return result
}

func Display(product entities.Product) {
	fmt.Println("id: ", product.Id)
	fmt.Println("name: ", product.Name)
	fmt.Println("price: ", product.Price)
	fmt.Println("quantity: ", product.Quantity)
	fmt.Println("status: ", product.Status)
	fmt.Println("total: ", (product.Price * float64(product.Quantity)))
}




Open Terminal windows in Visual Studio Code and run command line: go run main.go

Search product
Product List
id:  p01
name:  tivi 1
price:  5
quantity:  9
status:  false
total:  45
-------------------------
id:  p02
name:  tivi 2
price:  2
quantity:  8
status:  true
total:  16
-------------------------