- 1. GoでAWSWAF WebACL一覧を取得するサンプル
- 2. 【#37 エンジニア転職学習】Go WebApp DB関連
- 3. Azure Developer CLI (azd) をソースコードからビルドする
- 4. OpenSSLでX.509証明書を作成してGoで署名検証するまでのメモ
- 5. olivereを使ってElastic Searchのネストした集計を実行する
- 6. 【#36 エンジニア転職学習】Go WebApp API認証・作成
- 7. GolangのPackageとModuleについて
- 8. StreamServer Interceptorでコンテキストを上書きしたい時
- 9. go で private なメソッドは他パッケージでは実装できない
- 10. Next.js と Go を使ってWebSocket 通信を行おう【環境構築編】
- 11. 蟻本の問題をGo言語で解いてみた(p21 三角形)
- 12. オジオバサン・プログラマーのためのGo言語まとめ(Javaがいまいちシックリこない人向け?)
- 13. Go言語とSQLiteでユニットテスト
- 14. go install でハマったこと
- 15. Go言語で初めてWebアプリを作る際に役立ちそうな参考文献リンク集(日/英)
- 16. Go と Rust で実装されたライブラリを最適化してみた
- 17. golangでsqlxを利用してDBアクセスする際のtimeout設定方法と、transaction利用での注意
- 18. GoでTodoアプリを作る(超初学者)
- 19. 【#33 エンジニア転職学習】Go WebApplications Handler
- 20. Go言語でstring型の値を保持した配列をstrings.Joinしようとしたらエラーが発生
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
Azure Developer CLI (azd) をソースコードからビルドする
# Azure Developer CLI (azd) とは
Azure Developer CLI (azd) は、米国時間の2022年7月12日にオープンソースプロジェクトとしてパブリック プレビューで公開されました。
– [Introducing the Azure Developer CLI (azd): A faster way to build apps for the cloud – Azure SDK Blog](https://devblogs.microsoft.com/azure-sdk/introducing-the-azure-developer-cli-a-faster-way-to-build-apps-for-the-cloud/)
現在のところ、Azureのコンピューティング サービス上にAzure Cosmos BDにアクセスするWebアプリ(Python、JavaScript/TypeScript、C#)のテンプレートを作成できて、Azureへのデプロイまでを支援するCLI コマンドとなっており、今後はJavaやAKSのテンプレートも用意され
OpenSSLでX.509証明書を作成してGoで署名検証するまでのメモ
# ステップ
– 1. ルート証明書/サーバ証明書の作成
– ① ルート証明書の作成
– ② 証明書署名要求の作成
– ③ サーバ証明書の発行
– ④ OpenSSLで署名検証
– 2. Goで署名検証# 1. ルート証明書/サーバ証明書の作成
**① ルート証明書を作成します**
とりあえず有効期限は`-days 365000`として長くしています。
また、`-newkey rsa:4096 -keyout root.key`オプションを付けることで秘密鍵も同時に生成しています。
さらに`-subj “/CN=my root cert”`とすることで、インタラクティブに項目を入力しないようにしています。
(なのでコピペすると同じものが作られるはず….)“`
openssl req -x509 -nodes -days 365000 -newkey rsa:4096 -keyout root.key -out root.pem -subj “/CN=my root cert”
“`実行例
olivereを使ってElastic Searchのネストした集計を実行する
# はじめに
Go言語のElastic Searchのクライアントを調べると、
– [elastic社公式クライアント](https://github.com/elastic/go-elasticsearch)
– [olivere](https://github.com/olivere/elastic)の2つが候補になるかと思います。
今回は`olivere`クライアントを使った、
ネストした集約クエリの実装方法と実行結果の取得方法についてまとめます。(補足) olivereクライアントは2022/07/23現在Elastic Search v8以降に対応していないので注意してください
### 実行環境
Go: `ver 1.18`
Elastic Search: `ver 7.17`
# サンプルIndex
サンプルとして以下ようなIndexを想定します
“`
POST users/_bulk
{ “index” : {} }
{ “name”: “user1”, “age”: 15, “created_at”: “2022-07-01” }
{ “index”
【#36 エンジニア転職学習】Go WebApp API認証・作成
# はじめに
富山県に住んでいるChikaといいます。
毎日投稿を目標に、バックエンドエンジニア転職に向けた学習内容をアウトプットします。使用しているGoのUdemy教材後半部分である、
Webアプリ作成演習を学習していきます。バックエンドエンジニアになるまでの学習内容は以前投稿した以下の記事を基にしています。
https://qiita.com/Chika110/items/ef54dddd565a0193ef44
# 本日の学習内容
本日でGoでのAPI認証、作成までを一通り終了しました。* **API認証・作成 ←Topics!!**
# API認証・作成
実際に講座で使用するビットコインAPIのコードを書きながら、APIの作成手順やポイント等を学習しました。
今時点では完全に理解できない部分もありましたが、**基本的な構文をそのまま使用したりする**ところもありました。ですので、ネットワーク関連の重要パッケージについて理解していれば、難なくコーディングできそうです。
#### ポイント
* 各APIのdocumentから、requestやresponseのフ
GolangのPackageとModuleについて
GolangのPackageとModuleを使ってGoファイルを分けて関数定義する方法がわからなかったので、調べて実行してみた2022年7月時点の情報を記載します。
## Goファイルを作成
次の2つのファイルを作成します。
“`Go:test1.go
package mainimport “fmt”
func main() {
fmt.Println(“test1”)
test2()
}
“`
“`Go:test2.go
package mainimport “fmt”
func test2() {
fmt.Println(“test2”)
}
“`
## module作成と実行
“`
MacBook-Pro tmp20220722 % go mod init main
go: creating new go.mod: module main
go: to add module requirements and sums:
go mod tidy
MacBook-Pro tmp20220722 % ls
go.mod t
StreamServer Interceptorでコンテキストを上書きしたい時
Interceptorで認証情報などの値をコンテキストに入れて使いたいときがあります。
Unary RPCだと、第一引数で受け取ったコンテキストをそのまま使えばいいですが、Stream RPCの場合は一工夫必要だったのでメモしておきます。ContextとServerStreamをEmbedded fieldとして持つStructを定義して、それをhandlerに渡します。
実際のStreamの処理でContext()を呼び出せば、値を入れたコンテキストを取り出すことが出来ます。“`go
func myStreamServerInterceptor(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
ctx := context.WithValue(ss.Context(), “key”, “value”)
return handler(srv, &serverStreamWrapper{
Serv
go で private なメソッドは他パッケージでは実装できない
# これは何?
go で
“`go:go
type Foo interface {
private()
}
“`みたいなインターフェイスがあって、この `private` を他パッケージで実装可能かどうか調べた。
# C++ の場合
C++ の場合。
アクセス制御とオーバーライド可否は直行している。“`c++:c+++
struct base
{
private:
virtual void foo() = 0;
};struct derived : public base
{
private:
virtual void foo() override {}
};
“`private なメンバ関数をオーバーライドできる。
たまにそういうコードを見る。まれに便利。
# Go の場合
public なインターフェイスに private なメソッドを用意して。
“`go:foo/foo.go
package footype Foo interface {
private()
}
“`それを別のパッケージで実装すると。
“`go:
Next.js と Go を使ってWebSocket 通信を行おう【環境構築編】
# はじめに
今回は Next.js と Go を使った WebSocket 通信のやり方を2回に分けて紹介していきたいと思います。私は現在個人開発でWebSocketによる双方向通信を利用したサービスを開発しています。
Next.js で立てたサーバーと Go で立てたサーバーを WebSocket で接続する記事があまりなく、結構苦労したので備忘録代わりにまとめたいと思い、この記事を書きました。まずは環境構築編です。第1回目のこの記事ではモノレポでサーバーを立ち上げて Next.jsの default 画面と Go のサーバーで `Hello, World!` が出力される所まで行いたいと思います。
今回のコードは github で公開しています。
https://github.com/1129-tame/next-go-websocket
# 対象読者
– Next.js, Go を触っている初心者
※当方は Go に関してはあまり詳しくはないので文法など詳細については触れません。# 環境構築
1. Docker 環境構築
1. Next.js, Go でサーバ
蟻本の問題をGo言語で解いてみた(p21 三角形)
## 問題: 三角形
n本の棒があります。棒iの長さはaiです。
あなたは、それらの棒から3本を選んでできるだけ周長の長い三角形を作ろうと考えています。
最大の周長を求めなさい。
ただし、三角形が作れない際には0を答えとしなさい。## 制約
– 3 <= n <= 100 - 1 <= ai <= 10^6 ## 解法 3辺で三角形が作れる必要十分条件は、`最も長い辺の長さ < 他の2本の辺の長さの和`が成り立つ事である。
これを利用して、全ての3辺の全ての組み合わせをチェックし、三角形が成立する組を探索する(他にn log nで解ける解き方もある)。
具体的な実装としてはは、3辺の組み合わせを3重ループでチェックし、
三角形が成立した場合は、すでに発見済みの周長の値と比較し、大きい方を答えの変数に保持する。## 解答
“`go
package mainimport (
“fmt”
“math”
)func main() {
// 入力パターン1: 答えは12
n := 5
a := [5]float64{2, 3, 4, 5,
オジオバサン・プログラマーのためのGo言語まとめ(Javaがいまいちシックリこない人向け?)
私の住む集合住宅の1階には(小さな)保育園がある。
先日、カミさんと出かけて戻ってきたら、入り口に3歳ぐらいの子供たち数人と保育士さんがいた。一人の女の子が保育士さんに大きな声でこういった。
「オジイちゃんとオバアちゃんだった」
あのね、「オジイちゃんとオバアちゃん」、じゃなくて、「オジさんとオバさん」だからね。これからは、間違わないでね。きっとあの子の父母も祖父母も若くして子供を生んだんでしょう。そうに違いない。
![P5190025.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442113/6aa8fe51-17a2-8dca-3b78-d765a9e177dd.jpeg)
さて、おじいさんに間違えられる年になってから、Go言語をメインで使ってみようかなと思案中なので、文法事項などをできるだけ簡潔に、ほかの言語の経験がある程度ある人なら、意味がわかるようにまとめてみた(若い人なら、一度見れば覚えてしまうでしょうが、オジさん、オバさん(略してオジオバさん)になると繰り返し見ないと覚え
Go言語とSQLiteでユニットテスト
Go言語とデータベースSQLite3とユニットテストについて調べた2022年7月時点の情報をメモします。
## Go1.18.3をインストール
[Go言語のwebサイト](https://go.dev/)からインストールしました。
“`
MacBook-Pro ~ % go version
go version go1.18.3 darwin/arm64
“`
## SQLite 3.37.0をインストール
[SQLiteのwebサイト](https://www.sqlite.org/download.html)からインストールしました。
Windowsの場合は、実行ファイルsqlite3.exeをgoファイルと同じフォルダにコピー。
“`
MacBook-Pro ~ % sqlite3
SQLite version 3.37.0 2021-12-09 01:34:53
“`
## gccをインストール
後ほどドライバプログラム等に利用するので、MacOSはXcode、Windowsはtmd-gccをインストール。## go.modファイルを作成
プログラムを作成する
go install でハマったこと
不覚にも `go install` でハマった。。。
結論、**[公式ドキュメント](https://pkg.go.dev/cmd/go#hdr-Compile_and_install_packages_and_dependencies)** にちゃんと記載されているが、具体例が一切無く分かりにくい。
なので備忘録を残す。# バージョンが異なる複数のパッケージを同時にインストールできない
**複数のパッケージをインストールする場合、全て同じバージョンを指定する必要がある。**
そうしなければ`all arguments must have the same version`と言われる。。。
“`
$ go install github.com/go-delve/delve/cmd/dlv@latest golang.org/x/tools/gopls@v0.9.1
=> go: golang.org/x/tools/gopls@v0.9.1: all arguments must have the same version (@latest)
“`> If the ar
Go言語で初めてWebアプリを作る際に役立ちそうな参考文献リンク集(日/英)
この記事はGo言語の基礎文法をざっくり抑えた人が、Webアプリを作るのに役立ちそうな文献をまとめたものです(2022/07/19時点)。
## 1. 公式web記事
### [Writing Web Applications / go.dev](https://go.dev/doc/articles/wiki/)
– `net/http`や`html/template`のパッケージを使ってGUIのwebアプリを作る### [Tutorial: Developing a RESTful API with Go and Gin](https://go.dev/doc/tutorial/web-service-gin.html)
– 基本的なRESTful APIをGOとGinで作る### [Tutorial: Accessing a relational database](https://go.dev/doc/tutorial/database-access)
– RDBMSをGoで使う際のチュートリアル## 2. 書籍
### [Goプログラミング実践入門 標準ライ
Go と Rust で実装されたライブラリを最適化してみた
以前に移植した Go と Rust のライブラリを最適化したので手順や結果をまとめてみました。
https://qiita.com/sg0hsmt/items/04ecd4bc8ef7be06f75b
この記事では pprof などによるプロファイリングをしていません。
最適化の手順や測定方法についてもより良いものがあると思います。※ ベンチマークの値は記事作成時 (Go 1.18.4, Rust 1.64.0-nightly) のものなのでコミットログと一致していません。
## 短い結論
– 今回のケースではメモリ割り当て回数の削減が重要だった。
## 最適化対象のライブラリ
最適化対象は日本語の文章を与えると適切な改行位置を推測してくれる [BudouX](https://github.com/google/budoux) というライブラリを Go と Rust に移植したものです。
https://github.com/sg0hsmt/budoux-go
https://github.com/sg0hsmt/budoux-rs
## ベンチマークを追加する
golangでsqlxを利用してDBアクセスする際のtimeout設定方法と、transaction利用での注意
## はじめに
– 本記事の確認環境は以下
– go: 1.17.2
– sqlx: v1.3.5
– サンプルコードについて
– サンプルコードに対するエラーハンドリングは省いています。実際に取り扱う際にはエラーハンドリングしてください。
– 実際に取り扱う際にエラーを扱わない場合は、MustExecなどのMustがついた関数を利用ください。## 基本的な使い方
`context.WithTimeout()`を使います。以下のようにtimer付きのcontextを取得。扱っているcontextがあるなら、`WithTimeout`の第一引数に指定します。
また、`cancel()`は処理の終了時に実行しておく必要があります。“`golang
ctx, cancel := context.WithTimeout(context.Background(), 1 * time.Minute)
defer cancel()
“`sqlxでは、通常使うSQL実行用の関数に対して、その関数にcontextの引数を追加した関数が用
GoでTodoアプリを作る(超初学者)
# GoでTodoアプリを作る
Goに関して超初学者ですが、Udemyの講座を参考にしながらTodoアプリを作ってみたので、アウトプットを兼ねた解説を本記事に書かせていただきました。ただ、超初学者ということもあり多々誤りがあると思いますがコメントなどで指摘していただけると嬉しいです。
Udemyの講座(https://www.udemy.com/course/golang-webgosql/)# 実際のアプリ
herokuでデプロイしたので、実際に触ってみてほしいです。
URL(https://agile-beyond-46818.herokuapp.com/)
内容はザ・todoアプリって感じです。# configの設定
“`Go:config.go
package configimport (
“log”
“todo_app/utils”“gopkg.in/go-ini/ini.v1”
)type ConfigList struct{
Port string
SQLDriver string
DbName string
LogFile strin
【#33 エンジニア転職学習】Go WebApplications Handler
# はじめに
富山県に住んでいるChikaといいます。
毎日投稿を目標に、バックエンドエンジニア転職に向けた学習内容をアウトプットします。使用しているGoのUdemy教材後半部分である、
Webアプリ作成演習を学習していきます。バックエンドエンジニアになるまでの学習内容は以前投稿した以下の記事を基にしています。
https://qiita.com/Chika110/items/ef54dddd565a0193ef44
# 本日の学習内容
本日はGoのwebアプリ用標準パッケージ、アプリ開発に向けての準備等を学習しました。* templateキャッシュ
* **Handler <--Topics!** * ビットコインについて * config, log のini設定 # Handler ```go func makeHandler(fn func(http.ResponseWriter, *http.Request, string)) http.HandlerFunc {
Go言語でstring型の値を保持した配列をstrings.Joinしようとしたらエラーが発生
# 発生したエラー
Go言語で`string`型の値を保持した配列をカンマ区切りで結合したい時に、以下のエラーが発生
“`go
package main
import “fmt”
import “strings”
import “strconv”func main(){
var numbers[1000]string
for i := 0; i < 1000; i++ { numbers[i] = strconv.Itoa(i+1) } //誤り fmt.Println(strings.Join(numbers, " ")) } ``` ```terminal # command-line-arguments ./Main.go:12:29: cannot use numbers (type [1000]string) as type []string in argument to strings.Join ``` # 解決策 [`strings.Join`](https://pkg.go.dev/strings#