- 1. 【前提】
- 2. 【import】
- 2.0.1. Prismで建てたmockサーバーを使ってGoのリクエストをテストする
- 2.0.2. GOポインタの勉強
- 2.0.3. 【環境構築】VSCode:Remote-Container機能を利用した[Docker Compose+Go+MySQL]の開発用コンテナ構築
- 2.0.4. BFFとmicroservicesアーキテクチャ
- 2.0.5. 時間割変更アプリの説明
- 2.0.6. GoでWebサーバーを作成する
- 2.0.7. GoでメールのFrom/Toをエンコードする一番簡単な方法
- 2.0.8. GoでJWT生成/認証を実装する。(ロジック編)
- 2.0.9. Go言語 WebSocket サーバー&クライアント
- 2.0.10. Go言語、Visual Studio Code でのデバッグ方法を調べる
- 2.0.11. go getを使わずにメインモジュールが無いリポジトリをモジュールとして導入する
- 2.0.12. SVGファイルからdrawioのライブラリを作成するスクリプトを作ってみた
- 2.0.13. GoとC#を速度比較してみた
- 2.0.14. Hyper-Vをコマンドから操作する!
- 2.0.15. [Go] echo で session 管理を実装してみた時の話
- 2.0.16. プログラミング言語Go アウトプット(3章)
- 2.0.17. golangのスライスの理解を深めたい。
- 2.0.18. [gRPC] Connectについて 作られた背景(概要+α) と チュートリアル+αを通して基本的な機能を押さえる
GoReleaser でマルチプラットフォーム対応の Docker イメージを作る
https://goreleaser.com/
Go のクロスコンパイルやらリリースやらの面倒を見てくれる便利な [GoReleaser](https://goreleaser.com/) ですが、Docker イメージのビルドにも対応しています。
この記事では、GoReleaser を使用してマルチプラットフォーム (マルチ CPU アーキテクチャ) 対応の Docker イメージを作成する方法について紹介します。
記事中で使用する Go のバージョンは 1.19.1、GoReleaser のバージョンは 1.11.4 です。
## サンプルプロジェクト
次のようなサンプルプロジェクトを例として扱います。
“`console
$ tree
.
├── go.mod
└── main.go
“`“`go:go.mod
module github.com/frozenbonito/helloworldgo 1.19
“`“`go
package mainimport “fmt”
func main() {
fmt.Println(“Hello,
【Go】Go言語でDB接続
【前提】
editor:VsCode
DB:data.sqlite3
機能:スキャナーへ入力してDMLが出来るように実装する。//スキャナの生成の為のパッケージを作成します。
※ファイル名は拡張子をgoにする。→input.go等
“`
package helloimport (
“bufio”
“fmt”
“os”
)func Input(msg string) string {
scanner := bufio.NewScanner(os.Stdin)//入力を受け付けるスキャナ
scanner.Scan()//入力を取得する
return scanner.Text()//コンソールに出力
}
“`
Go>src>の階層に上記ファイルを保存する。【import】
※data.sqlite3のインストールの仕方については省きます。
“`
package mainimport (
“database/sql”
“fmt”
“hello”
“strconv”_ “github.com/mattn
Prismで建てたmockサーバーを使ってGoのリクエストをテストする
# はじめに
外部サービスへのHTTPリクエスト処理をテストする場合、mockサーバーを使うことが多いと思います。
挙動確認目的で実際にサーバーに何度もリクエストを送ると迷惑をかけてしまいますからね。そこでこの記事ではYahooのTokenエンドポイントを例に、Prismでmockサーバーを建ててGoのリクエストをテストしてみたいと思います。
# 実装
dockerでprismイメージからmockサーバーを構築して、そのmockサーバーにリクエストを送ります。
リクエスト時のパラメータや想定されるレスポンスは、[Yahoo!デベロッパーネットワーク(Tokenエンドポイント)](https://developer.yahoo.co.jp/yconnect/v2/authorization_code/token.html)を参考にしています。
※以下のコードで実際にYahoo Tokenエンドポイントに正しくリクエストできるかは確認していないのであしからず。あくまでテストに焦点を当てた内容となっています。まずはメインロジックとなるgoファイルから見ていきます。
“`go:m
GOポインタの勉強
#メモリのしくみ
コンピュータのメモリにアドレス信号を制御する場所が10か所あるとしたら、それぞれに0か1が入るので、
2^10=1024とおりの住所が作成できる。言い換えると1024byte=1KBのメモリ容量となる。現在のメモリは0か1かの制御を1.2~1.5Vの電圧の差で行い、3200MHz(32億回/秒)の送受信ができる。
#ポインタについて
住所は16進数で表され、その住所を直接知りたいときは「ポインタ型」という変数の型をつかい、
その型で宣言された変数を「ポインタ型変数」という。「ポインタ型」だけでは宣言できない。どのリテラルのポインタ型か(intとかstrとか)も宣言する。
“`
func main() {
var a string = “hello”
fmt.Println(a)
//hello//str型のポインタ型変数pを宣言する
var p *string/* ×な例
p = a
上記ではポインタのアドレスpにaを格納することはできない
【環境構築】VSCode:Remote-Container機能を利用した[Docker Compose+Go+MySQL]の開発用コンテナ構築
# はじめに
今回は**VSCodeの**【**Remote-Container機能**】と【**Docker**】を使用した、
「**開発用コンテナ**」が便利ということで環境構築を行いました。
最小構成から自分がやりたいことを増やしていく中で、
つまづいた点・検索してもなかなか効果的なサイトが見つからなかった点についてまとめてみました。## この記事で分かること
* **VSCodeのRemote-Container機能**を使用した開発用コンテナ作成手順
* **GoおよびMySQLの`docker-compose & Dockerfile` `devcontainer.json`の設定で注意する点**
* 上記2点を含む、**webアプリ開発用Go+DBコンテナのソースコード**# 環境とコンテナ起動までの流れ
## 動作環境
| | |
|:————–|:——————————–|
|Docker |Do
BFFとmicroservicesアーキテクチャ
# はじめに
:::note warn
こちらはzennの記事の転載となります。
:::sweeep CTOの平下です。先日CADDiさん主催のこちらで「BFFとmicroservicesアーキテクチャ」というテーマでLTさせていただきました。そのときのLT内容を記事にしました。
https://caddi.connpass.com/event/244672/
発表したスライドです。
https://speakerdeck.com/hirac1220/bfftomicroservicesakitekutiya
以下記事の内容です。
1. BFFとmicroservicesアーキテクチャ採用の背景
2. GraphQL/BFF導入のメリットと課題
3. まとめと今後の課題# 1. BFFとmicroservicesアーキテクチャ採用の背景
## モノリスなアーキテクチャ
プロダクトローンチから3年経過し、技術負債がかなりたまっていました。![old-archi.png](https://qiita-image-store.s3.ap-northeast-1.ama
時間割変更アプリの説明
作成サイト: http://timetable.torimari.site:8080/
コード: https://github.com/moririn2528/timetable
# 背景
学校の先生は急な出張が入ることがあります。その出張と授業が被っていたとき、その授業を時間割変更する必要があります。この時間割変更を自動的に行うアプリがこちらです。
これはある学校においてかなり難しいことです。その理由は以下の 2 つです。– クラス分けが複雑であること。
ある高校の 3 年 A 組の授業は、数学の授業は A 組と I 組合同、英語は A 組、国語は 2 次試験に必要かどうかで分かれ A 組と I 組合同、理科は物理か生物どちらを取るかで分かれて A 組と I 組合同、社会は地理、日本史、世界史、倫理政経どれを取るかで分かれて A,B,C 組合同という風にかなり複雑です。
– 研究日、非常勤講師など、授業できない時間帯が多いこと。
ある高校では、非常勤講師が 1/3 くらいいます。また、常勤講師においても週 1 で研究日があり、その日は休みです。さらに、出張日など授業できない時間帯
GoでWebサーバーを作成する
# はじめに
Goでwebサーバーを作成するときに調べたことをまとめます# プログラミングの基本
・オブジェクト指向
カプセル化、継承、ポリモーフィズム
[オブジェクト指向とは?誰でもわかるようにやさしく解説](https://www.sejuku.net/blog/5973#i)・コンストラクタ
クラスをnew時点で実施されるもの・インターフェース
持つべき関数を定義する
[インターフェースとは?](https://www.gixo.jp/blog/5159/#i-2)・dto
>DTOとは、オブジェクト指向プログラミングでよく用いられる典型的なオブジェクトの設計パターン(デザインパターン)の一つで、関連するデータを一つにまとめ、データの格納・読み出しのためのメソッドを定義したオブジェクトのこと。[IT用語辞典 DTO 【Data Transfer Object】](https://e-words.jp/w/DTO.html)
# Goの文法で調べたこと
・Goでのコンストラクタの使用方法
[Goでのコンストラクタの定義](https://qiita.com/
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