Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/config.php on line 61

Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/config.php on line 61
Helpers
Source Code

Helpers


Tiempo de lectura: 1 minutos

Creación de un paquete de helpers y utilidades para compartir



DB helpers

Para facilitar el acceso a la base de datos y simplificar el código he creado un paquete de helpers, de esta manera se reutiliza el código y simplifica el código de acceso a la base de datos.

Estructura

Se ubican en el directorio de paquetes, según la estructura estándar que vimos.

pkg
	dbhelper
		dbhelper.go
		dbreaders.go

dbhelper.go

En este fichero voy incluyendo las funciones de gestión de la base de datos, de momento la conexión.

package dbhelper

import (
	"database/sql"
	"fmt"
	"os"

	_ "github.com/godror/godror"
	_ "github.com/sijms/go-ora/v2"
)

// --
// -----------------------------------------------
// Database helpers
// -----------------------------------------------
// Oracle connection
// Returns a db pointer
// -----------------------------------------------
func Connect_ORA(dbParams map[string]string) *sql.DB {

	connectionString := "oracle://" + dbParams["username"] + ":" +
		 dbParams["password"] + "@" + dbParams["server"] + ":" +
		 dbParams["port"] + "/" + dbParams["service"]
	db, err := sql.Open("oracle", connectionString)
	if err != nil {
		panic(fmt.Errorf("error en sql.open: %w", err))
	}

	// comprueba
	err = db.Ping()
	if err != nil {
		panic(fmt.Errorf("error en verificar connexión a db: %w", err))
	}

	return db
}

// -----------------------------------------------
// Error handling
// -----------------------------------------------
func HandleError(msg string, err error) {
	if err != nil {
		fmt.Println(msg, err)
		os.Exit(1)
	}
}

dbreaders.go

En este fichero tengo las funciones de lectura más estandarizadas. La lectura de un número y la lectura de una cadena.

package dbhelper

import (
	"database/sql"

	_ "github.com/godror/godror"
	_ "github.com/sijms/go-ora/v2"
)

func ReadScalar(db *sql.DB, sql string) int16 {

	var (
		scalar int16 = 0
	)

	err := db.QueryRow(sql).Scan(&scalar)
	HandleError("Error en lectura", err)
	return scalar
}

func ReadCode(db *sql.DB, sql string) string {

	var (
		code string = ""
	)

	err := db.QueryRow(sql).Scan(&code)
	HandleError("Error en lectura", err)
	return code
}

imports

Los imports necesarios para que se incluya el paquete en el programa principal son los siguientes:

  • interna/config - para los datos de acceso a la base de datos
  • pkg/dbhelper - para cargar el paquete

import (
	"database/sql"
	"fmt"
	"dbaccess/internal/config"
	"dbaccess/pkg/dbhelper"

	_ "github.com/godror/godror"
	_ "github.com/sijms/go-ora/v2"
)

Programa principal

Vamos ver cómo utilizamos los helpers desde el programa principal. El fichero de inicio es dbaccess.go. Primero leemos una cadena

sql := "select part_code from product_master where btg_prod_anl_0 = 'x'"
result := dbhelper.ReadCode(db, sql)

A continuación leemos un precio de producto

func getBasePriceCode(db *sql.DB) float32 {

	sql :=  "select sales_price from cv_sap_loader where price_code = '01 " +
			"and part_code = '" + m_article + "'"
	return dbhelper.ReadScalar(db, sql)
}

Otras utilidades

También añado un directorio con utilidades que recogen funciones comunes de uso genérico. La estructura de directorios donde se ubica utils.go es la siguiente:

pkg
	utils
		utils.go

y lo añadiremos a la lista de imports

"dbaccess/pkg/utils"

utils.go

El archivo utils.go recoge todas estas funciones

package utils

import (
	"os"
	"os/exec"
	"runtime"
)

// Limpia la pantalla del terminal
func ClearScreen() {

	if runtime.GOOS == "windows" {

		cmd := e x e c.Command("c m d", "/c", "cls")
		cmd.Stdout = os.Stdout
		cmd.Run()
	} else {

		cmd := exec.Command("clear")
		cmd.Stdout = os.Stdout
		cmd.Run()
	}
}
Xavier es un desarrollador senior full stack y opera desde la ciudad mediterránea de Barcelona. Le encantan las tecnologías de software y está convencido que el desarrollo de software es un proceso colaborativo y abierto.
Y es un apasionado de la astronomía y de la fotografía. Lo puedes encontrar en:
Comparte este post