- 1. Go初見が1週間でWebアプリ開発できるか ー3日目ー
- 2. ホスト(macos)からdocker上のredis sentinelに接続
- 3. OS system command Run … / Ruby case / Python case / golang case / Nim case
- 4. Go初見が1週間でWebアプリ開発できるか ー2日目ー
- 5. Go言語(Golang)のチートシート 型、演算子、エスケープシーケンスまとめ
- 6. 【Golang】テスト実行中にメッセージを表示させる【テストの進捗表示】
- 7. 【Golang】改行などをエスケープして表示したい。【代入済み変数の文字列をエスケープ出力】
- 8. 16進数、バイナリ、base64の相互変換をCLIとGo(Golang)でやる
- 9. AWS SNS/SQSによるメッセージ送受信のサンプル(Go言語)
- 10. Go初見が1週間でWebアプリ開発できるか ー1日目ー
- 11. ISUCON11予選参加でubuntu、nginx、mysqlの知識がほぼ0の人がインフラ担当をやろうとした話
- 12. Goでゲーム用マップを自動生成してみる
- 13. Lambda関数(Go)でSlack通知
- 14. 【AWS SAM CLI】GoからRubyへの移行
- 15. 【Go】Echoで特定のpathへのリクエストだけログを出力しないようにする
- 16. Go言語のpackage利用で初手躓いた点
- 17. [ AWS EKS編 ] AWS Fargate & ECR で Golang の Webアプリをデプロイする
- 18. go func(){ ••• }()の最初と最後の丸括弧の使い方(メモ)
- 19. Goを使ってみた
- 20. 【Go言語】外部パッケージをインポートする方法
Go初見が1週間でWebアプリ開発できるか ー3日目ー
今までAPIサーバーとしてNode.jsを用いていましたが、最近話題のGoを使ってみたいと思い、Go初見の状態から1週間でWebアプリを開発できるのかをチャレンジします。
フロントで使うReact,TypeScriptは今まで開発経験があります。3日目の日記
今日は今回DBとして使うFirebaseの作成とGoに初めて触れる。# Firebaseの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483460/ed90359a-e4dc-bd1c-b89e-6bcfa5cb8f30.png)
プロジェクトの設定のサービスアカウントから「新しい秘密鍵の生成」を押して、`serviceAccountKey.json` を取得。
これは、APIサーバーでCloud Firestoreを操作する際に必要になる。ちなみにAdmin SDK構成スニペットも後で必要。![20210825_1.png](https://qiita-image-store.s3.ap-northeas
ホスト(macos)からdocker上のredis sentinelに接続
# Overview
docker上にテスト用のredis sentinelを動かして、ホスト上で動いているプログラムから接続する# Problem
`sentinel get-master-addr-by-name `で返却されるマスタのIPはdocker環境上のIPなので、ホストからは繋げない。# 解決
– hostモードで動かす => macosは対応していない?後日ドキュメント確認
– lo0にループバックアドレスにエイリアスを追加 => 暫定対応# エイリアス追加
“`
sudo ifconfig lo0 alias ${DOCKER_SUBNET}
“`# テスト
“`go
package mainimport (
“context”
“fmt”“github.com/go-redis/redis/v8”
)func main() {
opt := redis.FailoverOptions{}
opt.MasterName = “master”
opt.SentinelAddrs = []string{“127.0.0.1:2
OS system command Run … / Ruby case / Python case / golang case / Nim case
## Ruby
“`ruby:oscommand.rb
current = “test”
system(“ls”)
system(“mkdir” ,”./#{current}”)
#system(“rm” , “-r”, “./#{current}”)
“`“`terminal
> ruby oscommand.ruby
“`## Python
“`python:oscommand.py
import ‘os’os.system(“ls”)
os.system(“mkdir ./test”)
#os.system(“rm -r ./test”)
“`“`terminal
> python oscommand.py
“`## golang
“`golang:oscommand.go
package mainimport (
“log”
“os/exec”
)func main(){
title := “test”
cmd := exec.Command(“zip”,”-4″, title + “.zip”
Go初見が1週間でWebアプリ開発できるか ー2日目ー
今までAPIサーバーとしてNode.jsを用いていましたが、最近話題のGoを使ってみたいと思い、Go初見の状態から1週間でWebアプリを開発できるのかをチャレンジします。
フロントで使うReact, TypeScriptは今まで開発経験があります。2日目の日記です。
今日はフロントを大まかに完成させたい。# フロント開発
## 開発していく上で気になったこと
### React.FC
TypeScriptも最近使い始めたばかりなので、気になることを調べた。
以前 React.FC というものを聞いたことがあったので使ったほうがいいのか調べた。https://de-milestones.com/typescriptreact-fc/
https://qiita.com/sangotaro/items/3ea63110517a1b66745b
調べた結果、React.FCは使わないことにした。
### React.createContext
Go言語(Golang)のチートシート 型、演算子、エスケープシーケンスまとめ
Go言語の型、演算子、エスケープシーケンスをまとめました。
##組込み型一覧
###符号あり整数
|型名 |概要 |
|—|—|—|
|**基本型**||
|string|文字列。「”」で囲んで表現する。|
|bool|真偽値(true/false)|
|**nビット符号あり整数**||
|int8|-128~127|
|int16|-32,768~32,767|
|int32|-2,147,483,648~2,147,483,647(約-21億~21億)|
|int64|-9,223,372,036,854,775,808~9,223,372,036,854,775,807(約-922京~922京)|
|int|システム依存サイズの符号あり整数。32ビットシステムなら32ビットだが、int32やruneとの互換性はない(代入できない)。|
|rune|32ビット符号あり整数(int32のエイリアス)。Unicodeの1文字を格納する。「’」で囲んで表現する。runeは文字の意。|
|**nビット符号なし整数**||
|uint8|0~255|
|uint8|0~65
【Golang】テスト実行中にメッセージを表示させる【テストの進捗表示】
> テスト中、API などのリクエスト過多を防ぐために `Sleep` させたり、重い処理が始まったなど、**テスト実行中に、その旨をユーザに知らせたい**。
:::note info
「”golang” テスト中にメッセージを表示させる」でググっても、ピンポイントで見つからないので自分のググラビリティとして。
:::## TL; DR (今北産業)
1. 重い処理や `Sleep` 実行前に `t.Log()` す
【Golang】改行などをエスケープして表示したい。【代入済み変数の文字列をエスケープ出力】
> 改行やタブ入りの文字列の変数をプリントする際に、改行させずにエスケープして表示させたい。
:::note info
「”golang” 文字列 改行をエスケープして表示」でググるも、初歩的するぎるため、逆の(タブや改行をエスケープして変数にセットし、出力時にパースする)方法や、あっても代入時に`
(バッククォート)を使う方法ばかり。すでに代入済みの変数を展開せずにエスケープしたまま出力したいのです。
タイトルからピンポイントの記事がすぐに見つからなかったので、自分のググラビリティとして。
16進数、バイナリ、base64の相互変換をCLIとGo(Golang)でやる
要はこれをやるのだ(相互変換)
“`plaintext
hexadecimal
↓ ↑
binary
↓ ↑
base64
“`# CLIでやる
まず 16進数 to base64
“`bash
echo “0123456789abcdef” | xxd -r -p | base64 # ASNFZ4mrze8=
“`base64 to 16進数
“`bash
echo “ASNFZ4mrze8=” | base64 -d | hexdump # 0000000 01 23 45 67 89 ab cd ef
“`# Golangでやる
“`Go
package mainimport (
“encoding/base64”
“encoding/hex”
“fmt”
)func main() {
hexStr := “0123456789abcdef”// hexadecimal string -> byte -> base64 string
b64Str, _ := hexToBase6
AWS SNS/SQSによるメッセージ送受信のサンプル(Go言語)
## 前準備
1. SNSのトピックを作る
– 名前は適当
– タイプは標準
– 他はすべてデフォルト値でOK。
1. SQSのキューを作る。名前は適当、他は
– 名前は適当
– タイプは標準
– 他はすべてデフォルト値でOK。
1. SQSを作ったら、そのSNSサブスクリプションに最初に作ったSNSを追加する## SNSでメッセージを送信
“`go
package mainimport (
“flag”
“fmt”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/sns”
“os”
)func main() {
profile := flag.String(“p”, “”, “AWSの認証に使うProfile。未指定ならdefault”)
msgPtr := flag.String(“m”, “”, “The message to send to the subscribed users of the topic”)
topi
Go初見が1週間でWebアプリ開発できるか ー1日目ー
今までAPIサーバーとしてNode.jsを用いていましたが、最近話題のGoを使ってみたいと思い、Go初見の状態から1週間でWebアプリを開発できるのかをチャレンジします。
他の使用言語は今まで開発経験があります。1日ごとにやったことを日記のように書き連ねていきます。
# アプリ仕様書作成
## アプリで解決したい課題
– 就活のとき自己分析が面倒
– 自分のことがよくわからない## アプリ名
My Google## コンセプト
ほぼGoogleだけで作る自分だけのGoogle## アプリ概要
My Googleは自分について検索できる自分の趣味、好きな食べ物、好きなもの、嫌いなこと、将来やりたいことなど**自分について**を蓄積し、My Googleを賢くする
自分について知りたいことがあればMy Googleで検索しよう
## 開発環境&言語
### フロントエンド
React, TypeScript(node v12.14.1)
### バックエンド
APIサーバー:Go(go version go1.17 windows/amd64)
DB:Fire
ISUCON11予選参加でubuntu、nginx、mysqlの知識がほぼ0の人がインフラ担当をやろうとした話
## ISUCON11に参加してきました
会社の同僚2人とISUCON11に参加したので雑記
普段全くインフラを触らず、ubuntu、nginx、mysqlの知識もないけどインフラやるぞ、となった人がどういう所でつまづくのかが書いてあるかも## 当日まで
* ISUCON9予選をまっさらなubuntuでbench叩ける状態にした
* appとdbのサーバーを分けられるようにした
* 計測に必要そうなツールを調べておいた
* nginx.confとmysql.confの辺りは少し見ておいた## 当日の自分の動き方
* みんなで[予選当日マニュアル](https://gist.github.com/ockie1729/53589a0e8c979198b6231d8599153c70)と[アプリケーションマニュアル](https://gist.github.com/ockie1729/fcb41ade9cb9d2166dd3f53e5179e8a9)の読み合わせをしつつAWSにインスタンスを立てる
* trelloにあらかじめ作っておいたTODOリストを確認し誰がどれをやるを
Goでゲーム用マップを自動生成してみる
# はじめに
## 概要
Go言語を用いて、ゲーム用のマップの自動生成のプログラムを書いてみます。
本記事では、マップ生成のロジックに当たる部分をメインに記述するため、使用するライブラリ固有の機能やインターフェース等に関する記述は省くこともあります。
そのため全体的なコードは、[GitHubのリポジトリ](https://github.com/KMimura/ColonyGame)を参照してください。
## 使用するライブラリ
[Engo](https://engoengine.github.io/)というGo言語のゲーム作成用ライブラリを用います。
このライブラリは、自分は以前[別の記事](https://qiita.com/KMim/items/aebb9d7a9116bf6294b3)でも用いたものです。
また、記事中のコードで使用している素材画像は、[こちら](https://github.com/KMimura/ColonyGame/blob/master/assets/pics/overworld_tileset_grass.png)です。
# コード
## 単純な地面の生
Lambda関数(Go)でSlack通知
## はじめに
CICDの一環でGoのLambdaからSlack通知をする仕組みを構築したのでその備忘録を残す。
(CICDという事でリリース作業を想定したSlack通知を作ってみた。また、[AWS ChatbotでSlackからLambda関数(Go)を呼び出す](https://qiita.com/yuta-katayama-23/items/da16e8760bec47d7fd26)の続きで構築した。)https://github.com/yuta-katayama-23/Go/commit/bcdea5c74a439b1d64e1defe4cec1d30497baba6
## Lambdaの実装
今回はhttp POSTを自分でやるのではなく、[slack-go(Slack API)](https://github.com/slack-go/slack)を利用する### Slack Appの作成・Tokenの発行
`slack-go`を使うにあたってはSlack Appと認証のためのTokenが必要になるので、それらを作成・発行する
そのやり方は[こちら](https
【AWS SAM CLI】GoからRubyへの移行
# はじめに
AWS SAM CLIでランタイムにGoを使っているプロジェクトがありましたが、プロジェクトを作った人は退職してしまいました。
私含め、他のメンバーはRubyでの開発が主であり、Goの知識が薄い状態です。
そこで、GoからRubyに書き直してメンテナンスしやすくした時にやった事をまとめました。# 環境
* SAM CLI, version 1.27.2
* ランタイム, go1.x => Ruby2.7# 1. Rubyプロジェクトの初期化
`sam init`コマンドを使って新規のRubyプロジェクトを立ち上げました。
ディレクトリ構成は下記のようにしました。“`text
sam_cli
|
|– sam-app-go # Goで書かれたプロジェクト(既存)
|
|– sam-app-ruby # Rubyで書かれたプロジェクト(新規)
“`以下は対話型でruby2.7のランタイムを指定して作成している例です。
“`bash
Which template source would you like to use?
1 – A
【Go】Echoで特定のpathへのリクエストだけログを出力しないようにする
# 概要
例えば、ヘルスチェックのログを出力しているとログが見にくくなるし容量を圧迫するしみたいな状況に陥るので、アプリケーション側ではヘルスチェックのログを出力させないようにする。# 解決法
以下のようにSkipper optionを使用する。
“`golang
e := echo.New()
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
Skipper: func(c echo.Context) bool {
return c.Path() == “/path/to/health_check”
},
}))
“`もちろんpath以外、例えばリクエストヘッダーなんかで出力するかどうか決めることもできる。
詳細は以下。https://github.com/labstack/echo/blob/master/context.go
# 参考
https://echo.labstack.com/middleware/#skipping-middleware
Go言語のpackage利用で初手躓いた点
昔うっかり買ったので、せっかくだからとGoの勉強してたら、packageを使用してコードを別ディレクトリに分けるあたりでいきなり出鼻をくじかれたので、備忘録的にメモしておく
#TL; DR
プロジェクトについては初手
“`
go mod init プロジェクト名
“`で `go.mod` ファイル作っとかないとダメ
#起こったこと
Goのファイルにて、下位ディレクトリに作った別のGoファイルから `import` しようとしたところ
“`
package importしようとしたディレクトリ名 is not in GOROOT
“`とか言われてエラー吐かれた
基本的には講座の通り書いてたはずなのに、講座で特に触れられてないエラー出てきて初学者大混乱
# 取った対応
仕方ないので “is not in GOROOT” あたりの文言でぐぐって何が原因なのか探ってみると、出てくるのはPATHや環境変数あたりの話になる
個人的には「PATHを通す」自体はわかるものではあるんだけれど、学習してると参考書内の記述や講座で喋ってる内容に「PATHを通しておいてくれ
[ AWS EKS編 ] AWS Fargate & ECR で Golang の Webアプリをデプロイする
# はじめに
コンテナ基盤でwebサービスを運用する際には、kubernetesというコンテナオーケストレーションサービスを用いることが多いそうなので、kubernetesの基本的な部分に関して学習をしたのち、
AWS EKSにてwebアプリをデプロイしてみた。# kubernetesについて
kubernetesの基本的な概念について把握をするために、まずはじめに公式のチュートリアルをざっとこなしてみた。https://kubernetes.io/ja/docs/tutorials/
公式チュートリアルを一通りこなした後は、EKSにてデプロイすることに挑戦した。
以前、AWS ECSにてコンテナ基盤でwebアプリをデプロイしたことがあったため、
デプロイするための大まかな流れについてはイメージがしやすかった。# EKSにデプロイ
AWS EKSへのデプロイについては基本的にAWSの公式ドキュメントを参考にして試行錯誤しながら行なった。## 事前準備
EKSのリソースを操作するためには、ローカル上で実行する、 `kubectl` , `eksctl` コマンドをインス
go func(){ ••• }()の最初と最後の丸括弧の使い方(メモ)
Go言語の勉強をしていて、時折出現するgoroutineを使用した無名関数。
例えば、以下のようなmainからAddメソッドに値を渡している処理です。“`go
func main() {
for i := 0; i < 50; i++ { go func(t int) { dc.Add(t) }(i % 2) } } func (dc *DoubleCounter) Add(t int) { dc.commandCh <- t // commandChはチャンネル } ``` 初めにこれを目にした時、go func( ){ 処理 }( )の初めの丸括弧に記載されている(t int)、最後の丸括弧に記載されている(i % 2)がどういった挙動をしているかわかりませんでした。 しかし、デバックして追っかけてみると、Addメソッドには0と1しか値として渡っていませんでした。 ということは、先程の無名関数は変数iの値をまずは2で割って、そのあまりを今度は無名関数の初めの括弧に渡してあげて、そこで変数tに値が入ってその値がAddメソッドに流れていくということになり
Goを使ってみた
Goを使ってみた
最近はやりのGoを触ってみるべくチャレンジ
まずはGoをWindowsマシンにインストール
https://golang.org/dl/ のMicrosoft WindowsからGoをダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653035/4a39a67e-3b30-8c49-4877-1f517ae7e3a0.png)普通にインストール実施
適当なファイルを作成
“`main.go
package mainimport “fmt”
func main() {
fmt.Printf(“hellohogefuga\n”)
}
“`go run コマンド実行
“`cmd
>go run main.go
hellohogefuga
“`vscodeで実施
するとこんなエラーが。
“`
go: go.mod file not found in current directory or any parent direc
【Go言語】外部パッケージをインポートする方法
Go言語初心者なんですが、どうしても外部パッケージをインポートするとき失敗でした。
パッケージが見つからないっていうエラーが出ました。やっとこの問題が解決しましたので、ここでメモします。
何でもいいですが、サンプルとして、
この記事はBinance APIパッケージをインポートする。####1. パッケージをインストールする
ターミナルで`go get`実行する
“`
go get github.com/adshao/go-binance/v2
“`####2. インストールしたパッケージをインポートする
“`go:test.go
import (
“github.com/adshao/go-binance/v2”
)
“`####3. パッケージが見つからなくて、エラー出ます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342464/ebb1c252-ebc0-1f13-f04b-c73536a19ee9.png)####4. 原因
ター