- 1. GoでメールのFrom/Toをエンコードする一番簡単な方法
- 2. GoでJWT生成/認証を実装する。(ロジック編)
- 3. Go言語 WebSocket サーバー&クライアント
- 4. Go言語、Visual Studio Code でのデバッグ方法を調べる
- 5. go getを使わずにメインモジュールが無いリポジトリをモジュールとして導入する
- 6. SVGファイルからdrawioのライブラリを作成するスクリプトを作ってみた
- 7. GoとC#を速度比較してみた
- 8. Hyper-Vをコマンドから操作する!
- 9. [Go] echo で session 管理を実装してみた時の話
- 10. プログラミング言語Go アウトプット(3章)
- 11. golangのスライスの理解を深めたい。
- 12. [gRPC] Connectについて 作られた背景(概要+α) と チュートリアル+αを通して基本的な機能を押さえる
- 13. プログラミング言語Go アウトプット(2章)
- 14. Oculus Questのブラウザを自分好みに拡張する
- 15. TinyGoでWasmをbuildするまでの内部実装
- 16. プログラミング言語Go(技術書)のアウトプット(1章)
- 17. Clean Architecture with Go
- 18. GolangのSlice挙動メモ:copy, append, len, cap, 関数に渡して変更したときどうなるか。
- 19. Docker GoでREST APIを作成、MySQLに接続する
- 20. Goで簡易な集合型を実装してみよう
GoでメールのFrom/Toをエンコードする一番簡単な方法
Amazon SESを使ってメールを送信する際に、aws-sdk-goではFromに日本語名を使うと文字化けしてしまったので。
“`go
func main() {
addr := mail.Address{
Name: “太田豊太郎”,
Address: “mail@example.com”,
}
fmt.Println(addr.String()) // =?utf-8?q?=E5=A4=AA=E7=94=B0=E8=B1=8A=E5=A4=AA=E9=83=8E?=
}
“`
GoでJWT生成/認証を実装する。(ロジック編)
# はじめに
Webの認証で扱われるJWT。誰かが作成した認証・認可の部品を利用する事で自然に触れている。自然に触れているけど、JWTって何?どうやって作ってるの?セキュリティ周りなんでそれで大丈夫なの?って所がいまいちイメージできていなかった。今回、JWTの所を改めて勉強することにしたので、記事にして残しておきます。## JWTって何?
JWTとはJsonWebTokenの略で、ジョットと読みます。[RFC7519](https://www.rfc-editor.org/rfc/rfc7519)で定義されたインターネット標準の認証方式です。公式リファレンスの抜粋では下記のように定義されています。
![スクリーンショット 2022-09-24 14.34.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/8c6af326-de3c-269b-8166-d2d620942716.png)
[日本語訳]
“`
JSON Web Token (JWT) は、コンパクトでURLセーフな表現
Go言語 WebSocket サーバー&クライアント
## WebSocket
WebSocketは、サーバーとクライアントの間で双方向の非同期通信を可能にする技術である。
クライアントに即座に通知したり、サーバーからクライアントにデータをプッシュしたりするために使用される。## サーバーコード
“`Go
import (
“log”
“net/http”“golang.org/x/net/websocket”
)// WebSocket Server Sample
func main() {
log.SetFlags(log.Lmicroseconds)http.Handle(
“/”,
websocket.Handler(func(ws *websocket.Conn) {
defer ws.Close()
for {
// Receive Logic
var msg string
recvErr := websocket.Message.Receive(ws, &msg)
if recvErr != nil {
log.Fatal(recv
Go言語、Visual Studio Code でのデバッグ方法を調べる
# Go言語、Visual Studio Code でのデバッグ方法を調べる
Windows を使っているとする
? とりあえずググって適当に記事を読む。大筋で、以下の記事の通りやるとできる
? [Goのデバッグ環境 on VSCode](https://future-architect.github.io/articles/20201117/)
とりあえず真似する
# Step [O1o0] はじめに
## Step [O1o1o0] エディター
Visual studio code を使っているとする
## Step [O1o2o0] プログラム言語
Go 言語をインストール済みとする
## Step [O1o3o0] Go エクステンションを入れる
? [Go for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=golang.Go)
## Step [O1o4o0] 関連するツールをインストールする
`[Ctrl] + [Shi
go getを使わずにメインモジュールが無いリポジトリをモジュールとして導入する
#### 背景
https://qiita.com/eihigh/items/9fe52804610a8c4b7e41しかし、メインモジュールが無いリポジトリは、go installできない。
#### How to
モジュールとしてインストールしたいリポジトリは以下とする。
“`
https://github.com//
“`
以下の手順で、インストールできるはず。
go1.19.1
“`
cd $GOPATHgit clone https://github.com/
/ cd
go install
“`
#### 【参考・引用】https://new-lamp.hatenablog.com/entry/2021/10/27/124054
https://blog.applibot.co.jp/2021/04/20/go-install/
SVGファイルからdrawioのライブラリを作成するスクリプトを作ってみた
[この記事](https://qiita.com/capybara-alt/items/033596584f26cd96d94c)の実践編
## 背景
モックアップをdraw.ioを何度か使うことがあった。フロントエンドをAngular+PrimeNGで実装するため、draw.ioでPrimeNGのアインコンを使いたかった。しかし、draw.ioにPrimeNGのアイコンが使えなかった(ライブラリがなかった)ため、手作業でライブラリを作る必要があった。
今後、このような作業を手作業でしたくないので、本ツールを作成した。
## 本ツールでできること
以下3点の処理をすることで、draw.ioでSVGアイコンのライブラリを自動で作成する。また、ライブラリ内のSVGの色などもdraw.ioで変更できるようになる。
+ SVGファイルを読み込み、draw.ioのライブラリとして出力する
+ SVGにstyleタグがない場合、自動でタグを挿入する
+ draw.ioのstyle情報に”editableCssRules=.*”を追加する
## 動作
CLIツールなので、ターミナルで実行する
1
GoとC#を速度比較してみた
# ★記事更新しました (2022/09/24 23:00更新)
比較ソースがGoとC#とで差異があったため、再測定を行い、記事更新しました。
修正前ソースは、for文のループ変数の型がintになっており、内部的にはGoはint64[^1]、C#はint32で差異がありました。
記事本文は、以下3つのソースの測定結果を並記しております。(③が更新前の記載内容)
→変数の型が、①int64 ②int32 ③int (Goはint64、C#はint32)以下、本文です。
[^1]:Goのint型は、環境依存でint64またはint32になります。
———-
GoとC#の速度比較を行いました。
普段C#を扱っているのですが、Goを使う機会があり、Goは早いと噂なので実際に測ってみたのが動機です。# 計測内容
2~Nの整数が素数かどうか、愚直にループと判定を行う処理をGoとC#で実行しました。* 変数の型が以下3パターンのソースで実施。
* int64 →ソース:[Github(Int64ブランチ)](https://github.com/takeITe
Hyper-Vをコマンドから操作する!
# はじめに
powershellからHyper-Vを操作しようとすると、Start-VMだの、Resume-VMだのコマンドの先頭が違います。Bashとかに慣れた身からすると違和感ありまくりで使いにくいです(笑)。そこで、manahyというツールを作成(中)したので紹介したいと思います。# manahyとは
Go言語で開発したHyper-Vを管理するためのツールです。現在は機能は少ないですが、今後、追加していく予定です。
レポジトリ## 実装している機能
– Hyper-Vが有効化されているか確認する
– VMの一覧取得
– VMの電源操作## 今後実装する(したい)機能
– Hyper-Vの有効化
– VMSwitchの一覧取得
– VHD / VMSwitch / VMの作成・削除機能
– VHD / VMSwitch / VMの各種パラメータの変更機能# インストール
[Go] echo で session 管理を実装してみた時の話## 環境
* MacBook Air (M1, 2020)
* MacOS Monterey 12.0.1
* VSCode 1.71.0
* go version go1.18 darwin/arm64
* echo v4.7.2
* gorilla/sessions v1.2.1## やりたいこと & この記事で書くこと
go の [echo](https://echo.labstack.com) と [gorilla/sessions](https://github.com/gorilla/sessions) を用いて、以下のような処理を実装します。1. クライアントからアプリケーションサーバーに認証が必要なリクエストをする。
1. アプリケーションサーバーがセッションファイルを作成して、セッション管理する。
1. ブラウザが cookie を保存する。
1. 以降同様のリクエストがきた場合にセッションを確認してユーザーの判別を行う。と言っても、ほとんどの実装は echo や gorilla/sessions が提供してくれているので、こちらで
プログラミング言語Go アウトプット(3章)
# はじめに
1章のアウトプットやプログラミング言語Goのアウトプットをしようと思ったきっかけなどは[こちら](https://qiita.com/AtomuIshida/items/6e05c02a2bd82f1e133d)でまとめているのでぜひ読んで欲しいです。# 3章 基本データ型
## 重要・学びになったと思うところ
### 文字コード・ルーンについて
章を進めていく中で、rune型やUnicodeという言葉が当たり前のように出てきて、これは理解しなければということで、調べてみると分かりやすい記事を発見https://free-engineer.life/golang-string-rune/
::: note info
文字コード・・・文字に割り当てられた数字
:::
確かに、機械は0と1しかない理解できないから、文字を0か1に変換する必要があるよなー文字と文字に割り当てられた数字の対応表がある
::: note info
符号化文字集合・・・「文字」と「文字に割り当てた番号」の対応表
文字符号化方式・・・「文字に割り当てた番号」と「コンピュータが扱う数字」
golangのスライスの理解を深めたい。
# はじめに
タイトルの通りです。go言語を使って開発してて、make関数の挙動が理解できない部分が多々あるのに分かった風で使ってるのどうにかしたかったんです。# 前提
まず基礎的なgolangのスライスの構造を理解するためには公式のドキュメントをみるのが一番早いです。https://go.dev/blog/slices-intro
スライスを知るには配列についても理解しないとみたいですね。ざっくりと配列とスライスの特徴をまとめるとこんな感じでしょうか。
## 配列
– 配列型の定義は、長さと要素の型を指定する。– 長さはその型の一部 (よって[4]int と [5]int は型としては別のものとして扱う)。
– 配列は変数定義した際実体となる。(配列値を代入または渡すときに、その内容のコピーを作成する。)![スクリーンショット 2022-09-18 11.03.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599304/1b7559e7-c205-6710-73d4-e833
[gRPC] Connectについて 作られた背景(概要+α) と チュートリアル+αを通して基本的な機能を押さえる
## はじめに
以下を読み、Connect-Web なるものの 1.0 がリリースされたことを知った(2022/8半ばに)。
ref: [gRPC がフロントエンド通信の第一の選択肢になる時代がやってきたかも?](https://future-architect.github.io/articles/20220819a/)
gRPC については、[Go 言語で学ぶ実践 gRPC 入門 (Udemy 講座)](https://www.udemy.com/course/go-grpc-x/) を通してド基礎を押さえただけの状態であったため、これを機に gRPC 関連を色々調べたため、それを記載する。
本記事では
– (簡単な) Connect が作られた背景
– gRPC 関連で調べたこと(gRPC-Web中心)
– Connectとは
– Connect のチュートリアルを部分的&一部追加して試したことをまとめる。
gRPC とは? は省くが、以下が参考になるかと思われるため、必要あれば参照されたし。
– [What is gRPC? – Introduction to
プログラミング言語Go アウトプット(2章)
# はじめに
1章のアウトプットやプログラミング言語Goのアウトプットをしようと思ったきっかけなどは[こちら](https://qiita.com/AtomuIshida/items/6e05c02a2bd82f1e133d)でまとめているのでぜひ読んで欲しいです。# 2章 プログラム構造
## 重要・学びになったと思うところ
### パッケージの中でも大文字から始まる定数や型や関数は公開される
何気なく使っていた“`fmt.Printf“`などは、fmtパッケージでPrintfが大文字で定義されているから、パッケージをインポートするだけで参照することができる。[公式のドキュメント](https://cs.opensource.google/go/go/+/master:src/fmt/print.go;l=240?q=Printf&sq=&ss=go%2Fgo:src%2Ffmt%2F)
“`golang
func Printf(format string, a …any) (n int, err error) {
return Fprintf(os.Stdou
Oculus Questのブラウザを自分好みに拡張する
Android版のChromeは拡張機能をインストールできないので,操作を自動化したり,サイトにちょっとした機能追加をしたいときに不便です.ChromiumをベースにしているOculus(Meta) Questのブラウザも同様の問題があります.
最低限,動画サイトで倍速再生したり,広告をブロックしたり,ファイルをGoogle Driveに保存したりできないと不便なので,[Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) を使って特定のURLにアクセスした時にJavaScriptを実行するツールを書いたら便利になりました.
やったことは単純でこれといって面白い部分もありませんが,思ったより面倒だったのでまとめておきました.
# GoでDevTools Protocolを使う
Goで実装するため[Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) を使うためのライブラリを
TinyGoでWasmをbuildするまでの内部実装
# TinyGoとWasm
TinyGoとは組み込み向けアーキテクチャで動作させるGo言語のコンパイラです。サポートしているマイコンボードの一覧は、GitHubのReadMeに記載されています(https://github.com/tinygo-org/tinygo)。
TinyGoの特徴として、Wasmにコンパイルさせることができます。Wasmは今後発展していきそうな技術トピックの1つだと思います。OS非依存にVMで動く、ブラウザで動作するなど、将来性を感じさせてくれる技術です。本記事では、tinygoコマンドを実行した際、内部で何が起きているのか、コードを追って調べました。
## TinyGoでWasmを動かす
“`golang
// main.go
package mainimport “fmt”
func main() {
fmt.Println(“hello world”)
}“`
main.goを作成したら、以下のコマンドを実行すればwasm.wasmが出力されます。
“`
tinygo build -o wasm.wasm -target was
プログラミング言語Go(技術書)のアウトプット(1章)
# はじめに
この記事は、[プログラミング言語Go](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9EGo-ADDISON-WESLEY-PROFESSIONAL-COMPUTING-Donovan/dp/4621300253)という技術書を勉強したことのアウトプットになります。
自分自身、Goに関しては全くの初心者で、この記事の内容も間違っている場合があると思いますので、コメントなどで指摘していただけると幸いです。# プログラミング言語Goを勉強する理由
理由としては、「プログラミング言語の本質的な勉強が自分には必要だと感じたから」です。
自分が今までに多く触れてきた言語だと、RubyやJavaScriptで、どちらの言語においても、その言語のフレームワークを使用することが多く、RailsやReact、Vueを使っていました。
というのも、フレームワークを使えば、自分の作りたいものが比較容易に作ることができ、就活に活か
Clean Architecture with Go
# ? はじめに
この記事は、クリーンアーキテクチャとGo言語を半年ほど勉強した人の知見をまとめたものです。[zenn](https://zenn.dev/88888888_kota/articles/1a5caac8d743b8)にも同じ内容を投稿しています。この記事の対象者としては、
* クリーンアーキテクチャ聞いたことあるけどGoでの実装方法?
といった方を想定しています。自分自身も、完全に理解しているとは言い難いですが、ある程度知見が溜まってきたのでまとめておきます。Go言語でクリーンアーキテクチャを実現したい方の参考になれば幸いです。
# ? クリーンアーキテクチャとは?
* システム設計ガイドラインの1つ
* メリット
* 疎結合、関心の分離により変化に強い
* テストが容易
* デメリット
* コードが冗長
* わかりにくい
# ? 実際に実装してみる
クリーンアーキテクチャに関しては、ネット上の記事を読んでもあまりピンとこないかもしれないので、**実際に実装**してみることあるいは**実際のコードを読む**ことが理解の近道だと思います。その際、参考になるレ
GolangのSlice挙動メモ:copy, append, len, cap, 関数に渡して変更したときどうなるか。
## Goのスライスでハマった(定期)
スライスを関数に渡して関数内で長さが変わって増えた分が呼び出し元で見れない問題にハマった。
結論としては、長さを変えてやればOKだった。(変えれないと思っていたら変えれた)“`go
package mainimport “fmt”
func main() {
data := make([]byte, 0, 16)
data = append(data, []byte(“abcd”)…)
fmt.Println(“1 “, string(data))
newLen := repeater(data)
fmt.Println(“3 “, string(data)) // ここでは足されたデータが見えなーい
data = data[0:newLen] // 長さを変えると、世界が変わるー (cap超えぬようにね)
fmt.Println(“4 “, string(data))
}
// 同じデータを繰り返して足す。長さが倍になる。
func repeater(data []byte) int {
d
Docker GoでREST APIを作成、MySQLに接続する
# はじめに
本格的にアプリ開発を始める前に、練習として
Dockerを用いてGoコンテナ、MySQLコンテナを作成、
MySQLからデータを取得するAPIを作成しました。作成の手順、参考にした記事をまとめてます。
# 使用技術
Go
net/http# Dockerとは
以下の記事を参照# 実施したこと
## DockerでGoコンテナを作成、Docker
Goコンテナ、MySQLコンテナを同時に作成する前に、
Goコンテナのみ作成しました。
初めてに触れるので、Dockerに慣れるためにDockerでGoコンテナを作成、
Docker上でGoサーバーを起動させました。参考にした記事は以下の記事です。
https://www.yoheim.net/blog.php?q=20170403
https://zenn.dev/kenny/articles/b9dd668bf09efe
https://qiita.com/kooohei/items/0e788a2ce8c30f9dba53
https://docs.docker.jp/engine/reference
Goで簡易な集合型を実装してみよう
# はじめに
Goには、集合型が存在しない。Goで集合型っぽいことを実装するには様々な方法があるが、空のstructをvalueとして持つmap型を定義する方法が使い勝手が良い。今回はこれを利用してSet型の定義を行い、簡易なメソッドを実装してみよう。
# 実装
“`golang
type Set map[interface{}]struct{} // Set型の定義func NewSet() *Set { // 新しい集合を作成
return &Set{}
}func (s Set) Add(key interface{}) { // 集合に値を追加
s[key] = struct{}{}
}func (s Set) Delete(key interface{}) { // 集合から値を削除
_, ok := s[key] // 値の存在判定
if ok {
delete(s, key)
}
}
“`※今回は簡易的な実装のためmapのkey(interface{})の型判定は実装していない
# How to use
“`golang
fu