<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: CIARANA</title>
    <description>The latest articles on DEV Community by CIARANA (@cia_rana).</description>
    <link>https://dev.to/cia_rana</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F89218%2F07be695a-d50f-40d9-82be-46f5cbdcb174.jpg</url>
      <title>DEV Community: CIARANA</title>
      <link>https://dev.to/cia_rana</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cia_rana"/>
    <language>en</language>
    <item>
      <title>Is golangci-lint Generics Readiness?</title>
      <dc:creator>CIARANA</dc:creator>
      <pubDate>Thu, 23 Dec 2021 15:18:16 +0000</pubDate>
      <link>https://dev.to/cia_rana/is-golangci-lint-generics-readiness-200n</link>
      <guid>https://dev.to/cia_rana/is-golangci-lint-generics-readiness-200n</guid>
      <description>&lt;p&gt;This post is Day 24 of &lt;a href="https://qiita.com/advent-calendar/2021/go"&gt;Go Advent Calendar 2021&lt;/a&gt;(jp). 🎄🎅&lt;/p&gt;




&lt;p&gt;&lt;a href="https://golangci-lint.run/"&gt;golangci-lint&lt;/a&gt; is easy to use a very large of linters with a configuration file. On the other hand, it depends on a lot of linters, which makes it difficult to incorporate the latest implementations of them. Also, many of them have not been updated for some time. In such a situation, Go could introduce Generics at any moment. So I checked whether the linters support Generics or not, and summarized the results in the following list. In order to check if each linter supports or is going to support Generics, I search the issues and pull requests from the last 6 months using the keywords "generics", "type" and "1.18".&lt;/p&gt;




&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Remark&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/remyoudompheng/go-misc/tree/master/deadcode"&gt;deadcode&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;no update for 5 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/kisielk/errcheck"&gt;errcheck&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/dominikh/go-tools/tree/master/simple"&gt;gosimple&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://pkg.go.dev/cmd/vet"&gt;govet&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tip.golang.org/doc/go1.18#vet"&gt;https://tip.golang.org/doc/go1.18#vet&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/gordonklaus/ineffassign"&gt;ineffassign&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://staticcheck.io/"&gt;staticcheck&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/dominikh/go-tools/issues/1146"&gt;issue&lt;/a&gt; exists but not yet supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/opennota/check"&gt;structcheck&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;no update for 3 years（Reference to the package changed from GitHub to GitLab.）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/golangci/golangci-lint/blob/master/pkg/golinters/typecheck.go"&gt;typecheck&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/dominikh/go-tools/tree/master/unused"&gt;unused&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/opennota/check"&gt;varcheck&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;same as structcheck&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/tdakkota/asciicheck"&gt;asciicheck&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/breml/bidichk"&gt;bidichk&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/timakin/bodyclose"&gt;bodyclose&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/sylvia7788/contextcheck"&gt;contextcheck&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bkielbasa/cyclop"&gt;cyclop&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/OpenPeeDeeP/depguard"&gt;depguard&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/alexkohler/dogsled"&gt;dogsled&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/mibk/dupl"&gt;dupl&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/charithe/durationcheck"&gt;durationcheck&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/breml/errchkjson"&gt;errchkjson&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/Antonboom/errname"&gt;errname&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/polyfloyd/go-errorlint"&gt;errorlint&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/nishanths/exhaustive"&gt;exhaustive&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;There is no indication of how it will be implemented, but there is &lt;a href="https://github.com/nishanths/exhaustive/issues/31"&gt;an issue&lt;/a&gt; that talks about the need to update it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/mbilski/exhaustivestruct"&gt;exhaustivestruct&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/kyoh86/exportloopref"&gt;exportloopref&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/ashanbrown/forbidigo"&gt;forbidigo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/gostaticanalysis/forcetypeassert"&gt;forcetypeassert&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/ultraware/funlen"&gt;funlen&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;no update for a year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/daixiang0/gci"&gt;gci&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/leighmcculloch/gochecknoglobals"&gt;gochecknoglobals&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/leighmcculloch/gochecknoinits"&gt;gochecknoinits&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/uudashr/gocognit"&gt;gocognit&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jgautheron/goconst"&gt;goconst&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/go-critic/go-critic"&gt;gocritic&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;Previously fixed error is &lt;a href="https://github.com/golangci/golangci-lint/issues/2414"&gt;recurring&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/fzipp/gocyclo"&gt;gocyclo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/tetafro/godot"&gt;godot&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/matoous/godox"&gt;godox&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;issue tab is hidden&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/Djarvur/go-err113"&gt;goerr113&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://pkg.go.dev/cmd/gofmt"&gt;gofmt&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Referencing standard packages via &lt;a href="https://github.com/golangci/gofmt/tree/master/gofmt"&gt;golangci/gofmt&lt;/a&gt;, so some may not be supported.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/mvdan/gofumpt"&gt;gofumpt&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/mvdan/gofumpt/releases/tag/v0.2.0"&gt;https://github.com/mvdan/gofumpt/releases/tag/v0.2.0&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/denis-tingaikin/go-header"&gt;goheader&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://pkg.go.dev/golang.org/x/tools/cmd/goimports"&gt;goimports&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;same as gofmt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/golang/lint"&gt;golint&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;deprecated and archived&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/tommy-muehle/go-mnd"&gt;gomnd&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/ldez/gomoddirectives"&gt;gomoddirectives&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/ryancurrah/gomodguard"&gt;gomodguard&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jirfag/go-printf-func-name"&gt;goprintffuncname&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;no update for 2 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/securego/gosec"&gt;gosec&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/esimonov/ifshort"&gt;ifshort&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/julz/importas"&gt;importas&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/mvdan/interfacer"&gt;interfacer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;deprecated and archived&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/butuzov/ireturn"&gt;ireturn&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/golangci/golangci-lint/blob/master/pkg/golinters/lll.go"&gt;lll&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/ashanbrown/makezero"&gt;makezero&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/mdempsky/maligned"&gt;maligned&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;deprecated and archived&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/client9/misspell"&gt;misspell&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;no update for 4 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/alexkohler/nakedret"&gt;nakedret&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/nakabonne/nestif"&gt;nestif&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/gostaticanalysis/nilerr"&gt;nilerr&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;no update for a year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/Antonboom/nilnil"&gt;nilnil&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/ssgreg/nlreturn"&gt;nlreturn&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/sonatard/noctx"&gt;noctx&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/golangci/golangci-lint/blob/master/pkg/golinters/nolintlint/README.md"&gt;nolintlint&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/kunwardeep/paralleltest"&gt;paralleltest&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/alexkohler/prealloc"&gt;prealloc&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/nishanths/predeclared"&gt;predeclared&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/yeya24/promlinter"&gt;promlinter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/mgechev/revive"&gt;revive&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jingyugao/rowserrcheck"&gt;rowserrcheck&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/kyoh86/scopelint"&gt;scopelint&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;deprecated and archived&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/ryanrolds/sqlclosecheck"&gt;sqlclosecheck&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/dominikh/go-tools/tree/master/stylecheck"&gt;stylecheck&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/ldez/tagliatelle"&gt;tagliatelle&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/sivchari/tenv"&gt;tenv&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/maratori/testpackage"&gt;testpackage&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/kulti/thelper"&gt;thelper&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/moricho/tparallel"&gt;tparallel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/mdempsky/unconvert"&gt;unconvert&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;no update for 2 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/mvdan/unparam"&gt;unparam&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;There is &lt;a href="https://github.com/mvdan/unparam/issues/60"&gt;an issue&lt;/a&gt; that states that &lt;code&gt;x/tools/go/ssa&lt;/code&gt; supports Generics and then supports it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/blizzy78/varnamelen"&gt;varnamelen&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/sanposhiho/wastedassign"&gt;wastedassign&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sanposhiho/wastedassign/issues/41"&gt;https://github.com/sanposhiho/wastedassign/issues/41&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/ultraware/whitespace"&gt;whitespace&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/tomarrell/wrapcheck"&gt;wrapcheck&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/tomarrell/wrapcheck/commit/213318509af6a003be2be752da826d269149ba4d"&gt;https://github.com/tomarrell/wrapcheck/commit/213318509af6a003be2be752da826d269149ba4d&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bombsimon/wsl"&gt;wsl&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;⬜&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;Currently, most of the linters do not yet support Generics, and few of them have taken any action to support it. Even if the various linters support Generics, the latest golangci-lint will probably support it in due course. The reason for the lack of support may be that the official &lt;code&gt;x/tools&lt;/code&gt;, including go/ssa, do not yet support Generics&lt;sup id="fnref1"&gt;1&lt;/sup&gt;. Therefore, for production services that use golangci-lint regularly, it is better to experiment with Generics in the development environment only, and wait for a while before using it in the production environment. Conversely, it might be a chance to contribute them;)&lt;/p&gt;

&lt;p&gt;There may be linters that do not fail with or without Generics. Also, some of them may actually support Generics due to my lack of confirmation, and some of them may support Generics after this post was published because I couldn't keep up with the latest information. In that case, please let me know in the comments.&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;&lt;a href="https://github.com/golang/go/issues/48525"&gt;https://github.com/golang/go/issues/48525&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>go</category>
      <category>generics</category>
    </item>
    <item>
      <title>Quick Tutorial: Write Go, Run WASM!</title>
      <dc:creator>CIARANA</dc:creator>
      <pubDate>Mon, 06 Aug 2018 16:01:07 +0000</pubDate>
      <link>https://dev.to/cia_rana/quick-tutorial-write-go-run-wasm-2ilf</link>
      <guid>https://dev.to/cia_rana/quick-tutorial-write-go-run-wasm-2ilf</guid>
      <description>&lt;p&gt;Before Go 1.11 gets released, which introduces an experimental port to WebAssembly (WASM for short), I'm going to demonstrate how to compile Go source code into WASM and execute in the browser!&lt;/p&gt;

&lt;p&gt;Here are the steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Setup &lt;code&gt;go1.11beta3&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Compile Go to WASM&lt;/li&gt;
&lt;li&gt;Use HTML and JavaScript to load WASM&lt;/li&gt;
&lt;li&gt;Spin up a web server&lt;/li&gt;
&lt;li&gt;Open the website!&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 1: Setup &lt;code&gt;go1.11beta3&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Although we need Go version 1.11 which is still in beta (due in August!), because Go is open-source we can just download the latest beta instead.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/golang/go/releases/tag/go1.11beta3"&gt;https://github.com/golang/go/releases/tag/go1.11beta3&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;go get golang.org/dl/go1.11beta3
&lt;span class="nv"&gt;$ &lt;/span&gt;go1.11beta3 download
&lt;span class="c"&gt;# =&amp;gt; Success. You may now run 'go1.11beta3'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Compile Go to WASM
&lt;/h3&gt;

&lt;p&gt;We can now write Go! The plan is to print the classic &lt;code&gt;hello, Go/WASM!&lt;/code&gt; but in the browser––in the developer console.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// main.go&lt;/span&gt;
&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"fmt"&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"hello, Go/WASM!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To compile our program from Go to WASM, we use the command &lt;code&gt;go build&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; We need to tell Go to compile for the web and not the default environment; our computer. So we need to set the environmental variables &lt;code&gt;GOOS=js&lt;/code&gt; and &lt;code&gt;GOARCH=wasm&lt;/code&gt; to target the web.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ GOOS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;js &lt;span class="nv"&gt;GOARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wasm go1.11beta3 build &lt;span class="nt"&gt;-o&lt;/span&gt; test.wasm main.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Use HTML and JavaScript to load WASM
&lt;/h3&gt;

&lt;p&gt;This step isn't difficult; the Go team has prepared some files for us to experiment with.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# -s == silent mode&lt;/span&gt;
&lt;span class="c"&gt;# -O == output mode&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;curl &lt;span class="nt"&gt;-sO&lt;/span&gt; https://raw.githubusercontent.com/golang/go/master/misc/wasm/wasm_exec.html
&lt;span class="nv"&gt;$ &lt;/span&gt;curl &lt;span class="nt"&gt;-sO&lt;/span&gt; https://raw.githubusercontent.com/golang/go/master/misc/wasm/wasm_exec.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Spin up a web server
&lt;/h3&gt;

&lt;p&gt;Now we need to spin up a simple web server to serve some static assets. This is just a few lines of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// server.go&lt;/span&gt;
&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"flag"&lt;/span&gt;
    &lt;span class="s"&gt;"log"&lt;/span&gt;
    &lt;span class="s"&gt;"net/http"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"8000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Parse&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ListenAndServe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;":"&lt;/span&gt;&lt;span class="o"&gt;+*&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FileServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Dir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"."&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's start it! Cheers!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;go1.11beta3 run server.go

&lt;span class="c"&gt;# or to run on a different port:&lt;/span&gt;
&lt;span class="c"&gt;# $ go1.11beta3 run -port=8080 server.go&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Open the website!
&lt;/h3&gt;

&lt;p&gt;Open &lt;code&gt;localhost:8000/wasm_exec.html&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; A 'Run' button (at the top left) will appear disabled until the compiled WASM is loaded.&lt;/p&gt;

&lt;p&gt;Once the 'Run' button is enabled, open the console and press the button!&lt;/p&gt;

&lt;p&gt;See &lt;code&gt;hello, Go/WASM!&lt;/code&gt;??&lt;/p&gt;

&lt;p&gt;Congratulations! 🎉&lt;/p&gt;

&lt;p&gt;You've just compiled, loaded, and run a Go program via WASM!&lt;/p&gt;

&lt;p&gt;Is that true?&lt;/p&gt;

&lt;p&gt;Why don't you confirm that &lt;code&gt;Content-Type&lt;/code&gt; is &lt;code&gt;application/wasm&lt;/code&gt; in the response header of &lt;code&gt;test.wasm&lt;/code&gt;? ;)&lt;/p&gt;

&lt;h3&gt;
  
  
  Acknowledgements
&lt;/h3&gt;

&lt;p&gt;Thank you &lt;a href="https://twitter.com/username_ZAYDEK"&gt;ZAYDEK&lt;/a&gt; for recommending me to translate &lt;a href="https://qiita.com/cia_rana/items/bbb4112b480636ab9d87"&gt;my article&lt;/a&gt; into English and reviewing this article. &lt;/p&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://qiita.com/cia_rana/items/bbb4112b480636ab9d87"&gt;サクッと Go → WebAssembly を試す(Original article in Japanese)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.gopheracademy.com/advent-2017/go-wasm/"&gt;Go and wasm: generating and executing wasm with Go - Gopher Academy Blog Community Contributed Go Articles and Tutorials&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>go</category>
      <category>webassembly</category>
    </item>
  </channel>
</rss>
