- 1. Goでrealize使ってホットリロードしようとしたらcommand not found & exec: not started
- 2. Goでファイルアップロードアプリを作る
- 3. 競プロで使うための GO 入門 ~標準入出力~
- 4. 競プロで使うための GO 入門 ~型変換~
- 5. 競プロで使うための GO 入門 ~ASCII変換~
- 6. 【Go】 echo の CORS でハマった…
- 7. 【GCP】Cloud Functions の Go 1.13 で取得できなくなった環境変数とそれを置き換えれるメタデータの対応表
- 8. 【メモ】Skickaを使ってGoogleDriveに簡単アップロード
- 9. Goのカバレッジ解析結果をHTML出力するツールを自作してみた
- 10. struct内のstructを抜き出したい
- 11. Dockerで[stream error: stream ID 633; INTERNAL_ERROR]が発生したときは、docker内の空き容量がないかも
- 12. 祝GA‼︎【Go】Lambda + RDS 接続にRDS Proxyを使ってみた
- 13. DockerとGoで簡単にapiサーバーを立ててみる
- 14. GORMのエラーハンドリング
- 15. Go + Dockerで環境構築だけをする
- 16. モンテカルロ法で円周率を近似するプログラムをGoで実装してみる
- 17. http.Handlerが扱うDBを動的に変える。
- 18. GoReleaser覚え書き
- 19. gomockのDoメソッド使えばモックに渡される引数の値をチェックするテストが書ける
- 20. 競プロで使うための GO 入門 ~ソート~
Goでrealize使ってホットリロードしようとしたらcommand not found & exec: not started
## はじめに
– [NuxtとGoではじめるWebアプリ開発](https://www.amazon.co.jp/dp/B0823H9Z5L/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)を参考にGoでAPIサーバーつくるにあたってホットリロードするためにrealizeを入れたけど、command not foundになってしまうのを解決するまでにやったことになります。
– ついでにcommand not found解決したらexec: not startedにもなったのでそれを解決するのやったことも書きました。## 環境
– OS:maOS Catalina 10.15.5
– Go:go version go1.14.4 darwin/amd64
– Visual Studio Code version 1.47## ホットリロード用のライブラリとしてrealizeを導入する
– `go get github.com/oxequa/realize`
– PJルートディレクトリに移動し、realizeを実行する“`bash
Goでファイルアップロードアプリを作る
##ディレクトリ構成
imgフォルダにアップロードしたファイルが保存されます。“`text
./
├ index.html
├ main.go
├ img/
└ ここにファイルが保存される
└ ここにファイルが保存される
└ ここにファイルが保存される
.
.
.
.
“`##コード
###main.go
“`go:main.go
package mainimport (
“html/template”
“io”
“log”
“net/http”
“os”
)func upload(w http.ResponseWriter, r *http.Request) {
//メソッドをPOSTのみ許可
if r.Method != “POST” {
log.Fatal(“許可されていないメソッド”)
}//formから送信されたファイルを解析
file, fileHeader, err :=
競プロで使うための GO 入門 ~標準入出力~
# Index
– [はじめに](https://qiita.com/CamouflageSix/items/ab004a1078f491bd15ef)
– [Hello World](https://qiita.com/CamouflageSix/items/05e5a0f9616e28d6fca4)
– [標準入出力]
– [変数・定数]
– [型変換]
– [制御構文]
– [配列](https://qiita.com/CamouflageSix/items/41d901b9b170d5565895)
– [ソート](https://qiita.com/CamouflageSix/items/dbc2017504571e5a65aa)
– [関数](https://qiita.com/CamouflageSix/items/afb42d399a27f5ca3cf8)
– [ASCII変換](https://qiita.com/CamouflageSix/items/283655027e6581a79b4b)# 標準入出力
標準入出力は、”fmt”パッケージをインポートする。
競プロで使うための GO 入門 ~型変換~
# Index
– [はじめに](https://qiita.com/CamouflageSix/items/ab004a1078f491bd15ef)
– [Hello World](https://qiita.com/CamouflageSix/items/05e5a0f9616e28d6fca4)
– [標準入出力]
– [変数・定数]
– [型変換]
– [制御構文]
– [配列~](https://qiita.com/CamouflageSix/items/41d901b9b170d5565895)
– [ソート](https://qiita.com/CamouflageSix/items/dbc2017504571e5a65aa)
– [関数](https://qiita.com/CamouflageSix/items/afb42d399a27f5ca3cf8)
– [ASCII変換](https://qiita.com/CamouflageSix/items/283655027e6581a79b4b)# 型変換
Go は、別の型同士の演算・代入・比較が行えないため、
競プロで使うための GO 入門 ~ASCII変換~
# Index
– [はじめに](https://qiita.com/CamouflageSix/items/ab004a1078f491bd15ef)
– [Hello World](https://qiita.com/CamouflageSix/items/05e5a0f9616e28d6fca4)
– [標準入出力]
– [変数・定数]
– [制御構文]
– [配列~](https://qiita.com/CamouflageSix/items/41d901b9b170d5565895)
– [ソート](https://qiita.com/CamouflageSix/items/dbc2017504571e5a65aa)
– [関数](https://qiita.com/CamouflageSix/items/afb42d399a27f5ca3cf8)– [ASCII変換](https://qiita.com/CamouflageSix/items/283655027e6581a79b4b)
# ASCII変換
“`GO:
package mainimport (
【Go】 echo の CORS でハマった…
## はじめに
フロントとサーバー別開発で CORS 設定をする時に、 ハマった話。
フロント: Nuxt
サーバー: Go## ダメな例
“`
func main() {
e := echo.New()
g := e.Group(‘/api’)
g.Use(
middleware. CORSWithConfig(
middleware.CORSConfig{
AllowOrigins: []string{“API URL”},
AllowMethods: []string{http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete, http.MethodOptions},
}
)
)
g.POST(‘/create’, …)
…
}
“`## 良い例
“`
func main() {
e := echo.New()
e.Use(
middleware. CORSWith
【GCP】Cloud Functions の Go 1.13 で取得できなくなった環境変数とそれを置き換えれるメタデータの対応表
[前回の記事](https://qiita.com/shigwata/items/5de27ff322f6198f15b1)から引き続いてGCF/Go 1.11から Go1.13への移行の話です。
自動的に設定される環境変数にも変更がありました。## Go1.11で設定されている環境変数
https://cloud.google.com/functions/docs/env-var#nodejs_6_nodejs_8_python_37_and_go_111
キー|説明
—–|—–
ENTRY\_POINT|予約済み:実行される機能。
GCP\_PROJECT|予約済み:現在のGCPプロジェクトID。
GCLOUD\_PROJECT|予約済み:現在のGCPプロジェクトID(非推奨)。
GOOGLE\_CLOUD\_PROJECT|予約済み:設定されていませんが、内部使用のために予約されています。
FUNCTION\_TRIGGER\_TYPE|予約済み:関数のトリガータイプ。
FUNCTION\_NAME|予約済み:関数リソースの名前。
FUNCTION\_MEM
【メモ】Skickaを使ってGoogleDriveに簡単アップロード
Skickaを使えば、ターミナルからGoogleDriveに簡単にファイル/フォルダのアップロード/ダウンロードができるのでインストールの過程をメモ
#環境
Ubuntu18.04#Goのインストール
1.[公式サイト](https://golang.org/dl/)からインストールをする上記ページで自分のOSにあったソースコードをダウンロード
(今回はUbuntu18.04なのでLinuxを選択)
クリックすると、`/home/user/Downloads`に`go1.14.6.linux-amd64.tar.gz`というファイルがダウンロードされる
2.圧縮ファイル`.tar.gz`を`/usr/local`配下に解凍
“`
tar -C /usr/local -xzf go1.14.6.linux-amd64.tar.gz
“`3.Pathを通す
以下のコマンドを実行してPathを通す“`
export PATH=$PATH:/usr/local/go/bin
“`
Pathが通ったことを確認するために、“`sh
$ go
“`
コマン
Goのカバレッジ解析結果をHTML出力するツールを自作してみた
Goは標準でカバレッジ解析するためのツールが用意されています!
テストを書いてカバレッジ確認する時にいつもお世話になっております。“`sh
# プロファイルを取得
$ go test -coverprofile=coverage.out ./…# HTMLを出力
$ go tool cover -html=coverage.out# 関数ごとのカバレッジ率を出力
$ go tool cover -func=coverage.out
github.com/name/repos/path/to/file.go:24: Func1 100.0%
github.com/name/repos/path/to/file.go:70: Func2 75.0%
…
…
total: (statements) 83.8%
“`標準搭載のツールで十分なんのですが、個人的に
– ファイル選択がプルダウン → ファイル増えると探しにくい
– 関数ごと
struct内のstructを抜き出したい
作業で使ったので、備忘録。
## 経緯
struct balances内のBalancesを別で定義して使いたい。“`go
type balances struct {
Time int64 `json:”time”`
Type string `json:”type”`
Balances []struct {
Asset string `json:”asset”`
Free string `json:”free”`
Locked string `json:”locked”`
} `json:”balances”`
}
“`## 対応
結果として下記で対応を行った。“`go
type balances struct {
Time int64 `json:”time”`
Type string `json:”type”`
Balances []struct {
balance
} `json:”balances”`
}type balance struct
Dockerで[stream error: stream ID 633; INTERNAL_ERROR]が発生したときは、docker内の空き容量がないかも
いつもと同じ要領でビルドしたら以下エラーが発生した
“`sh
$ ~/dev/src/github.com/Oppai/hogehoge-apiserver/docker$ ./build.sh
[sudo] password for oppai:
go: downloading github.com/sirupsen/logrus v1.5.0
go: downloading github.com/jinzhu/gorm v1.9.13
go: downloading google.golang.org/api v0.25.0
go: downloading golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
go: downloading github.com/shopspring/decimal v1.2.0
go: downloading github.com/google/uuid v1.1.1
go: downloading github.com/labstack/gommon v0.3.0
go: downlo
祝GA‼︎【Go】Lambda + RDS 接続にRDS Proxyを使ってみた
## はじめに
2019年末に行われたre:Invent 2019で発表された[RDS Proxy](https://aws.amazon.com/jp/rds/proxy/)が先日正式リリースになりました!API Gateway + Lambda + RDSを使ってWebアプリケーションを作っていて、そこでRDS Proxyを使ってみたので、備忘録です。## RDS Proxyって何?
[公式サイト](https://aws.amazon.com/jp/rds/proxy/)によると、次のように説明されています。
> Amazon RDS プロキシは、Amazon Relational Database Service (RDS) 向けの高可用性フルマネージド型データベースプロキシで、アプリケーションのスケーラビリティやデータベース障害に対する回復力と安全性を高めます。詳細は公式サイトをご確認ください!
### RDS Proxyで何をするのか
RDS Proxyでデータベースへのコネクションプールを確立、管理することで、アプリケーションからのデータベース接続数を少なく抑
DockerとGoで簡単にapiサーバーを立ててみる
# はじめる前に
こんにちはRIN1208です
この記事はDockerとGoを少し触れている程度の学生が書いていますので分からない点、間違っている点等がございましたらコメントして頂けると幸いです。
今回の書いたDockerfileなどは[こちら](https://github.com/rin1208/docker-hands-on)に置いてあります。## この記事の対象
– Dockerについてなんとなく知っている人
– Goを知っている人
– とりあえず両方触ってみたい人## この記事で触れない事
– Dockerがどのように動いているか
– Dockerの環境構築について
– Docker Hubの詳細について
– Dockerとは何か
– Goのコードの詳細について
– マルチステージビルド##開発環境
– macOS Catalina
– Go(ver 1.14.4)こちらはなくても問題ありません
– Docker(後半でDocker-composeも使用します)
– VSCode(お好みのエディターを使用して下さい)
上記の環境で説明していきます# さわって
GORMのエラーハンドリング
GORMのドキュメントでGORMのエラーハンドリングを調べたので試してみました。
##GORMのエラーハンドリング
>
GORMにおけるエラーハンドリングは、チェーン可能なAPIのために、慣用的なGoのコードとは少し異なります。ですが、実装は簡単です。
何らかのエラーが起きた場合、GORMはそれを*gorm.DBのErrorフィールドにセットするので、このようにチェックを行うことができます
引用元:http://gorm.io/ja_JP/docs/error_handling.html###例1
“`go:example1.go
if err := db.Where(“name = ?”, “jinzhu”).First(&user).Error; err != nil {
// エラーハンドリング…
}“`
###例2
“`go:example2.go
if result := db.Where(“name = ?”, “jinzhu”).First(&user); result.Error != nil {
// エラーハンドリング…
}
“
Go + Dockerで環境構築だけをする
はじめまして、マツガナイトです。
## はじめに
とりあえずGo言語で何か作りたい。とりあえずチャットアプリっぽいものを作るか。と手を動かしていたのですが、「環境構築ってどうやってやるんだっけ」
となりました。1年前もこんなこと言ってた気がするので備忘録として抑えておこうかと。
## Docker
とりあえず`Docker`使います。楽です。
– どのOS下でも簡単に環境構築が可能
– デプロイが楽かなって思っています(今回はAWSのECSを利用してデプロイする予定)。`Docker`の基礎的なことは省略させていただきます。
※昔こんな記事あげたの思い出しました。基礎的なお話をしています。(古いですが)
[Dockerとはなにか?Dockerfileとはなにか?](https://qiita.com/matsugaknight/items/c77fec14ec3c281a47b4)## Dockerfileを書く
`Dockerfile` を使用して、イメージ作成していきます。“`dockerfile:Dockerfile
# ベースとなるDockerイメー
モンテカルロ法で円周率を近似するプログラムをGoで実装してみる
最近大学の授業で登場した、モンテカルロ・シミュレーションの当たり外れ法を用いて円周率を近似してみようと思います。Goで実装していますが、選んだ理由は最近ハマってるからってだけです。
##モンテカルロ法とは?
まず、モンテカルロ法ってなんだって話ですが、問題を確率を利用したシミュレーションで解く方法です。
今回は、正方形にランダムに点を落とし、内接する円の内側に落ちた点を数えることで円周率を近似する当たり外れ法を実装します。###円周率を近似する際の考え方
簡単に言うと、半径1の円の面積は 1 × 1 × π = π になるので、円の面積がわかれば円周率もわかるということです。そこで、図のように半径1の円を四分割したものを一辺の長さ1の正方形で囲い、その中のランダムな位置に N 個の点を落とします。落とした点のうち、円の内側に落ちた点の個数がそのまま1/4円の面積を近似しているため、 N 個のうちの円内の点の個数の割合を求め、 4 をかけて全円の面積にすることで、円周率を近似できます。
![monte.png](https://qiita-image-store.s3.ap-n
http.Handlerが扱うDBを動的に変える。
## 何が問題なのか
[golangのミニマムREST APIのテスト](https://qiita.com/ngplus6655/items/084a38be7da4c706a46e)ではテスト用と開発用のDBを切り替えて使用することがなぜかできていました。それは、同一パッケージ上ですべての関数を定義していてかつ接続するDBのパラメータをグローバル変数として定義していたため、handlerを呼び出したときのDatabaseインスタンスの値がたまたま上書きされてTEST用のDBに切り替わっていました。
しかし、すべて同一パッケージでというのは実用的ではないし、DBを選択できるという機能をAPIとして非直感的な方法で定義しておくのは気味が悪い。
## 変数を関数間で安全にやり取りするには
http.Handlerはfunc(ResponseWriter, *Request)のシグネチャを守る必要があるため単純に引数を一つ増やすというアプローチは取れない。
そこで、[某オライリー本]([https://www.amazon.co.jp/Go%E8%A8%80%E8%AA%9E
GoReleaser覚え書き
# はじめに
[GoReleaser](https://goreleaser.com/)を使い始めて、執筆時点で1ヶ月余りが過ぎた。
この間に、GoReleaserとGitHub Actionsを使って3つほどGolangのCLIのリリースを自動化した。
到底、使い倒したといえるほどのものではないが、得られた知見などをまとめておく。随時、加筆更新予定。
※元ネタは[個人のメモサイトに書き溜めていたもの](https://progrhy.me/tech-notes/a/program/go/ecosystem/goreleaser/)。
# GoReleaserとは
https://goreleaser.com/intro/
Goプロジェクトのリリース自動化ツール。
主な機能:
– バイナリのクロスコンパイル
– GitHub / GitLabへの公開
– 公開済みのtagを参照してreleaseを作り、バイナリをアップロードする
– Release Note生成 … commit logからChange Logを生成CIツールから使われることを念頭に作
gomockのDoメソッド使えばモックに渡される引数の値をチェックするテストが書ける
# はじめに
[gomock](https://pkg.go.dev/github.com/golang/mock/gomock?tab=doc)の[func (*Call) Do](https://pkg.go.dev/github.com/golang/mock/gomock?tab=doc#Call.Do)メソッドに関してネット上のサンプルコードが少ないという印象だったので本記事を書くことにしました。
# 環境
* go version go1.14.2 darwin/amd64
* github.com/golang/mock v1.4.3# コード例
__やりたいこと__: ユーザ登録をRepository層としてのインターフェースを通して実行するメソッドのテストを書く。
このとき、構造体の変換処理をするので変換後のDB側構造体が期待するものかをチェックしたい。## テスト対象のメソッド
“`go:app.go
package appimport (
“database/sql”
)type IUserRepository interface
競プロで使うための GO 入門 ~ソート~
# Index
– [はじめに](https://qiita.com/CamouflageSix/items/ab004a1078f491bd15ef)
– [Hello World](https://qiita.com/CamouflageSix/items/05e5a0f9616e28d6fca4)
– [標準入出力]
– [変数・定数]
– [型変換]
– [制御構文]
– [配列~](https://qiita.com/CamouflageSix/items/41d901b9b170d5565895)
– [ソート](https://qiita.com/CamouflageSix/items/dbc2017504571e5a65aa)
– [関数](https://qiita.com/CamouflageSix/items/afb42d399a27f5ca3cf8)
– [ASCII変換](https://qiita.com/CamouflageSix/items/283655027e6581a79b4b)# シンプルなソート
“`GO:
package maini