Articles of ir a la

Inicializar la definición de estructura anidada en Golang

¿Cómo inicializas la siguiente estructura? type Sender struct { BankCode string Name string Contact struct { Name string Phone string } } Lo intenté: s := &Sender{ BankCode: “BC”, Name: “NAME”, Contact { Name: “NAME”, Phone: “PHONE”, }, } No funcionó: mixture of field:value and value initializers undefined: Contact Lo intenté: s := &Sender{ BankCode: […]

¿Cómo definirías un grupo de goroutines para ser ejecutados a la vez en Golang?

TL; TR: Por favor, ve a la última parte y dime cómo resolverías este problema. Empecé a usar Golang esta mañana viniendo de Python. Quiero llamar a un ejecutable de código cerrado desde Go varias veces, con un poco de concurrencia, con diferentes argumentos de línea de comandos. Mi código resultante está funcionando muy bien, […]

¿Por qué estas rutinas no escalan su rendimiento de más ejecuciones concurrentes?

Fondo Actualmente estoy trabajando en mi tesis de licenciatura y básicamente mi tarea es optimizar un código dado en Go, es decir, hacer que funcione lo más rápido posible. Primero, optimicé la función serial y luego traté de introducir el paralelismo a través de goroutines. Después de investigar en Internet ahora entiendo la diferencia entre […]

Goroutine no se ejecuta si el tiempo. Sueño incluido

El siguiente código funciona perfectamente bien: package main import ( “fmt” ) func my_func(c chan int){ fmt.Println(<-c) } func main(){ c := make(chan int) go my_func(c) c<-3 } playgound_1 Sin embargo, si cambio c<-3 a time.Sleep(time.Second) c<-3 playground_2 Mi código no se ejecuta Mi intuición es que de alguna manera los retornos main antes de […]

¿Cómo usar var global a través de archivos en un paquete?

Tengo la siguiente estructura de archivos: modelos / db.go type DB struct { *sql.DB } var db *DB func init() { dbinfo := fmt.Sprintf(“user=%s password=%s dbname=%s sslmode=disable”, DB_USER, DB_PASSWORD, DB_NAME) db, err := NewDB(dbinfo) checkErr(err) rows, err := db.Query(“SELECT * FROM profile”) checkErr(err) fmt.Println(rows) } func NewDB(dataSourceName string) (*DB, error) { db, err := sql.Open(“postgres”, […]

¿Cuál es una forma idiomática de representar enumeraciones en Go?

Intento representar un cromosoma simplificado, que consiste en N bases, cada una de las cuales solo puede ser una de {A, C, T, G} . Me gustaría formalizar las restricciones con una enumeración, pero me pregunto cuál es la forma más idiomática de emular una enumeración en Go.

Nombres de teclas JSON en minúsculas con JSON Marshal en Go

Deseo utilizar el paquete “encoding/json” para ordenar una estructura declarada en uno de los paquetes importados de mi aplicación. P.ej.: type T struct { Foo int } Debido a que se importa, todos los campos disponibles (exportados) en la estructura comienzan con una letra mayúscula. Pero deseo tener nombres de teclas minúsculas: out, err := […]

¿Cómo canalizar varios comandos en Go?

¿Cómo puedo conectar varios comandos externos en Go? Intenté este código pero recibo un error que dice exit status 1 . package main import ( “io” “log” “os” “os/exec” ) func main() { c1 := exec.Command(“ls”) stdout1, err := c1.StdoutPipe() if err != nil { log.Fatal(err) } if err = c1.Start(); err != nil { […]

Ir, X no implementa Y (… el método tiene un receptor de puntero)

Ya hay varias preguntas y respuestas sobre este tema ” X no implementa Y (… el método tiene un receptor de puntero) “, pero a mí me parece que están hablando de cosas diferentes y no se aplican a mi caso específico. Entonces, en lugar de hacer la pregunta muy específica, la hago amplia y […]

json.Marshal (struct) devuelve “{}”

type TestObject struct { kind string `json:”kind”` id string `json:”id, omitempty”` name string `json:”name”` email string `json:”email”` } func TestCreateSingleItemResponse(t *testing.T) { testObject := new(TestObject) testObject.kind = “TestObject” testObject.id = “f73h5jf8” testObject.name = “Yuri Gagarin” testObject.email = “Yuri.Gagarin@Vostok.com” fmt.Println(testObject) b, err := json.Marshal(testObject) if err != nil { fmt.Println(err) } fmt.Println(string(b[:])) } Aquí está el […]