Comments (18)
https://play.golang.org/p/5ImpADhNsW7
from aprendago.
package main
import("fmt")
func main(){
estados:= make([]string,15,20)
estados = []string{
"Acre",
"Alagoas",
"Amapá",
"Amazonas",
"Bahia",
"Ceará",
"Espírito Santo",
"Goiás",
"Maranhão",
"Mato Grosso",
"Mato Grosso do Sul",
}
estados = append(estados,"Minas Gerais", "Pará", "Paraíba",
"Paraná", "Pernambuco", "Piauí", "Rio de Janeiro",
"Rio Grande do Norte", "Rio Grande do Sul", "Rondônia",
"Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins" )
fmt.Println(len(estados),cap(estados))
for x:=0; x < len(estados);x++{
fmt.Println(estados[x])
}
}
from aprendago.
Olá,
se aumentarmos a capacidade do slice no make, a mesma não deveria ser informada no print?
ex. colocar cap 100 no make e na hora do print, o cap deve mostrar 100
Aparentemente, nas respostas apresentadas, quando em seguida ao make fazemos o slice literal, está a assumir o cap baseado no len desse slice e qualquer alteração na chamada do make (len ou cap) não são levados em consideração.
fiz um exemplo onde ao se mudar os valores do make, o mesmo reflete no restante do código
make com um valor de cap maior q o len
https://play.golang.org/p/vcQLafr-Fuu
make com valor igual ao len e que ao adicionar mais 1 valor, o cap é aumentado automaticamente.
https://play.golang.org/p/ILl6gldDxZ7
faz sentido?
from aprendago.
https://play.golang.org/p/rUulSziMvnA
Observei que podemos começar o length and capacity com 0 zero, se não soubermos a quantidade de dados que nossa slice vai receber.
package main
import (
"fmt"
)
func main() {
estados := make([]string, 0, 0)
fmt.Println("length before: ", len(estados))
fmt.Println("capacity before: ",cap(estados))
fmt.Println("")
estados = append(estados, "Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins")
fmt.Println(estados)
fmt.Println("")
fmt.Println("length after: ",len(estados))
fmt.Println("capacity after: ",cap(estados))
fmt.Println("")
for i := 0; i < len(estados); i++ {
fmt.Println(estados[i])
}
}
Output
length before: 0
capacity before: 0
[Acre Alagoas Amapá Amazonas Bahia Ceará Espírito Santo Goiás Maranhão Mato Grosso Mato Grosso do Sul Minas Gerais Pará Paraíba Paraná Pernambuco Piauí Rio de Janeiro Rio Grande do Norte Rio Grande do Sul Rondônia Roraima Santa Catarina São Paulo Sergipe Tocantins]
length after: 26
capacity after: 26
Acre
Alagoas
Amapá
Amazonas
Bahia
Ceará
Espírito Santo
Goiás
Maranhão
Mato Grosso
Mato Grosso do Sul
Minas Gerais
Pará
Paraíba
Paraná
Pernambuco
Piauí
Rio de Janeiro
Rio Grande do Norte
Rio Grande do Sul
Rondônia
Roraima
Santa Catarina
São Paulo
Sergipe
Tocantins
Program exited.
from aprendago.
My solution:
package main
import "fmt"
func main() {
estados := make([]string, 26)
estados = []string{"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"}
for i := 0; i < len(estados); i++ {
fmt.Println(estados[i])
}
fmt.Println("Len: ", len(estados), "Cap: ", cap(estados))
}
from aprendago.
Se eu não souber quantos dados vou colocar no slice, então eu não preciso criá-lo com make. Entendi que o make é justamente para que eu possa controlar o len e o cap. Pelo que li da documentação, quando o comprimento dos dados (len) excedem o cap (ao fazer um append), Go dobra o cap.
from aprendago.
https://play.golang.org/p/MUR7HgbkZVA
from aprendago.
package main
import "fmt"
func main() {
slice := make([]string, 26, 26)
slice = []string{"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará",
"Espírito Santo", "Goiás", "Maranhão", "Mato Grosso",
"Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba",
"Paraná", "Pernambuco", "Piauí", "Rio de Janeiro",
"Rio Grande do Norte", "Rio Grande do Sul", "Rondônia",
"Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"}
fmt.Println(len(slice), cap(slice))
for i := 1; i <= len(slice)-1; i++ {
fmt.Println(slice[i])
}
}
from aprendago.
package main
import (
"fmt"
)
func main() {
estados := make([]string, 0, 54)
estados = append(estados, "Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins")
fmt.Println(len(estados), cap(estados))
for i := 0; i < len(estados); i++ {
fmt.Println(estados[i])
}
}
from aprendago.
https://go.dev/play/p/II0Q-imj_HY
from aprendago.
https://go.dev/play/p/nGArBHBemU7
from aprendago.
Cap. 9 – Exercícios: Nível #4 – 6
https://go.dev/play/p/YBMVuE8hUdX
from aprendago.
Adicionando os nomes dos estados com um append, ao invés de reatribuindo os valores ao slice, o array subjacente continua o mesmo (desde que não exceda sua capacidade estabelecida no make
), evitando assim o custo computacional adicional de se criar outro array subjacente.
Para entender melhor, no código abaixo o slice criado tem capacidade 30, e usando o append, como a capacidade não é ultrapassada, a capacidade continua a mesma. Ou seja, o array subjacente não mudou.
Caso, ao invés de fazer com o append
, fazer a reatribuição com estados = []string{...}
, ao se verificar a capacidade, será exibida a capacidade igual ao length. Logo, o array subjacente não é mais o mesmo do que foi criado usando o make
anteriormente. Para testar, copiando o código abaixo ou pelo link, basta comentar o slice criado a partir do append, e tirar o comentário do que foi criado pela reatribuição. https://go.dev/play/p/EF_OH7gjSkC
Essa observação foi feita em um comentário do vídeo, pelo Ronan, e notando fiz também os testes, mas realizando a adição dos elementos de um modo (append) diferente do sugerido lá. Sou iniciante na linguagem, não sei se tudo que comentei aqui faz sentido, mas deixo também observação.
No mais, deixo meu agradecimento à professora. Obrigado pelo curso Ellen, está muito bom mesmo.
package main
import "fmt"
func main() {
estados := make([]string, 0, 30)
//Usando o append
estados = append(estados, "Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins")
//Reatribuindo
//estados = []string{"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"}
fmt.Printf("len: %v || cap: %v\n\n", len(estados), cap(estados))
for i := 0; i < len(estados); i++ {
fmt.Println(i+1, ":", estados[i])
}
}
from aprendago.
func main() {
estados := make([]string, 26, 26)
estados = []string{
"Acre", "Alagoas", "Amapá", "Amazonas",
"Bahia", "Ceará", "Espírito Santo", "Goiás",
"Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais",
"Pará", "Paraíba", "Paraná", "Pernambuco",
"Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul",
"Rondônia", "Roraima", "Santa Catarina", "São Paulo",
"Sergipe", "Tocantins"}
fmt.Println(len(estados))
fmt.Println(cap(estados))
for i := 0; i < len(estados); i++ {
fmt.Println(estados[i])
}
}
from aprendago.
package main
import (
"fmt"
)
func main() {
estados := make([]string, 26, 26)
estados = []string{
"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará",
"Espírito Santo", "Goiás", "Maranhão", "Mato Grosso",
"Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba",
"Paraná", "Pernambuco", "Piauí", "Rio de Janeiro",
"Rio Grande do Norte", "Rio Grande do Sul", "Rondônia",
"Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"}
for i := 0; i < len(estados); i++ {
fmt.Println(estados[i])
}
}
from aprendago.
package main
import "fmt"
func main() {
estados := make([]string, 26, 26)
valores := []string{"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará",
"Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul",
"Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro",
"Rio Grande do Norte", "Rio Grande do Sul",
"Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"}
for i, v := range valores {
if i < len(estados) {
estados[i] = v
}
}
fmt.Println(len(estados), cap(estados))
fmt.Println(estados[:])
}
from aprendago.
https://go.dev/play/p/Nz95mjlcWqz
from aprendago.
// You can edit this code!
// Click here and start typing.
package main
import "fmt"
//- Crie uma slice usando make que possa conter todos os estados do Brasil.
// - Os estados: "Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"
//- Demonstre o len e cap da slice.
//- Demonstre todos os valores da slice sem utilizar range.
func main() {
slice := []string{"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"}
makeSlice := make([]string, len(slice), len(slice))
makeSlice = []string{"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"}
fmt.Println(makeSlice, len(makeSlice), cap(makeSlice))
}```
from aprendago.
Related Issues (20)
- Exercício: Capítulo 26, Exercício 1 (Nível: 12)
- Exercício: Capítulo 26, Exercício 2 (Nível: 12)
- Exercício: Capítulo 26, Exercício 3 (Nível: 12)
- Exercício: Capítulo 22, Exercício 7 (Nível: 10) HOT 4
- Capítulo 22, Exercício 6 (Nível: 10) HOT 4
- Links das Provas Ninja 1 e 2 quebrados HOT 5
- Tipagem Golang
- Primeiro exercício concluído:
- Minha solução primeiro exercicio HOT 1
- Minha solução para o primeiro exercicio
- Solução exercicio 2
- Exercicio : Nivel 1
- #1
- Opa! o link do Power Point não esta funcionado na aula Cap. 4 – 2
- Resolução do Exercicio - 01
- Resolução do Exercicio 1.2
- Resolução do Exercicio 1.3
- Resolução do Exercicio Nivel 1 - 4
- Resolução do Exercicio 5
- Minha solução:
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from aprendago.