<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Golang on Arch使いの日記</title>
    <link>https://blog.grainrigi.net/tags/golang/</link>
    <description>Recent content in Golang on Arch使いの日記</description>
    <generator>Hugo -- gohugo.io</generator>
    <copyright>Copyright © 2022, grainrigi; all rights reserved.</copyright>
    <lastBuildDate>Sun, 11 Dec 2022 22:24:05 +0900</lastBuildDate><atom:link href="https://blog.grainrigi.net/tags/golang/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Goのジェネリクスでnew(T)したら「type *T is pointer to type parameter, not type parameter」と怒られた</title>
      <link>https://blog.grainrigi.net/post/go-pointer-to-type-param/</link>
      <pubDate>Sun, 11 Dec 2022 22:24:05 +0900</pubDate>
      
      <guid>https://blog.grainrigi.net/post/go-pointer-to-type-param/</guid>
      <description>
        
          
            TL;DR Goのジェネリクスの制約はその型自身にのみかけることができ、派生するポインタに関して直接制約をかけることはできない ただし、型パラメータの推論をうまく使うことで擬似的に制約をかけることが可能 Go 1.18 で導入された generics だが、ポインタの絡む型を扱っている際に奇妙なエラーに悩まされることがある。
例えば、以下のように特定のインターフェースを実装した型を new して返すような関数を作ってみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package main import &amp;#34;time&amp;#34; type Initializable interface { Initialize() } func CreateResource[T Initializable]() *T { r := new(T) r.Initialize() return r } // Initializableを実装してみた型 type SomeResource struct { creationTime time.Time } func (r *SomeResource) Initialize() { r.
          
          
        
      </description>
    </item>
    
    <item>
      <title>VSCodeのDev Containerを真面目にセットアップしてみる(Golang)</title>
      <link>https://blog.grainrigi.net/post/vscode-dev-container/</link>
      <pubDate>Wed, 30 Nov 2022 19:56:42 +0900</pubDate>
      
      <guid>https://blog.grainrigi.net/post/vscode-dev-container/</guid>
      <description>
        
          
            アプリケーション開発を行う上で、開発環境の構築は地味に煩わしい作業の一つである。 VSCodeの拡張機能「Dev Containers」を使うことで、 Dockerfileにより定義された一貫した開発環境を簡単に配布・利用することが可能となる。 今回はGolangを使った実際のアプリケーション開発を想定してDev Containerをセットアップしてみる。
はじめに 今回はGolang+PostgreSQLによるWebアプリケーション開発を想定し、 以下の要件を満たせるようにする。
PostgreSQLの開発用データベースが自動的にセットアップされる Golangの言語ツール(補完等)を使えるようにする なお、検証に用いた環境は以下のとおりである。
ArchLinux x86_64 Visual Studio Code (binary) 1.73.0 Dev Containers 0.262.3 Docker 20.10.21 Dev Container設定ファイルの作成 Dev Containerの設定ファイルはすべて.devcontainer/以下に作成していく。
今回作成するファイルは以下の通り。
1.devcontainer 2├── devcontainer.json 3├── docker-compose.yml 4└── Dockerfile docker-compose.ymlの作成 今回は開発用のコンテナの他にDB用のコンテナも必要なので、 それらをまとめて立ち上げるためにdocker-compose.ymlを用意する。
1version: &amp;#39;3&amp;#39; 2 3services: 4 dev: 5 build: . 6 stdin_open: true 7 volumes: 8 - ../:/workspace 9 psql: 10 image: postgres:15-alpine 11 volumes: 12 - pgdata:/var/lib/postgresql/data 13 environment: 14 - POSTGRES_PASSWORD=test 15 - POSTGRES_USER=test 16 - POSTGRES_DB=test 17 18volumes: 19 pgdata: docker-composeを自前で用意する場合、ワークスペース(プロジェクトのディレクトリ)は自力でマウントする必要がある。 今回は.
          
          
        
      </description>
    </item>
    
  </channel>
</rss>
