Go関連のことを調べてみた2022年05月02日

Go関連のことを調べてみた2022年05月02日

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を設定しようとしたら下記のエラーがでました
![スクリーンショット 2022-05-01 18.12.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72832/c9894f05-441d-da9d-2e4c-942f839ec06a.png)

“`
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`でした。
![スクリーンショット 2022-05-01 18.47.30.png](https://qiita-image-stor

元記事を表示

Go,Vue,Firebaseを使ってポートフォリオを作成してみた。~参考リンク付き~

# はじめに
今回は私が転職活動で作成したポートフォリオについてまとめ記事を作成しました。
この記事ではアプリ開発にあたって苦労したことや、ポートフォリオ作成の参考になるようなことをご紹介できればと思います。

# 製作者の経歴
– 未経験でエンジニア転職し、1年程経験
– 受注開発でPHPを使用(フレームワークなし)
– 未経験時に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やらを使って結構料金のかかるインフラ設計にしている人が結構いるので今回はコスパの良いAPIサーバーを立てていきます。 * 完全に個人開発向けの話になります。

| | 使用するサービス |
| —- | —- |
| サーバー | ECS on EC2 |
| ドメインの取得 | freenom |
| DNS登録 | AWS Route53 |
| SSLの証明書 | Let’s Encrypt |
| インフラ管理 | Terraform |

## ドメインの取得

以下のサイトに従ってドメインを取得しましょう。

https://note.com/dafujii/n/n406f385651e2

取得できたら以下のように表示されます。

![スクリーンショット 2022-04-30 16.51.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295942/319ec28c-ee72-a285-62b6-

元記事を表示

【Golang】assignment to entry in nil mapで怒られる原因

# 概要
go初学者です。
assignment to entry in nil mapで怒られる原因と、空のsliceへの値の追加との差を調査しました。

# 疑問点
下の場合、なぜs(slise)には要素を追加できて、m(map)には追加できない?

“`main.go
package main

import “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 main

import (
“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に合うものを選択する。
![スクリーンショット 2022-04-30 15.28.28.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

【Google Analytics 4】Reporting API v4 を Golang で使ってみる

# はじめに
株式会社データインサイトの山元です。
弊社ではポイ活アプリや開業準備支援アプリなど複数のプロダクトを展開しており
ユーザーの利用状況を見て、次のアクションを考え、アプリの改善に繋げています。

会社の中だけで KPI を共有する分には、Firebase だけで事足りるのですが
パートナー企業等の外部ユーザーに主要 KPI をリアルタイムで連携する要件があり
弊社と外部ユーザーとの間で使える管理アプリを構築することになりました。

今回は、バックエンドのサーバー言語が Golang のため、
Golang で Google Analytics 4 のAPIを使ってみます。

# Google Analytics 4 とは
まず Google Analytics には、「Universal Analytics(GA3)」と「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.15

WORKDIR /go/app/

RUN apk update \
&& export GO111MODULE=suto

COPY ./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
“`

#

元記事を表示

saml2awsが動かなくなったけど修正のPRが出ていたのでそのブランチでビルドする

いつも通りsaml2awsしようと思ったら
“`
Error authenticating to IdP.: error loading first page: failed to build login form data: could not find any forms matching the provided IDs.
“`

困った困った
ところが、同僚が[修正のPR](https://github.com/Versent/saml2aws/pull/806)を見つけてくれたのでこのブランチでビルドしてみる

# リポジトリのREADMEを見ると
“`shell-session
$ make mod
$ make install
“`
でいけるよ
とのことだったんですが

– 私はsaml2awsをローカルのコンテナ上で動かしている変態なのでlinuxのバイナリが欲しい
– 社内にはmac上でsaml2awsを動かしている人もいるのでdarwinのバイナリも欲しい
– しかし、ローカルにgoの環境構築をしたくない
– [この記事](https://qiita.c

元記事を表示

Goのインターフェースについての備忘録

# インターフェイスとは?
変数の値だけでなく、 __変数の型情報__ も同時に保持することができる言語組み込みの __特殊な構造体__ のこと。

# どんな時に使うの?
いろいろな型の変数を引数として受け取ることのできる汎用的な関数を書くときに使う!(使い方の一つ)

Go言語は静的型付け言語なので、変数宣言の際に変数の型を宣言しないといけない。

しかし、これでは汎用的な関数を書く際に引数に来る可能性のある型の数だけ関数を作成しなければならない。

インターフェースは任意の型の変数を格納できるので、汎用的な関数をひとつ書くだけでよくなる!

# インターフェースの宣言

“`interface.go
var i interface{}

a := 1
i = a
fmt.Println(i) // 1

b := “str”
i = b
fmt.Println(i) //str
“`

# 格納されている型を調べる
格納されている型ごとにごにょごにょしたい場合は以下のような方法で型が取得できる。

“`type.go
import (
“fmt”
“reflect”
)

元記事を表示

Go 1.18でKubebuilder を使うとbin/controller-gen: No such file or directoryが出る (解決策: v3.4.0以降にする)

# 実行環境

“`
kubebuilder version
Version: main.version{KubeBuilderVersion:”3.3.0″, KubernetesVendor:”1.23.1″, GitCommit:”47859bf2ebf96a64db69a2f7074ffdec7f15c1ec”, BuildDate:”2022-01-18T17:03:29Z”, GoOs:”darwin”, GoArch:”amd64″}
“`

# エラー

`kubebuilder create api –group webapp –version v1 –kind Guestbook`を実行すると

“`
bash: /Users/nakamasato/projects/guestbook/bin/controller-gen: No such file or directory
make: *** [generate] Error 127
“`

`bin/controller-gen`が存在しないというので落ちてる

元記事を表示

GuardDutyの脅威検出結果をSlack/Teamsに通知する

# 初めに
生産技術部で製品の検査工程を担当しているエンジニアです。AWSのセキュリティ対応のため、GuardDutyを利用しています。GuardDutyを利用することで、悪意のあるアクティビティや異常な動作を継続的にモニタリングすることができます。しかし、検知した結果に気が付かなければ意味がありません。チャットツールに結果を転送することで、早急な対応ができる体制を目指します。

# Slack/Teamsへの通知方法
脅威を検知した結果は、自動的にEventBridge(旧Amazon CloudWatch Events)に送信されるため、EventBridgeでイベントをトリガします。

* Slackを利用されている場合は、EventBridgeからSNSに転送します。SlackはChatbotとの連携が可能なため、ChatbotをSNSのターゲットにします。
* Teamsを利用されている場合は、LambdaをEventBridgeのターゲットとし、Lambdaで結果を加工してIncoming WebhookでTeamsに転送します。

![guardduty-notifica

元記事を表示

OTHERカテゴリの最新記事