Aula 02 – Golang – Fiber – Ponteiros
Aula 02 – Golang – Fiber – Ponteiros
Voltar para página principal do blog
Todas as aulas desse curso
Aula 01 Aula 03
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook.
Sigam o Código Fluente no Instagram.
Código Fluente no Pinterest.
Meus links de afiliados:
Hostinger
Digital Ocean
One.com
Código da aula: Github
Melhore seu NETWORKING
Participe de comunidades de desenvolvedores:
Fiquem a vontade para me adicionar ao linkedin.
E também para me seguir no GITHUB.
Toti:
https://www.youtube.com/channel/UCUEtjLuDpcOvR3mIUr-viOA
Backing track / Play-along:
https://www.youtube.com/channel/UCT3TryVMqTqYBjf5g5WAHfA
Código Fluente
https://www.youtube.com/channel/UCgn-O-88XBAwdG9gUWkkb0w
Putz!
https://www.youtube.com/channel/UCZXop2-CECwyFYmHbhnAkAw
Link da documentação do Fiber:
https://docs.gofiber.io/
PIX para doações
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.
Quem quiser outra explicação sobre ponteiros, tem na aula 18 do tutorial de Go aqui do código fluente, segue o link:
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 👋!")
}