- 1. 都道府県の型を例にGoで組み込み型を拡張する
- 2. Goのテスト結果を取得してgitlab上で見れるようにしたい
- 3. gqlgenチュートリアルをできるだけわかりやすく解説する
- 4. 【Golang】GOPATH、GOROOTについて
- 5. go test
- 6. GoLand Select Home Directory for Go SDKのエラー
- 7. Go,Vue,Firebaseを使ってポートフォリオを作成してみた。~参考リンク付き~
- 8. 【Golang】Goaで「HELLO WORLD」する。
- 9. Goで安価なAPIサーバーをデプロイする
- 10. 【Golang】assignment to entry in nil mapで怒られる原因
- 11. プログラミング言語を作ろう!
- 12. Go の Genericsで作れる(たぶん)一番便利なモノを作った
- 13. Goの環境構築 〜VSCodeでGoを動かす旅〜
- 14. 【Google Analytics 4】Reporting API v4 を Golang で使ってみる
- 15. 【Go】Go言語を学べるおすすめ本まとめ【Golang】
- 16. 【Go/ Docker】開発環境用パッケージをgo installしようとしてつまづいた時の対処法
- 17. RustもJuliaやGoみたいに廃れて消えていく気がしている。
- 18. Ubuntu 22.04 での go のインストール
- 19. 【Go】json-iterator/goのライブラリを使用してJsonから特定の値を取り出す
- 20. go-swaggerで`ParseComment error in file /go/src/controller/xxx.go :cannot find type definition: json.RawMessage`
都道府県の型を例にGoで組み込み型を拡張する
ユーザーの都道府県を扱うアプリケーションを作成していたときに、
いままで
“` prefecture.go
const (
PrefectureHokkaido = “hokkaido”
PrefectureAomori = “aomori”
:
)
“`というような県の定数をstring で宣言していていた。
この場合はUIに返すときには日本語に変換する必要があり愚直にmapを定義して変換していた。“` prefecture.go
var prefectureToJpName = map[string]string{
“hokkaido”: “北海道”,
“aomori”: “青森県”,
“iwate”: “岩手県”,
:
}
“`致命的な問題はなかったのだが、
– コードの量が増える
– 関連のあるものなのにコードが散らばってしまうなどの課題があった。
# 組み込み型として扱う
“` prefecture.go
type Prefecture stringconst (
Hokkaid
Goのテスト結果を取得してgitlab上で見れるようにしたい
### やりたいこと
– テストのレポートを取得したい
– テストのカバレッジを取得したい
– gitlabにその結果を反映したい### テストのレポートを取得
最終目的はgitlab上で閲覧することなので、`JUnit XML`形式で出力できる必要があります。
そこで今回は[gotestsum](https://github.com/gotestyourself/gotestsum)を使って、テストレポートをXMLで出力します。> gotestsum runs tests using go test –json, prints formatted test output, and a summary of the test run. It is designed to work well for both local development, and for automation like CI.
“`shell
# gotestsumのインストール
go install gotest.tools/gotestsum@latest
# テストレポートをXMLで出力
gqlgenチュートリアルをできるだけわかりやすく解説する
# はじめに
エンジニアインターン2社目にしてGolang+GraphQLで開発することになりました。
最近こそ理解が進みはしたものの、今までREST以外の世界を知らなかった自分にとってgqlgenが何をしてくれるのか、何が便利なのかピンと来なかったので同じような境遇の方のために記事を書こうと思います。# 前提知識
– GraphQLの基本がわかる
– Golangの基本文法がわかる# gqlgenとは?
公式から引用
>gqlgen is a Go library for building GraphQL servers without any fuss.
・gqlgen is based on a Schema first approach — You get to Define your API using the GraphQL Schema Definition Language.
・gqlgen prioritizes Type safety — You should never see map[string]interface{} here.
・gqlgen en
【Golang】GOPATH、GOROOTについて
# 前提
Macユーザー# 参考
https://pleiades.io/help/go/configuring-goroot-and-gopath.html
# GOPATH
・ワークスペースのルートディレクトリ
・デフォルト値が「%USERPROFILE%/go」なので、変更する場合は「go env -w GOPATH=—-」で変更する。
・次のフォルダが格納されている>src/ : **Go ソースコード**の場所(例: .go、.c、.g、.s)。
pkg/ : コンパイルされた**パッケージコード**の場所(例: .a)。
bin/ : Go によって**ビルドされたコンパイル済み実行可能プログラム**の場所。# GOROOT
・↓の説明にある通り、異なるGoバージョンを変更する必要がないなら気にしなくていい。>GOROOT は、Go SDK の場所を定義する変数です。異なる Go バージョンを使用する予定がない限り、この変数を変更する必要はありません。
go test
test(std)
errors(std)
net/http/httptest(std)
testify(テストユーティリティ)
ginkogo(テストフレームワーク,BDD)
gomega(アサーションライブラリ)
gomock(普通のモック)
sqlmock(DBのモック)
go-txdb(実際のDBを使ったテスト用)
gotests (テスト自動生成)
gin testcontext(ginのコンテキストを使ったテストに使用)wire
TDD(テーブルドリブン開発goの標準的なテスト指針)
GoLand Select Home Directory for Go SDKのエラー
# GoLandでGOROOTを設定しようとしたら下記のエラーがでました
“`
Select Home Directory for Go SDK
The selected directory is not a valid home for Go SDK
“`
この時にGOROOTに設定したパスは`/usr/local/Cellar/go/1.18.1/libexec`になります。
Macにhomebrewで`go version go1.18.1 darwin/amd64`が入っており、そちらのパスになります。この時のGoLandのバージョンは`2020.3`でした。

– 未経験時にRailsを使用してポートフォリオを作成し、一応springでの開発経験もあり。# アプリの概要
基本的にはTwitterのような、投稿・コメント・いいね・フォロー機能のあるSNSをベースに、追加で
以下のような特徴のあるアプリケーションにしました。
– 目標起床時間を設定して、早起き達成日数を記録することができる
– 投稿にタグ付けしタグごとに朝活の共有ができる。URLは下記です。よければ使ってみてください。
アプリのリンク:[ASAKATSUSNS](https://front.asakatsusns.com)
GitHub:[GitHub](https://github.com/taikyunn/asakatsusns)# 開発し
【Golang】Goaで「HELLO WORLD」する。
## まえがき
Goaの環境構築メモです。http://localhost:{port}/hello/{message} で「HELLO ${message}
」をレスポンスとして返すAPIを実行できるところまでやってみます。参考
https://goa.design/learn/getting-started/
https://zenn.dev/ikawaha/books/goa-design-v3/viewer/getting-started#goa-%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
## 手順1:Goのインストール
### Windowsユーザー
下記サイトよりインストールする。https://go.dev/doc/install
### Macユーザー
“`
brew install go
“`・`go version`でインストールされていることを確認
・今の最新バージョンは「1.17」
“`zsh
% go version
go version go
Goで安価なAPIサーバーをデプロイする
FargateやらALBやらを使って結構料金のかかるインフラ設計にしている人が結構いるので今回はコスパの良いHTTPSなAPIサーバーを立てていきます。 * 完全に個人開発向けの話になります。
| | 使用するサービス |
| —- | —- |
| サーバー | ECS on EC2 |
| ドメインの取得 | freenom |
| DNS登録 | AWS Route53 |
| SSLの証明書 | Let’s Encrypt |
| インフラ管理 | Terraform |## ドメインの取得
以下のサイトに従ってドメインを取得しましょう。
https://note.com/dafujii/n/n406f385651e2
取得できたら以下のように表示されます。
には要素を追加できて、m(map)には追加できない?“`main.go
package mainimport “fmt”
func main() {
var s []int
fmt.Println(s)
s = append(s, 1)
fmt.Println(s)var m map[string]int
fmt.Println(m)
m[“first”] = 100
fmt.Println(m)
}
“`
### 出力“`
[]
[1]
map[]
panic: assignment to entry in nil map
“`### 原因
nilマップに要素を代入しようとしたから。
>Assigning to an element of a nil map causes a run-time panic.
[The Go Progra
プログラミング言語を作ろう!
# この記事はなに?
– 先日チューリング完全を達成した、ここ数ヶ月行っている「プログラミング言語を作ろう」というYoutube配信のまとめ記事です。
– 各回で行った開発内容と、その開発の解説資料と動画アーカイブへのリンク、それから一旦チューリング完全を達成したのでそこまでの感想と反省点を記載しています。
– 主にお役に立つのは解説資料と感想の部分になるかな……?# そもそもあなたはだあれ?
– バーチャルテックリード「ゆにる ゆに」です!
– とあるメガベンチャーのテックリードがバーチャル化されて出来たVtuberです。
– プログラミング言語を作る配信をしたり、チーミング戦術のお話をしたりしています。
– twitchなんかではスーパーマリオワールドのRTA走者もやってます。
– 詳しくは以下の自己紹介動画をどうぞ……!# まずは各回の配信まとめ
|回数 |内容 |動画リンク|資料リンク|備考 |
|:——|——–|——–
Go の Genericsで作れる(たぶん)一番便利なモノを作った
> 注意:Generics を 使用するためには Go 1.18 以上が必要です。
**有識者に怒られる覚悟で書いてます。先に謝罪しておきます。すみません。**
# TL;DR:一行で初期化されたポインタ作れるよ
“`sh
go get github.com/ktnyt/ptr
“`“`go
package mainimport (
“fmt”“github.com/ktnyt/ptr”
)func main() {
p := ptr.New(42)
fmt.Println(*p)
}“`
# だからなんだよ
今までは Go で初期化されたポインタを作るためには最低でも二行使う必要がありました。
## 方法1 ポインタに値を突っ込む
“`go
p := new(int)
*p = 42
“`## 方法2 変数のアドレスを取る
“`go
i := 42
p := &i
“`これはつまり今までポインタを作るのに
“`go
p := func() *int { i := 42; return &i }()
“`的な
Goの環境構築 〜VSCodeでGoを動かす旅〜
# はじめに
この記事は、エンジニア経験1年の大学生が実務で勉強になったこと、詰まったこと、勉強したことをまとめています。間違っている箇所などがございましたら、指摘していただけると幸いです。# 背景
インターン先でGoが採用されたので、キャッチアップをするために記事にしました。理解が浅いところや間違っているところが多少あると思いますが、優しく指摘していただけると幸いです。# 環境
– macOS BigSur(11.6)
– Homebrew 3.4.9
– VSCode 1.66.2
– Go 1.18.1# Go(golang)とは?
Goは2009年にGoogleがリリースしたオープンソースのプログラミング言語。https://go.dev/doc/
# Goのインストール
[Downloads](https://go.dev/dl/)からインストールする。自分のOSに合うものを選択する。
」と「Google Analytics 4」があります。それぞれの違いのついては、ググれば大量に出てきますが、ざっくり言うと…■ Universal Analytics(UA または GA3)
・UI/機能ともに各所で慣れ親しまれていて、世間一般的なGA
【Go】Go言語を学べるおすすめ本まとめ【Golang】
#### 入門本でGoの世界にGo!(言ってみたかっただけ)
2009年にあのGoogle発、Better Cの立ち位置でマスコットのゴーファー君とともに人気を伸ばしてきたGo言語。
コンテナやマイクロサービス関連、実行速度が求められる場面でもお馴染みになっています。先進的な企業での採用事例も多く、まだ使える人がIT業界全体ではそれほど多くないからか求人でもよく見かけます。なんとなく優秀なエンジニアや先端技術動向に通じたエンジニアが嗜んでいそうなイメージもあります。最近入門したこともあり、ここでは日本で手に入るGoの書籍についてまとめてみました。2022年現在、電子書籍もしくは物理書籍で比較的手に入りやすいものを中心に、カテゴリ別、出版された順番に並べています。
#### プログラミング自体が初心者向け
初心者向けの本はここ数年で何冊か出ています。
##### 入門Goプログラミング
2019年/5月刊行、海外の`”Get Programming with Go”`という書籍の翻訳本。他の言語版もあるロボットの表紙が目印です。原著は海外では評価されている
【Go/ Docker】開発環境用パッケージをgo installしようとしてつまづいた時の対処法
# 起こった事象
ある日、DockerでGoの開発を行っていた時に、Live Reload用に[「gin」](https://github.com/codegangsta/gin)というパッケージをインストールして使っていました。
別の日に別のPCから開発をする必要があったため、事前にDockerfileを以下のように書き換えておきました。
“`Dockerfile
FROM golang:1.18.1-alpine3.15WORKDIR /go/app/
RUN apk update \
&& export GO111MODULE=sutoCOPY ./app/ .
RUN go mod tidy \
&& go install github.com/codegangsta/gin
# go mod tidyを実行するとコードで使用されているパッケージのみがgo.mod/go.sumに反映されるため、
# go mod tidy実行後にginのインストールを行っているEXPOSE 8080
CMD [“gin”, “–immediate”, “run”
RustもJuliaやGoみたいに廃れて消えていく気がしている。
Juliaは一時期すごい流行って数値計算の王座になると期待されライブラリも大量に作られたけど、結果Pythonの座を置き換えるにはいたらなかった。Goもコンテナ化との相性がよて一時期すごい流行ったけど、なんだかんだみんなJavaとかPHPとかRubyとか書いてる。
Rustもここ数年すごい流行ってるけど、JuliaとかGoみたいに飽きられて廃れていく気がする。
1. 流行に敏感な人がなんか面白い言語あるぞーと騒ぎ出す。
2. 様々なライブラリが乱立して色々出来るようになる。
3. 数年かけて言語そのものが良くなっていき、ライブラリも淘汰や共通化されて成熟していく。
4. 成熟したライブラリの開発は飽きられてメンテナンスされなくなる。
5. メンテナンスされてないライブラリを使いたくないから誰もその言語に参入しなくなる。
6. 結果として言語そのものが衰退して、もとの成熟していてメンテナンスされ続けている言語とライブラリをみんなが使い続ける。こういう過程で新しい言語は毎回衰退してる気がする。
僕の印象ではRustは状態4にいる気がする。
JuliaやGoは状態5、D言語は状態6か
Ubuntu 22.04 での go のインストール
# Ubuntu 22.04 での go のインストール
https://qiita.com/m-tmatma/items/dff66b3e294293115661 で ubuntu に apt で golang をインストールする方法を記載したが、
https://github.com/longsleep/golang-deb/issues/9#issuecomment-1111964990 によると Ubuntu 22.04 では
標準リポジトリで go のインストールに対応したらしい。以下でインストールできる。
“`
sudo apt install -y golang-go
“`2022/4/29 現在で ver 1.18.1 がインストールされた。
“`
$ go version
go version go1.18.1 linux/amd64
“`
【Go】json-iterator/goのライブラリを使用してJsonから特定の値を取り出す
## 概要
Golangにて、標準ライブラリの使用でJsonから特定の値だけを取り出すことは可能ですが、interface型なので値の取り出しが少し面倒です。何か良いライブラリがないかと探していたところ、[json-iterator/go](https://github.com/json-iterator/go)というものを見つけました。
`json-iterator/go`は標準のライブラリよりも処理が速そうなのと、[こちら](https://github.com/json-iterator/go/tree/master/any_tests)のサンプルにある通り、Jsonから特定の値を取り出すこともできそうです。今回はこのJsonから特定の値を取り出す部分の実装サンプルを紹介します。## 実装サンプルの前提とするJson
以前に[【OpenWeatherAPI】リクエスト・レスポンスの項目に関するメモ書き](https://qiita.com/someone7140/items/0d6bd671458904ff49d6)で紹介した、OpenWeatherAPIのレスポンスを今回の
go-swaggerで`ParseComment error in file /go/src/controller/xxx.go :cannot find type definition: json.RawMessage`
# 経緯
GORMのmodelにてjson.RawMessageを定義してると、go-swaggerの`swag init`でドキュメント生成に失敗する“`
/go/src # swag init
2022/04/28 07:10:29 Generate swagger docs….
2022/04/28 07:10:29 Generate general API Info, search dir:./
2022/04/28 07:10:29 Generating xxxxxxxxx
2022/04/28 07:10:29 Generating xxxxxxxxx
2022/04/28 07:10:29 Generating xxxxxxxxx
2022/04/28 07:10:29 Generating xxxxxxxxx
2022/04/28 07:10:29 ParseComment error in file /go/src/controller/xxx.go :cannot find type definition: json.RawMessage
“`#