Giter Club home page Giter Club logo

go's Introduction

Golang - Go

Esse README irá servir como o histórico do meu aprendizado em Go. Tudo que eu for aprendendo, na ordem em que eu fui aprendendo, estará escrito aqui (pelo menos até eu considerar necessário).

Primeiros comandos

go mod init <nome-projeto>
go run <filename>
go build
GOOS=windows go build # GOOS pode linux, mac, etc.

Conceitos

  • variáveis
// Versão verbosa
var a string
a = "Hello"

// Versão menos verbosa
// Nesse caso ele infere que a variável é uma string
// e como é fortemente tipada, não podemos mais mudar
// o tipo
a := "Hello"
  • funções Funções também é bem parecido em C, onde precisamos especificar o tipo dos argumentos, e tipo do retorno da função também.

Mas o interessante é que podemos retornar mais de um tipo (parece o retorno de tuplasem Python).

func soma(x int, y int) (int, bool) {
    if x > 10 {
        return x + y, true
    }

    return x + y, false
}

res, status := soma(10, 2)
  • imports Os imports sempre são feitos assim:
package main
import "net/http"

func main() {
    http.ListenAndServe(":8080", nil)
}
  • structs O Go não tem suporte a orientação a objetos. Mas temos structs, que são amplamente utilizadas para implementar diversos design patterns.
type Course struct {
    Name string
    Description string
    Price int
}

// main
course := Course{
    Name: "Golang",
    Description: "Golang Course",
    Price: 100,
}

println(course.Name)

Nós temos "métodos" para essas structs, que nada mais são que funções que recebem um argumento do tipo da struct. É uma sintaxe levemente diferente de funções normais.

func (c Course) GetFullInfo() string {
	return fmt.Sprintf(c.Name, c.Description, c.Price)
}

// main
course.GetFullInfo

Repare que não retornei println, mas sim fmt.Sprintf

CONVENÇÃO IMPORTANTE Todo nome em go, que começar em maiúsculo, significa que é público, enquanto que todo nome que começa em minúsculo, significa que é privado.

Portanto Course e GetFullInfo são públicos, e qualquer pacote consegue acessá-los.


  • lidando com json Em Go, frequentemente utilizamos structs para representar DTOs - Data Transfer Object - no backend, i.e., eventualmente vamos precisar mandar essa struct para um frontend, ou para outro serviço. O formato que geralmente é utilizado é o JSON, e portanto é bem fácil traduzir structs para json:
type Course struct {
    //                 tag para modificarmos o campo do json
	Name        string `json:name`
	Description string `json:description`
	Price       int    `json:price`
}
  • paralelismo com threads - go routines
func counter() {
    for i := 0; i < 10; i++ {
        fmt.Println(i)
        time.Sleep(time.Second)
    }
}

// thread 0
func main() {
    go counter() // thread 1
    go counter() // thread 2
}

Misc

  • Sobre timeouts

go's People

Contributors

medina325 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.