Aula 02 - Golang - Fiber - Ponteiros

Nessa aula, vamos dá uma olhada superficial na linguagem Go para entender melhor o código.

No código que fizemos na aula passada temos:

c *fiber.Ctx

main.go


package main

import "github.com/gofiber/fiber/v2"

func main() {
    app := fiber.New()

    app.Get("/", func(c *fiber.Ctx) error {
        return c.SendString("Hello, World 👋!")
    })

    app.Listen(":3000")
}
O * significa que a variável c tem uma referência para um objeto fiber.Ctx em memória, ou seja, um contexto fiber.

https://www.codigofluente.com.br/aula-18-tutorial-golang-ponteiros/

Vamos modificar o main.go só para ilustrar algumas coisas e exercitar a linguagem um pouco.

main.go


package main

import (
  "fmt"
)

func main() {
  var word string
  word = "Hello!"
  fmt.Printf(word)
}
Definimos uma variável word do tipo string, na linha seguinte, atribuímos a string "Hello!" a variável word e depois imprime. Podemos fazer isso de uma tacada só usando o := como mostrado abaixo:

main.go


package main

import (
  "fmt"
)

func main() {
  word := "Hello!"
  fmt.println(word)
}
Agora vamos criar a variável word como um ponteiro para um tipo string e tentar apontar para a string "Hello!".

Modifique o main.go para ficar assim e veja o que acontece!

main.go


package main

import "fmt"

func main() {
  var word *string
  *word = "Hello!"
  fmt.Println(word)
}

Vai dá esse erro:

panic: runtime error: invalid memory address or nil pointer dereference [signal 0xc0000005 code=0x0 addr=0x0 pc=0xdac5ba] Toda vez que a gente cria uma variável ponteiro, ou seja, que aponta para algo, que referencia algum endereço de memória, temos que inicializá-la. Ao invés de fazer assim: var word *string Temos que fazer assim: var word *string = new(string)

main.go


package main

import "fmt"

func main() {
  var word *string = new(string)
  *word = "Hello!"
  fmt.Println(word) //O endereço de memória para o qual está apontando
  fmt.Println(*word) //O valor armazenado no endereço de memória
}

Saída: 

0xc000088220 (O endereço de memória para o qual está apontando) Hello! (O valor armazenado no endereço de memória)

Outra variação do código.

main.go


package main

import "fmt"

func main() {
  word := "Hello!"
  ptr := &word
  fmt.Println(ptr) //O endereço de memória para o qual está apontando
  fmt.Println(*ptr) //O valor armazenado no endereço de memória
  fmt.Println(&word) //O endereço da variável word
}

Saída: 

0xc000088220 Hello!

Mais uma variação do código.

main.go


package main

import "fmt"

func main() {
  word := "Hello!"
  ptr := &word
  fmt.Println(ptr) //O endereço de memória para o qual está apontando
  fmt.Println(*ptr) //O valor armazenado no endereço de memória

  word = "World!"
  fmt.Println(ptr) //O endereço de memória para o qual está apontando
  fmt.Println(*ptr) //O valor armazenado no endereço de memória
}

Saída: 

0xc000088220 Hello! 0xc000088220 World! 

Voltando ao código original, vamos começar a refatorar ele.

Ele tá assim no momento.

main.go


package main

import "github.com/gofiber/fiber/v2"

func main() {
    app := fiber.New()

    app.Get("/", func(c *fiber.Ctx) error {
        return c.SendString("Hello, World 👋!")
    })

    app.Listen(":3000")
}
Vamos fazer a seguinte modificação, a gente vai transferir a linha: return c.SendString("Hello, World 👋!")  Para dentro de uma função chamada home() e passar ela por parâmetro para app.Get().

main.go


package main

import "github.com/gofiber/fiber/v2"

func main() {
  app := fiber.New()

  app.Get("/", home)

  app.Listen(":3000")
}

func home(c *fiber.Ctx) error {
  return c.SendString("Hello, World 👋!")
}

Acesse:

http://127.0.0.1:3000/

Por agora é só, na próxima aula a gente vai começar a construir uma API, integrando o Fiber com o banco MySQL.

Até lá.

Código da aula: Github

Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no Facebook

Link do código fluente no Pinterest

Novamente deixo meus link de afiliados:

Hostinger

Digital Ocean

One.com

Obrigado, até a próxima e bons estudos. ;)