Comments (2)
Hi @steeve85,
cty
values are, by design, always immutable. Instead of modifying an existing object, you must construct a new object.
If the change you want to make is shallow (that is, it only involves changes to the top-level map or object) then AsValueMap
can be part of the solution, but you then need to pass the modified map back to cty.MapVal
or cty.ObjectVal
(depending on whether you intend to create a map-typed or object-typed value) to construct the new value:
foo1 := cty.ObjectVal(map[string]cty.Value{
"example1": cty.StringVal("a"),
})
fooMap := foo1.AsValueMap()
fooMap["example2"] = cty.StringVal("b")
foo2 := cty.ObjectVal(fooMap)
If you want to make a change deep inside the structure then things can get more involved: you'll need to reconstruct each level you want to modify one at a time.
cty
is designed to be used as part of implementing languages that use a functional programming style with no mutation, so there are no functions for modifying values in-place. In practice applications that use values resulting from such a language, such as Terraform providers consuming the result of evaluating a Terraform configuration, do it by converting from cty.Value
to some suitable application-specific data type -- which, in the case of Terraform providers, is mutable -- and then convert that data type back into an entirely new cty.Value
to return, so the cty
representation is used only for transport to and from the language runtime and not for internal processing.
from go-cty.
@apparentlymart Great, totally make sense. Thank you for the help!
from go-cty.
Related Issues (20)
- 1.11.0 causes errors with //go:generate packer-sdc mapstructure-to-hcl2 HOT 1
- hashicorp/packer-plugin-sdk incompatible with zclconf/go-cty v1.11.0 HOT 4
- TestFormatDate fails with upcoming Go 1.20 release HOT 5
- Add support for decoding into structs with a custom tag HOT 1
- Nested go struct to cty value fails HOT 1
- Proposal: JSON serialization of `cty.Path` HOT 3
- cty/json: configure (non-)HTML-escaping serialization HOT 3
- stdlib: SetProductFunc doesn't seem to handle refinements quite right HOT 2
- How to convert cty.Value of unknown type into `interface{}` HOT 2
- cty.StringVal always doubles $ in `${}` output HOT 2
- Parse string into cty type HOT 1
- cty.StringVal always doubles $ in ${} output Pt2 HOT 1
- adding jsonencode() block into a generated terraform file using golang cty HOT 2
- Encoding values with custom function (terraform provider) HOT 1
- Marshal() generate invalid JSON HOT 2
- panic with `AsString()` on result of json encoding of to_number conversion of null value HOT 4
- Some valid `Path` values cannot be applied to their source `Value` HOT 2
- Add a deepmerge function HOT 1
- `ObjectVal` or `MapVal `without `NormalizeString` HOT 6
- Some method to avoid the lexicographical order when parsing tokens HOT 1
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 go-cty.