O que é uma struct em Solidity?
Escrito por John Favole
Existem diferentes tipos de dados básicos em Solidity, como uint (inteiros sem sinal), bool e string, mas, como desenvolvedor blockchain, você pode precisar de um tipo de dado flexível que possa definir você mesmo. Uma struct é um formato de estrutura de dados em Solidity em que variáveis de tipos de dados diversos podem ser agrupadas em uma única variável ou tipo personalizado.
Este artigo apresentará as structs em Solidity, demonstrando o que elas fazem e como funcionam. Por fim, explicaremos como usar structs para criar smart contracts mais robustos.
O que é uma struct em Solidity?
Uma struct é um formato criativo de estrutura de dados em Solidity em que variáveis de tipos de dados diversos podem ser agrupadas em uma única variável ou tipo personalizado. Uma vez que os tipos de dados são agrupados em uma struct, o nome da struct representa os subconjuntos de variáveis nela contidos.
Imagine as structs como recipientes que contêm diferentes tipos de objetos, de forma que, quando você move o recipiente, todos os itens dentro dele também se movem. Portanto, quando um desenvolvedor Solidity declara ou chama o nome de uma struct, a struct responde de acordo com os tipos de dados contidos nela.
A seguir, um exemplo de struct em Solidity:
O exemplo de struct acima contém variáveis para address creator, string name, address users e uint amount.
Exemplos de código de struct em Solidity
Esta seção mostrará exemplos de código para definir e criar structs em Solidity. Também demonstraremos as duas opções disponíveis para declaração de structs. Por fim, mostraremos como importar e inicializar structs.
Como definir e criar uma struct em Solidity
O código de struct é parecido com a forma como a declaração de objetos funciona em Javascript. Embora a semelhança seja marcante, as sintaxes funcionam de maneira diferente. Uma struct em Solidity sempre segue o seguinte formato:
Veja como definir e criar uma struct em Solidity:
- Crie uma struct escrevendo a palavra-chave struct, que informa ao compilador Solidity que o tipo em questão é um tipo personalizado
- Dê um nome à struct, que será correferencial às variáveis agrupadas na struct
- Use chaves, pois qualquer outra forma de parênteses ou colchetes não compilará
Se você não usar chaves, receberá a seguinte mensagem de ParserError no Remix.

- Declare seus tipos de dados junto com as variáveis correspondentes
No exemplo acima, foram string theWord, uint theFigure e bool polarData. É aqui que você declara os subconjuntos das suas structs. Depois que a struct é declarada no smart contract, podemos chamar o nome da struct mais adiante no código.
Dicas para desenvolvedores:
- Use apenas chaves
- Termine cada membro de uma struct com ponto e vírgula
- Solidity gerará um erro se você declarar um tipo de dado e informar uma variável que não se encaixa nessa classe
- Smart contracts podem conter múltiplas structs, diferenciadas por sua palavra-chave
Como declarar uma struct em Solidity
Há dois lugares onde você pode declarar structs: dentro de um contract ou fora de um contract. Saber onde declarar suas structs em Solidity depende do que você quer fazer. Vamos ver as duas opções de declaração de struct.
Declarar uma struct fora de um contract
No exemplo acima, a struct floorOverlay foi declarada fora do smart contract, e todos os contracts na base de código podem chamá-la. É melhor declarar uma struct fora de um smart contract para criar uma struct mais aplicável a todos os seus contracts, em contraste com contracts individuais, que podem ter structs específicas apenas para eles.
Além disso, se você quiser que smart contracts acessem o mesmo conjunto de structs, declare-as logo após o pragma, em vez de criar structs separadamente em cada smart contract.
Declarar uma struct dentro de um contract
A struct carpet está dentro do smart contract e, como resultado, sua funcionalidade fica restrita ao contract atual. Nenhum outro contract pode chamar seu nome.
Como importar uma struct em Solidity
Structs podem ser importadas de um smart contract para outro, o que ajuda os desenvolvedores a economizar tempo e criar código reutilizável. Para demonstrar como importar uma struct, abaixo estão dois smart contracts: um onde a struct foi criada e outro para onde ela será importada.
Há um erro que você deve evitar ao importar: o nome do segundo contract deve ser o nome da struct que você quer importar. Caso contrário, os compiladores Solidity não conseguirão identificá-la, o que resultará em um bug.
Como inicializar uma struct em Solidity
Mesmo depois de declarar e criar sua struct, você não conseguirá usá-la em várias funções Solidity sem atribuir a ela um determinado valor inicial. Há 3 formas de inicializar structs: (i) o método de pares chave-valor, (ii) o método de definir e atualizar, (iii) colocar os parâmetros entre parênteses.
1. O método de pares chave-valor
Nesse método, você escolhe cada tipo de chave na struct e atribui valores a eles.
A sintaxe desse método não é rígida; você pode optar por não seguir a ordem dos tipos na struct.
2. O método de definir e atualizar
A sintaxe desse método de inicialização é tal que você precisa primeiro informar uma variável para armazenar a struct, depois usar a variável para acessar e nomear cada membro da struct. O código a seguir é uma ilustração:
No entanto, tenha em mente que a maioria dos desenvolvedores não usa esse método porque ele é mais longo.
3. Colocar os parâmetros entre parênteses
Se você quiser usar esse método, precisará chamar o nome da struct, armazenar sua memória e atribuir valores aos membros da struct em ordem sequencial. Veja um exemplo:
Aqui, "measles" é a variável que armazena essa inicialização, e também declaramos os parâmetros conforme definidos na struct. Lembre-se sempre de colocar o nome da declaração entre aspas dentro dos parênteses, para que os compiladores Solidity consigam identificá-lo.
Casos de uso de structs em Solidity
Esta seção demonstra um caso de uso de Solidity para rastrear informações de usuários dentro de um contract. Structs são mapeadas nesse caso de uso.
Structs podem ser mapeadas em Solidity?
Structs podem ser mapeadas em Solidity como tipos de valor, o que permite rastrear informações sobre qualquer membro da sua struct. Veja o seguinte código como exemplo:
Neste contract, os detalhes de cada membro de uma DAO específica são categorizados. Criamos dois mapeamentos aqui: um simples e outro aninhado.
No mapeamento simples, mapeamos o address de cada membro na struct para facilitar a localização de um membro específico. Além disso, um mapeamento aninhado facilitará o rastreamento dos endereços dos membros da DAO e se eles votaram ou não.
Como o mapeamento sempre segue a sintaxe key type => value type, structs sempre devem ser declaradas como um tipo de valor, e não como um tipo de chave. Caso contrário, você receberá um erro.

Resumo — qual é a essência das structs em Solidity?
Structs em Solidity permitem que os desenvolvedores criem tipos personalizados adequados ao que estão construindo. Os tipos personalizados são semelhantes a recipientes que contêm outros tipos de dados relacionados dentro deles. Para aprender mais sobre structs, inscreva-se no bootcamp de Solidity da Alchemy University!
Visões gerais relacionadas
Solidity3 de dezembro de 2025
As 6 melhores IDEs de Solidity para desenvolvedores (2026)
Conheça as melhores IDEs para desenvolvimento em Solidity.
Solidity19 de novembro de 2025
Otimização de gas em Solidity: 12 técnicas para deixar seus smart contracts mais baratos e eficientes
Quer escrever código melhor e reduzir suas taxas de gas?
Solidity13 de novembro de 2025
12 boas práticas de segurança para smart contracts em Solidity
Proteja seus smart contracts com essas dicas e ferramentas de segurança de especialistas.

Construa magia blockchain
A Alchemy combina os produtos e ferramentas de desenvolvimento Web3 mais poderosos com recursos, comunidade e suporte lendário.