{"id":"a112c244-0e71-472d-95c6-bfe743d995c4","shortId":"2TVeGF","kind":"skill","title":"golang-google-wire","tagline":"Compile-time dependency injection in Golang using google/wire — wire.NewSet, wire.Build, wire.Bind (interface→concrete), wire.Struct, wire.Value, wire.InterfaceValue, wire.FieldsOf, cleanup functions, //go:build wireinject injector files, and generated wire_gen.go. Apply when usi","description":"**Persona:** You are a Go architect using wire for compile-time DI. You let the compiler catch missing dependencies, treat `wire_gen.go` as committed source, and re-run `wire ./...` after every graph change.\n\n# Using google/wire for Compile-Time Dependency Injection in Go\n\nCode-generation DI toolkit. Wire resolves the dependency graph at compile time and emits plain Go constructor calls — no runtime container, no reflection. Errors appear when you run `wire ./...`, not at first request.\n\nNote: `google/wire` was archived in August 2025 (feature-complete; bug fixes still accepted).\n\n**Official Resources:** [pkg.go.dev](https://pkg.go.dev/github.com/google/wire) · [github.com/google/wire](https://github.com/google/wire) · [User Guide](https://github.com/google/wire/blob/main/docs/guide.md) · [Best Practices](https://github.com/google/wire/blob/main/docs/best-practices.md)\n\nThis skill is not exhaustive. Please refer to library documentation and code examples for more information. Context7 can help as a discoverability platform.\n\n```bash\ngo install github.com/google/wire/cmd/wire@latest\ngo get github.com/google/wire\n```\n\n## wire vs. Runtime DI\n\n| Concern           | wire                      | dig / fx / samber/do   |\n| ----------------- | ------------------------- | ---------------------- |\n| Resolution        | Compile time (codegen)    | Runtime (reflection)   |\n| Error detection   | `wire ./...` fails        | First `Invoke`/startup |\n| Runtime container | None — plain Go calls     | Present                |\n| Lifecycle hooks   | Not built in              | fx: OnStart/OnStop     |\n| Generated files   | `wire_gen.go` (committed) | None                   |\n\nFor lifecycle, lazy loading, and a full matrix see `samber/cc-skills-golang@golang-dependency-injection`.\n\n## Providers\n\nA provider is any Go function — inputs are dependencies, outputs are provided types. Three return forms:\n\n```go\nfunc NewConfig() *Config                          { return &Config{Addr: \":8080\"} }\nfunc NewDB(cfg *Config) (*sql.DB, error)          { return sql.Open(\"postgres\", cfg.DSN) }\nfunc NewRedis(cfg *Config) (*redis.Client, func(), error) { // cleanup chained in reverse order\n    c := redis.NewClient(&redis.Options{Addr: cfg.RedisAddr})\n    return c, func() { c.Close() }, nil\n}\n```\n\n## Provider Sets\n\n`wire.NewSet` groups providers for reuse. Sets can reference other sets.\n\n```go\n// infra/wire.go\nvar InfraSet = wire.NewSet(\n    NewConfig,\n    NewDB,\n    NewRedis,\n)\n\n// service/wire.go\nvar ServiceSet = wire.NewSet(\n    NewUserRepo,\n    NewUserService,\n    wire.Bind(new(UserStore), new(*UserRepo)), // interface binding\n)\n```\n\nKeep sets small: library sets expose a stable surface (adding inputs or removing outputs breaks downstream injectors). One set per package is a useful default.\n\n## Injectors and `//go:build wireinject`\n\nThe injector file declares the initialization function. Wire generates its body into `wire_gen.go` and replaces the stub.\n\n```go\n//go:build wireinject\n\npackage main\n\nimport \"github.com/google/wire\"\n\n// Wire generates the body of this function.\nfunc InitApp() (*App, func(), error) {\n    wire.Build(InfraSet, ServiceSet, NewApp)\n    return nil, nil, nil // replaced by codegen\n}\n```\n\nThe `//go:build wireinject` tag prevents the stub from being compiled into the binary — only `wire_gen.go` (which has no such tag) makes it through `go build`. Without this tag, both files define the same function, causing a compile error.\n\nAlternative syntax when a dummy return is inconvenient:\n\n```go\nfunc InitApp() (*App, func(), error) {\n    panic(wire.Build(InfraSet, ServiceSet, NewApp))\n}\n```\n\n## Interface Bindings\n\nWire forbids implicit interface satisfaction — you must declare bindings explicitly so the graph is unambiguous when multiple types implement the same interface.\n\n```go\nvar Set = wire.NewSet(\n    NewPostgresUserRepo,\n    wire.Bind(new(UserStore), new(*PostgresUserRepo)), // tell wire: *PostgresUserRepo satisfies UserStore\n)\n```\n\nExplicit bindings prevent graph breakage when a new type implementing the same interface is added elsewhere.\n\n## Struct Providers and Values\n\n`wire.Struct` fills struct fields from the graph without a manual constructor. Tag fields `wire:\"-\"` to exclude them.\n\n```go\nwire.Struct(new(Server), \"Logger\", \"DB\") // inject named fields\nwire.Struct(new(Server), \"*\")            // inject all non-excluded fields\nwire.Value(Foo{X: 42})                   // constant expression (no fn calls / channels)\nwire.InterfaceValue(new(io.Reader), os.Stdin) // interface-typed literal\nwire.FieldsOf(new(Config), \"DSN\", \"Addr\")    // promote struct fields as graph nodes\n```\n\nSee [advanced.md](references/advanced.md) for the `wire:\"-\"` exclusion tag and `wire.FieldsOf` details.\n\n## Disambiguating Duplicate Types\n\nWire forbids two providers for the same type. Wrap the underlying type in distinct named types so each has exactly one provider:\n\n```go\ntype PrimaryDSN string\ntype ReplicaDSN string\n```\n\n## Full Application Example\n\n```go\n// wire.go — injector, excluded from binary via build tag\n//go:build wireinject\n\npackage main\n\nfunc InitApp() (*App, func(), error) {\n    wire.Build(config.ConfigSet, infra.InfraSet, service.ServiceSet, NewApp)\n    return nil, nil, nil\n}\n\n// main.go\nfunc main() {\n    app, cleanup, err := InitApp()\n    if err != nil { log.Fatal(err) }\n    defer cleanup()\n    app.Run()\n}\n```\n\nWire generates `wire_gen.go` (plain Go, committed, DO NOT EDIT). For a full example with per-package sets, cleanup-heavy graphs, and generated output, see [recipes.md](references/recipes.md).\n\n## Codegen Workflow\n\n```bash\nwire ./...           # regenerate all injectors in the module\nwire check ./...     # validate graph without regenerating (fast CI check)\n```\n\nRun `wire ./...` after every constructor signature change. Add `//go:generate go run github.com/google/wire/cmd/wire` to injector files so `go generate ./...` also works. Commit `wire_gen.go` — it must stay in sync for CI builds.\n\n## Best Practices\n\n1. Never edit `wire_gen.go` — it is overwritten on every `wire ./...` run. Treat it as a build artifact that happens to be committed; source of truth is the provider and injector files.\n2. Always add `//go:build wireinject` to injector files — omitting it causes duplicate-symbol compile errors because both the stub and the generated file define the same function.\n3. Use named types to distinguish values of the same underlying type — wire enforces one provider per type; named types like `type DSN string` let you have `PrimaryDSN` and `ReplicaDSN` coexist.\n4. Keep library provider sets minimal and backward-compatible — adding new required inputs breaks downstream injectors; removing outputs does too. Introduce only newly-created types in the same release.\n5. Return `(T, func(), error)` from cleanup providers and let wire chain them — wire generates the correct reverse-order cleanup and handles partial failures (if construction fails midway, only already-built cleanups run).\n6. Keep injector files focused — one function per file, one package import at a time. Fat injectors with dozens of `wire.Build` arguments are hard to reason about; delegate to per-package sets.\n\n## Common Mistakes\n\n| Mistake | Fix |\n| --- | --- |\n| Editing `wire_gen.go` manually | Never edit it. Change providers or injectors and re-run `wire ./...`. |\n| Missing `//go:build wireinject` | Add the tag as the very first line of every injector file. |\n| Two providers returning `*sql.DB` | Wrap with named types (`type PrimaryDB *sql.DB` or a wrapper struct). |\n| Injecting an interface without `wire.Bind` | Add `wire.Bind(new(MyInterface), new(*MyImpl))` to the provider set. |\n| Forgetting to re-run `wire ./...` after changes | Run wire before `go build`; add it to `go generate` or a Makefile target. |\n| Calling `cleanup()` without guarding for nil | Wire returns nil cleanup on construction error; guard with `if cleanup != nil { defer cleanup() }`. |\n\n## Testing\n\nWire generates plain Go constructors, so unit tests use manual injection — no container to clone or reset. For testing patterns (test injectors swapping real providers for fakes, CI stale-check for `wire_gen.go`), see [testing.md](references/testing.md).\n\n## Further Reading\n\n- [advanced.md](references/advanced.md) — cleanup chains, multiple injectors, set nesting, error catalogue, codegen flags, quick reference\n- [recipes.md](references/recipes.md) — HTTP server, multi-injector build, cleanup-heavy graph, CLI embedding\n- [testing.md](references/testing.md) — test injectors, fake bindings, CI stale check\n\n## Cross-References\n\n- → See `samber/cc-skills-golang@golang-dependency-injection` skill for DI concepts and library comparison\n- → See `samber/cc-skills-golang@golang-uber-dig` skill for runtime reflection-based DI without lifecycle\n- → See `samber/cc-skills-golang@golang-uber-fx` skill for runtime DI with lifecycle hooks, modules, and signal-aware Run()\n- → See `samber/cc-skills-golang@golang-samber-do` skill for generics-based DI without reflection\n- → See `samber/cc-skills-golang@golang-structs-interfaces` skill for interface design patterns\n- → See `samber/cc-skills-golang@golang-testing` skill for general testing patterns\n\nIf you encounter a bug or unexpected behavior in google/wire, open an issue at <https://github.com/google/wire/issues>.","tags":["golang","google","wire","skills","samber","agent","agent-skills","antigravity","claude","claude-code","code","codex"],"capabilities":["skill","source-samber","skill-golang-google-wire","topic-agent","topic-agent-skills","topic-antigravity","topic-claude","topic-claude-code","topic-code","topic-codex","topic-coding","topic-copilot","topic-cursor","topic-gemini","topic-gemini-cli-extension"],"categories":["cc-skills-golang"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/samber/cc-skills-golang/golang-google-wire","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add samber/cc-skills-golang","source_repo":"https://github.com/samber/cc-skills-golang","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 1725 github stars · SKILL.md body (9,323 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:53:01.161Z","embedding":null,"createdAt":"2026-05-01T12:52:35.751Z","updatedAt":"2026-05-18T18:53:01.161Z","lastSeenAt":"2026-05-18T18:53:01.161Z","tsv":"'/github.com/google/wire)':133 '/go':25,353,374,407,642,731,792,968 '/google/wire':180,382 '/google/wire/blob/main/docs/best-practices.md)':146 '/google/wire/blob/main/docs/guide.md)':141 '/google/wire/cmd/wire':737 '/google/wire/cmd/wire@latest':175 '/google/wire/issues':1232 '/google/wire](https://github.com/google/wire)':136 '/startup':202 '1':758 '2':789 '2025':120 '3':818 '4':849 '42':561 '5':880 '6':915 '8080':260 'accept':127 'ad':335,517,859 'add':730,791,971,1003,1026 'addr':259,286,580 'advanced.md':588,1094 'alreadi':911 'already-built':910 'also':744 'altern':445 'alway':790 'app':392,456,649,664 'app.run':675 'appear':105 'appli':33 'applic':631 'architect':41 'archiv':117 'argument':936 'artifact':774 'august':119 'awar':1179 'backward':857 'backward-compat':856 'base':1158,1191 'bash':170,706 'behavior':1223 'best':142,756 'binari':419,638 'bind':325,465,474,504,1127 'bodi':366,386 'break':340,863 'breakag':507 'bug':124,1220 'build':26,354,375,408,431,640,643,755,773,793,969,1025,1115 'built':213,912 'c':283,289 'c.close':291 'call':98,208,566,1035 'catalogu':1103 'catch':53 'caus':441,800 'cfg':263,273 'cfg.dsn':270 'cfg.redisaddr':287 'chain':279,891,1097 'chang':69,729,958,1020 'channel':567 'check':715,722,1086,1130 'ci':721,754,1083,1128 'cleanup':23,278,665,674,695,886,900,913,1036,1044,1051,1054,1096,1117 'cleanup-heavi':694,1116 'cli':1120 'clone':1070 'code':81,158 'code-gener':80 'codegen':193,405,704,1104 'coexist':848 'commit':59,220,681,746,779 'common':948 'comparison':1146 'compat':858 'compil':6,46,52,74,91,191,416,443,804 'compile-tim':5,45,73 'complet':123 'concept':1143 'concern':185 'concret':18 'config':256,258,264,274,578 'config.configset':653 'constant':562 'construct':906,1046 'constructor':97,533,727,1060 'contain':101,204,1068 'context7':163 'correct':896 'creat':874 'cross':1132 'cross-refer':1131 'db':545 'declar':359,473 'default':350 'defer':673,1053 'defin':437,814 'deleg':942 'depend':8,55,76,88,234,245,1138 'design':1204 'detail':597 'detect':197 'di':48,83,184,1142,1159,1171,1192 'dig':187,1152 'disambigu':598 'discover':168 'distinct':614 'distinguish':823 'document':156 'downstream':341,864 'dozen':933 'dsn':579,840 'dummi':449 'duplic':599,802 'duplicate-symbol':801 'edit':684,760,952,956 'elsewher':518 'embed':1121 'emit':94 'encount':1218 'enforc':831 'err':666,669,672 'error':104,196,266,277,394,444,458,651,805,884,1047,1102 'everi':67,726,766,980 'exact':620 'exampl':159,632,688 'exclud':538,556,636 'exclus':593 'exhaust':151 'explicit':475,503 'expos':331 'express':563 'fail':199,907 'failur':904 'fake':1082,1126 'fast':720 'fat':930 'featur':122 'feature-complet':121 'field':526,535,548,557,583 'file':29,218,358,436,740,788,797,813,918,923,982 'fill':524 'first':112,200,977 'fix':125,951 'flag':1105 'fn':565 'focus':919 'foo':559 'forbid':467,602 'forget':1013 'form':252 'full':228,630,687 'func':254,261,271,276,290,390,393,454,457,647,650,662,883 'function':24,242,362,389,440,817,921 'fx':188,215,1167 'general':1213 'generat':31,82,217,364,384,677,699,732,743,812,894,1030,1057 'generic':1190 'generics-bas':1189 'get':177 'github.com':135,140,145,174,179,381,736,1231 'github.com/google/wire':178,380 'github.com/google/wire/blob/main/docs/best-practices.md)':144 'github.com/google/wire/blob/main/docs/guide.md)':139 'github.com/google/wire/cmd/wire':735 'github.com/google/wire/cmd/wire@latest':173 'github.com/google/wire/issues':1230 'github.com/google/wire](https://github.com/google/wire)':134 'go':40,79,96,171,176,207,241,253,305,373,430,453,488,540,623,633,680,733,742,1024,1029,1059 'golang':2,11,233,1137,1150,1165,1184,1198,1209 'golang-dependency-inject':232,1136 'golang-google-wir':1 'golang-samber-do':1183 'golang-structs-interfac':1197 'golang-test':1208 'golang-uber-dig':1149 'golang-uber-fx':1164 'googl':3 'google/wire':13,71,115,1225 'graph':68,89,478,506,529,585,697,717,1119 'group':296 'guard':1038,1048 'guid':138 'handl':902 'happen':776 'hard':938 'heavi':696,1118 'help':165 'hook':211,1174 'http':1110 'implement':484,512 'implicit':468 'import':379,926 'inconveni':452 'inform':162 'infra.infraset':654 'infra/wire.go':306 'infraset':308,396,461 'initapp':391,455,648,667 'initi':361 'inject':9,77,235,546,552,998,1066,1139 'injector':28,342,351,357,635,710,739,787,796,865,917,931,961,981,1077,1099,1114,1125 'input':243,336,862 'instal':172 'interfac':17,324,464,469,487,515,573,1000,1200,1203 'interface-typ':572 'introduc':870 'invok':201 'io.reader':570 'issu':1228 'keep':326,850,916 'lazi':224 'let':50,842,889 'librari':155,329,851,1145 'lifecycl':210,223,1161,1173 'like':838 'line':978 'liter':575 'load':225 'log.fatal':671 'logger':544 'main':378,646,663 'main.go':661 'make':427 'makefil':1033 'manual':532,954,1065 'matrix':229 'midway':908 'minim':854 'miss':54,967 'mistak':949,950 'modul':713,1175 'multi':1113 'multi-injector':1112 'multipl':482,1098 'must':472,749 'myimpl':1008 'myinterfac':1006 'name':547,615,820,836,989 'nest':1101 'never':759,955 'new':320,322,494,496,510,542,550,569,577,860,1005,1007 'newapp':398,463,656 'newconfig':255,310 'newdb':262,311 'newli':873 'newly-cr':872 'newpostgresuserrepo':492 'newredi':272,312 'newuserrepo':317 'newuserservic':318 'nil':292,400,401,402,658,659,660,670,1040,1043,1052 'node':586 'non':555 'non-exclud':554 'none':205,221 'note':114 'offici':128 'omit':798 'one':343,621,832,920,924 'onstart/onstop':216 'open':1226 'order':282,899 'os.stdin':571 'output':246,339,700,867 'overwritten':764 'packag':346,377,645,692,925,946 'panic':459 'partial':903 'pattern':1075,1205,1215 'per':345,691,834,922,945 'per-packag':690,944 'persona':36 'pkg.go.dev':130,132 'pkg.go.dev/github.com/google/wire)':131 'plain':95,206,679,1058 'platform':169 'pleas':152 'postgr':269 'postgresuserrepo':497,500 'practic':143,757 'present':209 'prevent':411,505 'primarydb':992 'primarydsn':625,845 'promot':581 'provid':236,238,248,293,297,520,604,622,785,833,852,887,959,984,1011,1080 'quick':1106 're':63,964,1016 're-run':62,963,1015 'read':1093 'real':1079 'reason':940 'recipes.md':702,1108 'redis.client':275 'redis.newclient':284 'redis.options':285 'refer':153,302,1107,1133 'references/advanced.md':589,1095 'references/recipes.md':703,1109 'references/testing.md':1091,1123 'reflect':103,195,1157,1194 'reflection-bas':1156 'regener':708,719 'releas':879 'remov':338,866 'replac':370,403 'replicadsn':628,847 'request':113 'requir':861 'reset':1072 'resolut':190 'resolv':86 'resourc':129 'return':251,257,267,288,399,450,657,881,985,1042 'reus':299 'revers':281,898 'reverse-ord':897 'run':64,108,723,734,768,914,965,1017,1021,1180 'runtim':100,183,194,203,1155,1170 'samber':1185 'samber/cc-skills-golang':231,1135,1148,1163,1182,1196,1207 'samber/do':189 'satisfact':470 'satisfi':501 'see':230,587,701,1089,1134,1147,1162,1181,1195,1206 'server':543,551,1111 'service.serviceset':655 'service/wire.go':313 'serviceset':315,397,462 'set':294,300,304,327,330,344,490,693,853,947,1012,1100 'signal':1178 'signal-awar':1177 'signatur':728 'skill':148,1140,1153,1168,1187,1201,1211 'skill-golang-google-wire' 'small':328 'sourc':60,780 'source-samber' 'sql.db':265,986,993 'sql.open':268 'stabl':333 'stale':1085,1129 'stale-check':1084 'stay':750 'still':126 'string':626,629,841 'struct':519,525,582,997,1199 'stub':372,413,809 'surfac':334 'swap':1078 'symbol':803 'sync':752 'syntax':446 'tag':410,426,434,534,594,641,973 'target':1034 'tell':498 'test':1055,1063,1074,1076,1124,1210,1214 'testing.md':1090,1122 'three':250 'time':7,47,75,92,192,929 'toolkit':84 'topic-agent' 'topic-agent-skills' 'topic-antigravity' 'topic-claude' 'topic-claude-code' 'topic-code' 'topic-codex' 'topic-coding' 'topic-copilot' 'topic-cursor' 'topic-gemini' 'topic-gemini-cli-extension' 'treat':56,769 'truth':782 'two':603,983 'type':249,483,511,574,600,608,612,616,624,627,821,829,835,837,839,875,990,991 'uber':1151,1166 'unambigu':480 'under':611,828 'unexpect':1222 'unit':1062 'use':12,42,70,349,819,1064 'user':137 'userrepo':323 'userstor':321,495,502 'usi':35 'valid':716 'valu':522,824 'var':307,314,489 'via':639 'vs':182 'wire':4,43,65,85,109,181,186,198,363,383,466,499,536,592,601,676,707,714,724,767,830,890,893,966,1018,1022,1041,1056 'wire.bind':16,319,493,1002,1004 'wire.build':15,395,460,652,935 'wire.fieldsof':22,576,596 'wire.go':634 'wire.interfacevalue':21,568 'wire.newset':14,295,309,316,491 'wire.struct':19,523,541,549 'wire.value':20,558 'wire_gen.go':32,57,219,368,421,678,747,761,953,1088 'wireinject':27,355,376,409,644,794,970 'without':432,530,718,1001,1037,1160,1193 'work':745 'workflow':705 'wrap':609,987 'wrapper':996 'x':560","prices":[{"id":"26f9e2ae-51d4-4a81-a906-88ecf30a47e8","listingId":"a112c244-0e71-472d-95c6-bfe743d995c4","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"samber","category":"cc-skills-golang","install_from":"skills.sh"},"createdAt":"2026-05-01T12:52:35.751Z"}],"sources":[{"listingId":"a112c244-0e71-472d-95c6-bfe743d995c4","source":"github","sourceId":"samber/cc-skills-golang/golang-google-wire","sourceUrl":"https://github.com/samber/cc-skills-golang/tree/main/skills/golang-google-wire","isPrimary":false,"firstSeenAt":"2026-05-01T12:52:35.751Z","lastSeenAt":"2026-05-18T18:53:01.161Z"},{"listingId":"a112c244-0e71-472d-95c6-bfe743d995c4","source":"skills_sh","sourceId":"samber/cc-skills-golang/golang-google-wire","sourceUrl":"https://skills.sh/samber/cc-skills-golang/golang-google-wire","isPrimary":true,"firstSeenAt":"2026-05-07T20:42:05.751Z","lastSeenAt":"2026-05-07T22:41:23.855Z"}],"details":{"listingId":"a112c244-0e71-472d-95c6-bfe743d995c4","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"samber","slug":"golang-google-wire","github":{"repo":"samber/cc-skills-golang","stars":1725,"topics":["agent","agent-skills","ai","antigravity","claude","claude-code","code","codex","coding","copilot","cursor","gemini","gemini-cli-extension","openclaw","opencode","plugin","skills","skillsmp","vibe-coding"],"license":"mit","html_url":"https://github.com/samber/cc-skills-golang","pushed_at":"2026-05-18T17:36:00Z","description":"🧑‍🎨 A collection of Golang agentic skills that works","skill_md_sha":"6fcc99560767a5142bc01ea776608da3d64f4923","skill_md_path":"skills/golang-google-wire/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/samber/cc-skills-golang/tree/main/skills/golang-google-wire"},"layout":"multi","source":"github","category":"cc-skills-golang","frontmatter":{"name":"golang-google-wire","license":"MIT","description":"Compile-time dependency injection in Golang using google/wire — wire.NewSet, wire.Build, wire.Bind (interface→concrete), wire.Struct, wire.Value, wire.InterfaceValue, wire.FieldsOf, cleanup functions, //go:build wireinject injector files, and generated wire_gen.go. Apply when using or adopting google/wire, when the codebase imports `github.com/google/wire`, or when wiring an application graph at compile time via `wire.Build`. For runtime DI with reflection, see `samber/cc-skills-golang@golang-uber-dig` skill.","compatibility":"Designed for Claude Code or similar AI coding agents, and for projects using Golang."},"skills_sh_url":"https://skills.sh/samber/cc-skills-golang/golang-google-wire"},"updatedAt":"2026-05-18T18:53:01.161Z"}}