linkedin-skill-assessments-quizzes

Go (Lenguaje de Programación)

P1. ¿Qué necesitan dos funciones para ser del mismo tipo?

User defined function types in Go (Golang)

P2. ¿Qué devuelve la función len() si se le pasa una cadena codificada en UTF-8?

Length of string in Go (Golang).

P3. ¿Cuál NO es una construcción de bucle válida en Go?

      do { ... } while i < 5
      for _,c := range "hello" { ... }
      for i := 1; i < 5; i++ { ... }
      for i < 5 { ... }

Explicación: Go solo tiene bucles for.

P4. ¿Cómo agregarías el número 3 al final (lado derecho)?

values := []int{1, 1, 2}
      values.append(3)
      values.insert(3, 3)
      append(values, 3)
      values = append(values, 3)

Explicación: los slices en Go son inmutables en cuanto a tamaño; append devuelve un nuevo slice.

P5. ¿Cuál es el valor de Read?

const (
  Write = iota
  Read
  Execute
)

IOTA in Go (Golang)

P6. ¿Cuál es la única sentencia import válida en Go?

      import "github/gin-gonic/gin"
      import "https://github.com/gin-gonic/gin"
      import "../template"
      import "github.com/gin-gonic/gin"

Import in GoLang

P7. ¿Qué pasaría si intentaras compilar y ejecutar este programa Go?

package main
var GlobalFlag string
func main() {
  print("["+GlobalFlag+"]")
}
  1. Las variables en Go tienen valores iniciales. Para string es la cadena vacía.
  2. Go Playground

P8. ¿Desde dónde es accesible la variable myVar si se declara fuera de cualquier función en un archivo del paquete myPackage ubicado dentro del módulo myModule?

Explicación: para hacer disponible la variable fuera de myPackage cambia el nombre a MyVar. Consulta también un ejemplo de Exported names en el Tour of Go.

P9. ¿Cómo le indicas a go test que imprima las pruebas que está ejecutando?

test package

P10. Este código imprimió {0, 0}. ¿Cómo lo corriges?

type Point struct {
  x int
  y int
}

func main() {
  data := []byte(`{"x":1, "y": 2}`)
  var p Point
  if err := json.Unmarshal(data, &p); err != nil {
    fmt.Println("error: ", err)
  } else {
    fmt.Println(p)
  }
}
  1. How to Parse JSON in Golang?
  2. Go Playground

P11. ¿Qué bloquea un sync.Mutex mientras está bloqueado?

  1. Mutex in GoLang
  2. sync.Mutex

P12. ¿Cuál es una forma idiomática de pausar la ejecución del ámbito actual hasta que un número arbitrario de goroutines hayan terminado?

Explicación: esto es exactamente para lo que fue diseñado sync.WaitGroup - Use sync.WaitGroup in Golang

P13. ¿Cuál es un efecto secundario de usar time.After en una sentencia select?

Nota: no bloquea select ni otros canales.

  1. time.After() Function in Golang With Examples
  2. How can I use ‘time.After’ and ‘default’ in Golang?
  3. Go Playground example

P14. ¿Para qué se usa la sentencia select?

Select statement in GoLang

P15. Según el estándar de documentación de Go, ¿cómo deberías documentar esta función?

func Add(a, b int) int {
        return a + b
}

Explicación: el bloque de documentación debe comenzar con el nombre de la función.

Comments in Go

P16. ¿Qué restricción existe sobre el tipo de myVal para compilar i := myVal.(int)?

Explicación: Este tipo de aserción de tipos (usando .(type)) solo se usa sobre interfaces.

  1. ejemplo
  2. Primitive types are type-casted differently
  3. Go Playground
  4. Type assertions

P17. ¿Qué es un canal?

Channels

P18. ¿Cómo puedes hacer que un archivo compile solo en Windows?

  1. How to use conditional compilation with the go build tool, Oct 2013
  2. go commands Build constraints

//go:build windows “Go 1.16 y anteriores usan una sintaxis diferente con el prefijo // +build. gofmt añadirá una restricción equivalente //go:build al encontrar la sintaxis antigua.”

P19. ¿Cuál es la forma correcta de pasar esto como cuerpo de una solicitud HTTP POST?

data := "A group of Owls is called a parliament"
  resp, err := http.Post("https://httpbin.org/post", "text/plain", []byte(data))
      resp, err := http.Post("https://httpbin.org/post", "text/plain", data)
      resp, err := http.Post("https://httpbin.org/post", "text/plain", strings.NewReader(data))
      resp, err := http.Post("https://httpbin.org/post", "text/plain", &data)
  1. net/http#Client.Post
  2. http.Post Golang example

P20. ¿Cuál debería ser el nombre idiomático para una interfaz con un único método y la firma Save() error?

Effective Go, Interface names

P21. Una sentencia switch _ su propio bloque léxico. Cada case _ un bloque léxico adicional

Go Language Core technology (Volume one) 1.5-scope

Extracto relevante del artículo:

El segundo if está anidado dentro del primero, por lo que una variable declarada en el primer if es visible para el segundo. Hay reglas similares en switch: cada case tiene su propio bloque léxico además del bloque condicional.

P22. ¿Cuál es la sensibilidad por defecto de encoding/json para Unmarshal?

encoding/json#Unmarshal

Extracto relevante:

Para deserializar JSON en una struct, Unmarshal empareja las claves entrantes con el nombre del campo (o su tag), prefiriendo coincidencia exacta pero aceptando coincidencia insensible a mayúsculas.

P23. ¿Cuál es la diferencia entre los métodos time.Time.Sub() y time.Time.Add()?

  1. time#Time.Add
  2. time#Time.Sub

P24. ¿Cuál es el riesgo de usar múltiples tags de campo en una sola struct?

  1. Example Code / b29r0fUD1cp
  2. How To Use Struct Tags in Go

P25. ¿Dónde es útil el método incorporado recover?

Example of Recover Function in Go (Golang)

Extracto relevante:

recover es útil solo cuando se llama dentro de funciones diferidas. Ejecutar recover dentro de una función diferida detiene la secuencia de pánico y recupera el mensaje de error pasado a panic.

P26. ¿Cuál de las siguientes opciones NO envía salida a la salida de error estándar?

  1. func println
  2. func New
  3. func Errorf
  4. func Fprintln

P27. ¿Cómo le indicas a Go que importe un paquete desde una ubicación diferente?

  1. Call your code from another module
  2. go.mod replace directive

P28. Si tu directorio de trabajo actual es el nivel superior de tu proyecto, ¿qué comando ejecutará todas sus pruebas de paquetes?

  1. testing
  2. cmd go

P29. ¿Qué codificaciones puedes poner en un string?

  1. Strings, bytes, runes and characters in Go
  2. encoding

P30. ¿Cómo se comporta t.Fatal dentro de un t.Run?

  1. Referencia
  2. testing package

P31. ¿Qué hace log.Fatal?

func Fatal

P32. ¿Cuál es un formato de tiempo literal válido en Go?

func Time

P33. ¿Cómo deberías registrar un error (err)?

Explicación: No existe log.ERROR ni log.Error(); log.Printf() formatea como fmt.Printf().

P34. ¿Qué nombres de archivo reconocerá go test como archivos de prueba?

  1. cmd go - Test packages
  2. Add a test in Go

P35. ¿Cuál será la salida de este código?

ch := make(chan int)
ch <- 7
val := <-ch
fmt.Println(val)

Go Playground

P36. ¿Cuál será la salida de este programa?

ch := make(chan int)
close(ch)
val := <-ch
fmt.Println(val)
  1. Receive operator
  2. Go Playground

P37. ¿Qué se imprimirá en este código?

var stocks map[string]float64 // stock -> price
price := stocks["MSFT"]
fmt.Printf("%f\n", price)

Go Playground

P38. ¿Cuál es la forma común de tener varios ejecutables en tu proyecto?

  1. stackoverflow
  2. medium
  3. medium

P39. ¿Cómo compilas main.go a un ejecutable que corra en macOS arm64?

documentation

P40. ¿Cuál es la sintaxis correcta para iniciar una goroutine que imprima Hello Gopher!?

Ejemplo

P41. Si iteras sobre un map en un for range, ¿en qué orden se accederán los pares clave:valor?

Referencia

P42. ¿Una forma idiomática de personalizar la representación de una struct en una cadena formateada?

Referencia

P43. ¿Cómo evitas una fuga de goroutine en este código?

func findUser(ctx context.Context, login string) (*User, error) {
    ch := make(chan *User)
    go func() {
            ch <- findUserInDB(login)
    }()

    select {
    case user := <-ch:
            return user, nil
    case <-ctx.Done():
            return nil, fmt.Errorf("timeout")
    }
}

Referencia

P44. ¿Qué imprimirá este código?

var i int8 = 120
i += 10
fmt.Println(i)

Go Playground

P45. Dada la definición de worker a continuación, ¿cuál es la sintaxis correcta para iniciar una goroutine que llame a worker y envíe el resultado a un canal llamado ch?

func worker(m Message) Result
go func() {
    r := worker(m)
    ch <- r
}
go func() {
    r := worker(m)
    r -> ch
} ()
go func() {
    r := worker(m)
    ch <- r
} ()
go ch <- worker(m)

Go Playground

P46. En este código, ¿qué nombres están exportados?

package os

type FilePermission int
type userID int

Referencia

P47. ¿Cuál de las siguientes es correcta sobre las estructuras en Go?

P48. ¿Qué hace el comando incorporado generate del compilador de Go?

Generate Go files by processing source

P49. Usando el paquete time, ¿cómo obtienes el tiempo 90 minutos desde ahora?

Ejemplo de (Time) Add

P50. Un programa usa un canal para imprimir cinco enteros dentro de una goroutine mientras alimenta el canal con enteros desde la rutina principal, pero no funciona tal como está. ¿Qué debes cambiar para que funcione?

Referencia

P51. Después de importar encoding/json, ¿cómo accedes a la función Marshal?

encoding/json#Marshal example

P52. ¿Cuáles son los dos segmentos de código faltantes para completar el uso de context.Context e implementar un timeout de tres segundos para este cliente HTTP que realiza un GET?

package main

import (
        "context"
        "fmt"
        "net/http"
)

func main() {
        var cancel context.CancelFunc
        ctx := context.Background()

        // #1: <=== ¿Qué va aquí?

        req, _ := http.NewRequest(http.MethodGet,
                "https://linkedin.com",
                nil)

        // #2: <=== ¿Qué va aquí?

        client := &http.Client{}
        res, err := client.Do(req)
        if err != nil {
                fmt.Println("Request failed:", err)
                return
        }
        fmt.Println("Response received, status code:",
                res.StatusCode)
}
      ctx.SetTimeout(3*time.Second)
      req.AttachContext(ctx)
      ctx, cancel = context.WithTimeout(ctx, 3*time.Second); defer cancel()
      req = req.WithContext(ctx)
      ctx, cancel = context.WithTimeout(ctx, 3*time.Second); defer cancel() #2: req.AttachContext(ctx)
      ctx.SetTimeout(3*time.Second)
      req = req.WithContext(ctx)
  1. context#WithTimeout
  2. net/http#Request.WithContext

P53. Si tienes una struct llamada Client definida en el mismo archivo .go, ¿cómo exportas una variable con un valor por defecto para que sea accesible por otros paquetes?

P54. Este programa imprime {Master Chief Spartan Protagonist Halo}. ¿Cómo harías para que imprima Master Chief - a Spartan - is the Protagonist of Halo?

package main

import "fmt"

type Character struct{
        Name  string
        Class string
        Role  string
        Game  string
}

func main() {
        mc := Character{
                Name: "Master Chief",
                Class: "Spartan",
                Role: "Protagonist",
                Game: "Halo",
        }
        fmt.Println(mc)
}
  1. fmt#Stringer

P55. ¿Cómo implementarías un método Append() funcional para Clients?

package main

type Client struct {
  Name string
}
type Clients struct {
  clients []*Client
}
func main() {
  c:= &Clients{clients.make([]*Client,0)}
  c.Append(&Client{Name: "LinkedIn API})
}

P56. ¿Cómo recuperarías de un panic() lanzado por una función llamada sin permitir que tu programa falle, asumiendo que tu respuesta se ejecute en el mismo ámbito donde ocurrirá el panic?

P57. ¿Qué imprimirá este código?

var n int
fmt.Println (n)

En Go, una variable no inicializada toma su valor cero. Para int, es 0.

P58. Al crear una cadena formateada, ¿qué verbo debes usar para invocar String() string de un tipo personalizado?

%s formatea usando la representación de cadena; si existe String(), se invoca.

P59. ¿Cuál NO es un valor válido para layout al llamar time.Now().Format(layout)?

time#Time.Format

P60. ¿Cómo señalas al compilador de Go que la struct Namespace debe implementar la interfaz JSONConverter? (Mismo paquete que Namespace.)

Esta sintaxis verifica que *Namespace satisface JSONConverter.

P61. ¿Qué afirmación sobre tipado e interfaces es falsa?

En Go, un tipo satisface una interfaz automáticamente si implementa todos sus métodos.

P62. Completa este programa para generar la salida especificada, asumiendo la tabla SQL

===[Output]================
1: &{GameId:1 Title:Wolfenstein YearReleased:1992}
2: &{GameId:2 Title:Doom YearReleased:1993}
3: &{GameId:3 Title:Quake YearReleased:1996}

===[main.go]================
package main

import (
        "database/sql"
        "fmt"
        _ "github.com/go-sql-driver/mysql"
        "log"
)

type Game struct {
        GameId       int
        Title        string
        YearReleased int
}

func main() {

        conn, err := sql.Open("mysql",
                "john_carmack:agiftw!@tcp(localhost:3306)/idsoftware")

        if err != nil {
                panic(err)
        }
        defer func() { _ = conn.Close() }()

        results, err := conn.Query("SELECT game_id,title,year_released FROM games;")
        if err != nil {
                panic(err)
        }
        defer func() { _ = results.Close() }()

        // #1 <=== ¿Qué va aquí?

        for results.Next() {
                var g Game

                // #2 <=== ¿Qué va aquí?

                if err != nil {
                        panic(err)
                }

                // #3 <=== ¿Qué va aquí?

        }

        for i, g := range games {
                fmt.Printf("%d: %+v\n", i, g)
        }

}
#1: games := make([]*Game, results.RowsAffected())
#2: g, err = results.Fetch()
#3: games[results.Index()] = &g
#1: games := []Game{}
#2: g, err = results.Fetch()
#3: games = append(games,g)
#1: games := map[int]Game{}
#2: err = results.Scan(&g)
#3: games[g.GameId] = g
#1: games := make(map[int]*Game, 0)
#2: err = results.Scan(&g.GameId, &g.Title, &g.YearReleased)
#3: games[g.GameId] = &g

P63. Completa los espacios

  1. Los archivos de prueba en Go deben _.
  2. Las pruebas individuales se identifican por _.
  3. Puedes ejecutar subpruebas _.
  4. Registras el error y marcas la prueba como fallida _.

P64. ¿Para qué tipo es rune un alias?

  1. Strings, bytes, runes and characters in Go

P65. ¿Cuándo puedes usar la sintaxis := para asignar a múltiples variables? Por ejemplo:

x, err := myFunc()
  1. Short variable declarations

P66. ¿Cómo ves la salida del profiler en cpu.pprof en el navegador?

P67. ¿Cuándo evalúa a nil una variable de tipo interface{}?

P68. ¿Qué valor tiene una variable string si ha sido asignada pero no inicializada?

P69. ¿Qué función incorporada se usa para detener la ejecución del programa?

P70. ¿Cuál será la salida?

a,b := 1, 2
b,c:= 3, 4
fmt.Println(a, b, c)

Go Playground

P71. ¿Cuál es el operador para una condición AND lógica?

P72. ¿Qué es una función anónima en Go?

P73. ¿Qué palabra clave se usa para declarar una función anónima en Go?

P74. ¿Cuál es la principal ventaja de usar funciones anónimas en Go?

P75. ¿Cuál es la sintaxis para llamar inmediatamente a una función anónima tras su declaración en Go?

referencia

P76. ¿Para qué tipos pueden los desarrolladores de Go definir métodos?

Se pueden definir métodos para cualquier tipo con nombre que no sea incorporado. reference