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.
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:
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:
Obrigado, até a próxima e bons estudos. ;)