- 1. Go パッケージグローバル変数が何故アンスコで宣言されていたか?
- 2. 【#41 エンジニア転職学習】HTTP POSTメソッド作成時の動作確認エラー
- 3. ISUCON12 初参加エントリ
- 4. 【#40 エンジニア転職学習】Go GinTutorial
- 5. Golang + Ginのテスト内でセッションを保存する方法
- 6. 【Golang】C compiler “gcc” not foundエラーからの脱出
- 7. 細かいつまずいたことをメモしておく(2022年7月編)
- 8. [翻訳]Go言語のWebアプリケーションの書き方(原文: Writing Web Applications)
- 9. 【#39 エンジニア転職学習】Go Gin Tutorial開始
- 10. Goのデバッグ環境をvscodeで構築
- 11. ISUCON 12 初参戦レポート
- 12. Goにおけるパッケージのインポート方法いろいろ~ローカル環境のパッケージをインポートしたい~
- 13. 【#38 エンジニア転職学習】Go WebApp フロントエンド部分作成
- 14. 【自己学習】Go言語を学ぶ(6)
- 15. GolangでAPIを作るレシピ集
- 16. Go クロージャー(closure) の理解
- 17. Next.js と Go で WebSocket 通信を行おう【接続編】
- 18. go1.18 は go1.17 よりはっきり遅いことがあるよ
- 19. GoでAWSWAF WebACL一覧を取得するサンプル
- 20. 【#37 エンジニア転職学習】Go WebApp DB関連
Go パッケージグローバル変数が何故アンスコで宣言されていたか?
[gin/render.go at master · gin-gonic/gin · GitHub](https://github.com/gin-gonic/gin/blob/master/render/render.go)
[Goのアンダースコアはどんな意味なのでしょうか?](https://teratail.com/questions/58180)
render パッケージでアンスコを変数名にして変数を宣言しているが目的がわからなかったので調べた。
結論としては型名をRenderインターフェースとして宣言することによって代入している構造体は常にRenderインターフェースを実装していることを伝える目的で書かれている。(javaのimplみたい明示できないので)
【#41 エンジニア転職学習】HTTP POSTメソッド作成時の動作確認エラー
# はじめに
富山県に住んでいるChikaといいます。
毎日投稿を目標に、バックエンドエンジニア転職に向けた学習内容をアウトプットします。7月いっぱいまでGoのフレームワークであるGinについて、
学習をしていきます。バックエンドエンジニアになるまでの学習内容は以前投稿した以下の記事を基にしています。
https://qiita.com/Chika110/items/ef54dddd565a0193ef44
# 本日の学習内容
GinのTutorialとして簡単なRESTfulAPI作成の学習をしました。* **POSTメソッド作成 動作確認時のエラー ←Topics!!**
* 特定のアイテムを返すGETメソッド作成# POSTメソッド作成時の動作確認エラー
本日もGinのAPI作成チュートリアルを進めていたのですが、
その中でターミナルでの`curl`コマンドを使用した
POSTリクエストの動作確認時にエラーが発生して、解決に手間取りましたのでまとめます。#### 解決策
header情報内の`”`の前に`\`を入れてエスケープさせる
#### 原因
Wi
ISUCON12 初参加エントリ
# 概要
ISUCON12予選に初参加しました!
ISUCONという大会自体は2年ほど前から知っていたのですが、
参加チームの上限が決まっていることもあり、あまり技術力が高くない自分が出てもいいのかと今まで尻込みしていました。
今年も見送りかなーと考えていたのですが、[ISUCON本](https://gihyo.jp/book/2022/978-4-297-12846-3)を読んだことでチューニングの基礎を勉強でき、参加しようと決心できました。ISUCON参加したいなぁでもチューニングの知識ないしなぁという方におすすめです!!「ブログを書くまでがISUCONです!」とのことなので、当日のタイムラインと、予選までに勉強した内容についてまとめます。
チーム名「焼肉食いたい」でソロ出場し、最終スコアは5015でした。Goで実装しています。# タイムライン
9:00 起床
9:40 ISUCONのかっこいいOPを見る。テンションが上がったが、共有できるチームメイトがおらず急に寂しくなる。来年はチームで参加することを決意。
10:00 競技開始
10:00~11:30 EC2構築して
【#40 エンジニア転職学習】Go GinTutorial
# はじめに
富山県に住んでいるChikaといいます。
毎日投稿を目標に、バックエンドエンジニア転職に向けた学習内容をアウトプットします。7月いっぱいまでGoのフレームワークであるGinについて、
学習をしていきます。バックエンドエンジニアになるまでの学習内容は以前投稿した以下の記事を基にしています。
https://qiita.com/Chika110/items/ef54dddd565a0193ef44
# 本日の学習内容
GinのTutorialとして簡単なRESTfulAPI作成の学習をしました。* APIエンドポイント(URI)の設計
* json含めたStructの作成
* **全アイテムに対するGET作成 ←Topics!!**# 全アイテムに対するGET作成
必要な要素は2点で、
1. Responseを準備するHandler部分のコード
1. RequestパスをHandlerにマッピングコードそれぞれの機能部分を以下の関数で作成
1. `*gin.Context.IndentedJSON`でhttpステータスコードとstructをJSONに
Golang + Ginのテスト内でセッションを保存する方法
## TL; DR
Golang + Ginを使ったリクエストのテスト中でセッションを保存する方法に多少苦戦したので紹介## 結論
“`go
import (
“net/http/httptest”“github.com/gin-gonic/gin”
“github.com/gorilla/sessions”
)func SaveSession(recorder *httptest.ResponseRecorder, context *gin.Context, key string, value interface{}) {
var store = sessions.NewCookieStore([]byte(“secret”))
session, _ := store.Get(context.Request, “session”)
session.Values[key] = value
session.Save(context.Request, recorder)
}
“`使い方
“`go
import (
“net/http”
“net/
【Golang】C compiler “gcc” not foundエラーからの脱出
# 問題発生
VSCodeでGo言語勉強中に下記のように初めてSQLiteをインポートしようとしました。
“`
go get github.com/jinzhu/gorm
go get github.com/mattn/go-sqlite3
“`
“`Go:main.go
import (
//他のインポート
“github.com/jinzhu/gorm”
_ “github.com/mattn/go-sqlite3”
)
“`
そしていざ実行!
“`
go run main.go
“`
すると下記のエラーにぶち当たりました。
“`
exec: “gcc”: executable file not found in %PATH%
“`
ああ、SQLiteを使うにはgccというC言語コンパイラーが必要なんだな。
そこで[こちら](https://jmeubank.github.io/tdm-gcc/)の「MinGW-w64 based」からgccをインストール!
一応確認。
“`
gcc -v
“`
するとちゃんと反応あってインストールに成功し
細かいつまずいたことをメモしておく(2022年7月編)
# DockerでGoのパッケージが読み込めない
`go.mod`を利用する必要がある
https://qiita.com/kazuma_M/items/75d522668d42247075f1# VSCodeのGoの拡張機能でエラーがでる
VSCode+WSL2+Docker+Goの環境でGOの拡張機能をいれたところ、起動時にVSCodeの左下に以下のエラーがでるようになりました
“`
failed to find the “go” binary in either goroot()….
“`これはローカルにGOをインストールすることで解決できました。
https://blog.nya-n.net/posts/post-1853/
https://qiita.com/sola-msr/items/93fbf9c988ee81a2f196
またインストールしたところ以下のエラーに変わりました
“`
the “gopls” command is not available. run “go install -v golang.org/x/tools/gop
[翻訳]Go言語のWebアプリケーションの書き方(原文: Writing Web Applications)
## この記事について
この記事はGoでWebアプリを作るための公式チュートリアル「[Writing Web Applications](https://go.dev/doc/articles/wiki/)」の翻訳記事になります(2022/07/26最終更新)。
## 目次
– イントロダクション
– 始めよう
– データ構造
– `net/http`パッケージの紹介
– wikiのページを配信するために`net/http`を使用する
– ページの編集
– `html/template`パッケージ
– 存在しないページの扱い
– ページの保存
– エラーハンドリング
– テンプレートキャッシング
– バリデーション
– 関数リテラルとクロージャの紹介
– 試してみる
– 他の課題## イントロダクション
このチュートリアルで扱っていること:
– loadとsaveメソッドを使ったデータ構造の作成
– webアプリケーションを構築するためのnet/httpパッケージの使用
– HTMLテンプレートを処理するためのhtml/templateパッケージの使用
– ユーザの入力を検証す
【#39 エンジニア転職学習】Go Gin Tutorial開始
# はじめに
富山県に住んでいるChikaといいます。
毎日投稿を目標に、バックエンドエンジニア転職に向けた学習内容をアウトプットします。7月いっぱいまでGoのフレームワークであるGinについて、
学習をしていきます。バックエンドエンジニアになるまでの学習内容は以前投稿した以下の記事を基にしています。
https://qiita.com/Chika110/items/ef54dddd565a0193ef44
# 本日の学習内容
本日よりGinのTutorialを学習開始しました。* **Gin Tutorial ←Topics!!**
# Gin Tutorial開始
昨日でUdemy教材でのGoを使用したWebアプリ作成を一通り終えました。
その中で**GoのWebフレームワークを学習したい**と思いました。理由は以下2点あります。
* 自分で1からあのレベルのコードを記述するのは難しいと感じた
* アプリ作成するための**ハードルを最初はとにかく低くしたい**と思ったどちらも同じように「自分の技術に対する理解不足」が根本原因ですが、インプットし続けるよりアウ
Goのデバッグ環境をvscodeで構築
# 背景
Go言語の勉強をvscodeでしたく、いざデバッグモードを使ってやろうと思ったら謎のエラーがおきてなんでやねんっ!ってなったのでまとめました。ちなみにM1マック使ってます。## 謎のエラーの内容
なんじゃこのやろう
“`
go: go.mod file not found in current directory or any parent directory; see ‘go help modules’ (exit status 1)
“`# 解決策
調べてみたらgo.modっていうファイルがないのが原因だそうなので色々調べてみましたー。### 手順1
vscodeで`「コマンド」+「Shift」+「p」`と入力し、以下の画像の`Go:Install/Update Tools`をクリックする。
![スクリーンショット 2022-07-25 19.24.24.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2038763/8e0b269a-7469-167b-1a27-9b81
ISUCON 12 初参戦レポート
# 概要
言わずとしれたエンジニアの祭典, ISUCON に今回初参戦してきました!今まで全く関心が無かったのですが,友人に半ば無理やり誘われて…という流れで勢いで参加してしまいました :rolling_eyes:
https://isucon.net/archives/56571716.html
既に「要件把握時間かかる人間だからこういうの向いてないなぁ」という不安が頭によぎっていて,予選当日には実力不足を痛感することになってはしまったのですが,とても学びがあったので,来年のリベンジ(?)に生かすために振り返っておきたいと思います。
以下メンバーです。自分以外の 2 人はいずれも以前までの職場の知り合いです。
| メンバー | 主なロール |
|:—|:—|
| joe [@joe_yuzupi](https://twitter.com/joe_yuzupi) | インフラ |
| mpyw [@mpyw](https://twitter.com/mpyw) | バックエンド |
| chaba [@Tea_Server](https://twitter.com/
Goにおけるパッケージのインポート方法いろいろ~ローカル環境のパッケージをインポートしたい~
Goでパッケージのインポート方法がいろいろあって混乱したので整理してみました。
下の図に対応している章を見れば、インポート方法が分かるようになっています。![flow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705474/537a3924-4ac5-de1d-1937-608a2d9fcc0b.png)
**目次**
– [1. 標準pkgをインポート](#1-標準pkgをインポート)
– [2. 自モジュール内のpkgをインポート](#2-自モジュール内のpkgをインポート)
– [3. ネット上から取得したpkgをインポート](#3-ネット上から取得したpkgをインポート)
– [4. GOPATH配下のpkgをインポート](#4-gopath配下のpkgをインポート)
– [5. 任意のローカルフォルダ内のpkgをインポート](#5-任意のローカルフォルダ内のpkgをインポート):::note warn
基本的には`モジュールモード`を想定していますが、[4. GOPATH配下
【#38 エンジニア転職学習】Go WebApp フロントエンド部分作成
# はじめに
富山県に住んでいるChikaといいます。
毎日投稿を目標に、バックエンドエンジニア転職に向けた学習内容をアウトプットします。使用しているGoのUdemy教材後半部分である、
Webアプリ作成演習を学習していきます。バックエンドエンジニアになるまでの学習内容は以前投稿した以下の記事を基にしています。
https://qiita.com/Chika110/items/ef54dddd565a0193ef44
# 本日の学習内容
本日はCandleStickのデータフレーム作成、APIHandler、jQueryを使用したフロントエンド部分作成を学習しました。* データフレーム
* APIHandler
* **フロントエンドchart作成 ←Topics!!**# フロントエンド chart作成
以下今回のフロントエンド部分作成時の個人的ポイントです。
* chart作成のHTMLは基本的なものは`developers.google.com/chart/`からテンプレート取得
* jQueryは「Google Hosted Libraries」よりリンク
【自己学習】Go言語を学ぶ(6)
公式チュートリアルから基本を学ぶ
https://go-tour-jp.appspot.com/list## For(繰り返し)
* 基本的に、 for ループはセミコロン ; で3つの部分に分かれています:
* 初期化ステートメント: 最初のイテレーション(繰り返し)の前に初期化が実行されます
* 条件式: イテレーション毎に評価されます
* 後処理ステートメント: イテレーション毎の最後に実行されます
* 初期化ステートメントは、短い変数宣言によく利用します。その変数は for ステートメントのスコープ内でのみ有効です。ループは、条件式の評価が false となった場合にイテレーションを停止します。
サンプルコード:
1~9まで足していき合計値を出力
“`go
package mainimport “fmt”
func main() {
sum := 0
for i := 0; i < 10; i++ { sum += i } fmt.Println(sum) } ``` 結果: 45 ## For continued
GolangでAPIを作るレシピ集
# はじめに
最近業務でGolangを触ることが増えてきました。
「この実装前もやったな」とか「これどうやって書くんだっけ?」ということが増えてきたので、レシピっぽくまとめてみました。
何故こういう実装をするかという点よりも、こうやれば良いという実装の例を示す形にしています。
深く言及する記事はまた別途まとめたいと思います。# DBと接続したい場合
“`go
/*
DB変数を用意しておいて、それを使いたいところでimportする。
importした段階でinitメソッドを走らせるという実装が多い。
DDDでやるならインフラ層に記述する。
*/import (
“database/sql”
“fmt”
“os”// mysqlのドライバーをimportする。
_ “github.com/go-sql-driver/mysql”
)func init() {
// dsn(データソースネーム)を構築。環境変数で渡すならos.Getenvで渡す。
dsn := fmt.Sprintf(“%s:%s@tcp(db:3306)/%s?charset=utf8”,
Go クロージャー(closure) の理解
A Tour of Go でクロージャーが出てきたのでまとめてみた。
“`go:sample.go
package mainimport “fmt”
//クロージャー
func adder() func() int {
sum := 0
return func() int {
sum += 1
return sum
}
}func main() {
a := adder()
for i := 0; i < 10; i++ { fmt.Println(a()) } } ``` 出力結果は以下の通り ``` 0 1 2 3 4 5 6 7 8 9 10 ``` 当時の自分: a()を10回実行しているのは理解できる。あれ...a()に代入しているadder()は ```go:closure.go //クロージャー func adder() func() int { sum := 0 return func() int { sum += 1 return sum } } ``` これだから、毎回 `sum := 0` で初期化されるのでは
Next.js と Go で WebSocket 通信を行おう【接続編】
# はじめに
1. [Next.js と Go で WebSocket 通信を行おう【環境構築編】](https://qiita.com/1129-tame/items/39101ed81039542198dc)
1. [Next.js と Go で WebSocket 通信を行おう【接続編】](https://qiita.com/1129-tame/items/2036d89915b3a3d026be) <- 今回の記事 Next.js と Go を利用して WebSocket 通信を行なってみます。 環境構築は前回記事を参照してください。 今回は実際に WebSocket 接続を行い、ローカル環境で双方向通信を実現させます。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180763/9cedec58-9ea5-bf74-87b6-3e8bc055f1e8.png) このように form にデータを入力し、サーバーサイドでデータを加工して受け取ることをゴールとします。 h
go1.18 は go1.17 よりはっきり遅いことがあるよ
# これは何?
Twitter で軽率に
数年前は仮想マシンが挟まらないバイナリを吐く言語としては特別遅い、ぐらいな印象でした。
でも今は(用途によっては、ではありますが)C / C++ と同じぐらい速い印象です。— 鍋谷 武典 (@Nabetani) July 22, 2022
と書いたので、本当にそうなのかどうか調べてみたら驚くべき結果に!
となったので記事にしてみた。とはいえ。
これはマイクロベンチマークに過ぎないので、全体的な性能とかではなく、そういう事がありうるとうだけのこと。# 調べたこと
なんとなく、動的に定められる関数を呼び出すのがいいなと思って、こんなコードにしてみた。
あと、メモリ確保にもたくさん時間を使っている。
## go 版
“`go:go1.11etc
package mainimport (
“fmt”
“os”
“runtime”
“strconv”
“time”
)type proc = func(a uint32) uint32
func test(num uint32) uint32 {
m := make([]proc, 0, num)
for ix := uint32(0); ix < num; ix++ { i
GoでAWSWAF WebACL一覧を取得するサンプル
## ポイント
– CloudFrontにアタッチしているWAFを利用する場合は、us-east-1リージョンを指定しないといけない## サンプル
“`go
package mainimport (
“fmt”
“os”“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/wafv2”
)func main() {
sess := session.Must(session.NewSessionWithOptions(
session.Options{
Profile: os.Getenv(“AWS_PROFILE”),
SharedConfigState: session.SharedConfigEnable,
}))svc := wafv2.New(sess, sess.Config.WithRegion(“us-east-1”))
para
【#37 エンジニア転職学習】Go WebApp DB関連
# はじめに
富山県に住んでいるChikaといいます。
毎日投稿を目標に、バックエンドエンジニア転職に向けた学習内容をアウトプットします。使用しているGoのUdemy教材後半部分である、
Webアプリ作成演習を学習していきます。バックエンドエンジニアになるまでの学習内容は以前投稿した以下の記事を基にしています。
https://qiita.com/Chika110/items/ef54dddd565a0193ef44
# 本日の学習内容
本日はcandleスティック情報を作成・取得するmodelやcontroller部分を学習しました。* DBスキーマ作成
* **candleDBに関するSQL文コード作成 ←Topics!!**# CandleDBに関するSQL文コード
bitflyerから取得してくるCandleの情報(duraiton, open, close, high, low, volume 等)を入れておくDBテーブルのスキーマの作成。
また、テーブルの変更を行うSQL文コードの作成を中心に行いました。以下本日のポイント
* 基本的なDbConn