- 1. Golangで環境変数を使用してFirebaseを初期化する。
- 2. Go 値を処理する例
- 3. ユニクロのUTでGoコードが書かれているTシャツ買ってみた🐉
- 4. gRPCを用いた使用例
- 5. モノリスだけどマイクロサービス??Service Weaver 使ってみる
- 6. GoとWebsocketでリアルタイムチャットサービスを作成しRenderへデプロイしてみた
- 7. AtCoder Unit Test が新しくなりました!
- 8. 画像の動的リサイズ方法を検討した
- 9. ent. の使い方についてかんたんにまとめてみた
- 10. Goにおける「俺的」クリーンアーキテクチャ構成
- 11. 【OpenSSL】localhost を https 化する 自己証明書の作成方法
- 12. 反省会~その①
- 13. GoのORM「Gen」を使ってみた
- 14. 写経から初の練習問題へ
- 15. [Go] VSCodeでジャンプできなかった時にやったことのメモ
- 16. Golangの環境構築って、いつの間にか変更されていたんですね
- 17. gRPCを使用した例
- 18. 【GO】ある構造体のポイント型に定義されたメソッドは、nilポインタからでも実行できる話
- 19. S3・SQS・Lambdaで自動マスタリングアプリを作る
- 20. Go の net/http(とecho) で HTTP リクエストを見てみる
Golangで環境変数を使用してFirebaseを初期化する。
# Golangで環境変数を使用してFirebaseを初期化する。
Firebase Adimin SDKをJSONファイルを使用せず、環境変数を使用して、初期化する。
## 環境変数を使用したい理由
### 公式ドキュメントの内容
“`go
import (
“fmt”
“context”firebase “firebase.google.com/go”
“firebase.google.com/go/auth”“google.golang.org/api/option”
)opt := option.WithCredentialsFile(“path/to/serviceAccountKey.json”)
app, err := firebase.NewApp(context.Background(), nil, opt)
if err != nil {
return nil, fmt.Errorf(“error initializing app: %v”, err)
}
“`
### 理由
`serviceAccountKey.json`フ
Go 値を処理する例
## はじめに
GoでMapやスライスを使用した例を色々つらつら記載しただけです。
Chatgptに確認した結果をほぼそのまま乗せています。
整理が間に合わないですが、結果はコードの次に載せていますので、いまいち型定義ができない、スライス、Mapの使用が慣れていないので、それでも例が欲しい場合用です。## 型と変数
空の整数型スライスを宣言
[]int{}“`go
var mySlice []int // これはnilスライスを宣言していますが、まだ初期化されていません。
mySlice = []int{} // これで空のスライスが初期化されます。
“`直接空のスライスを初期化
“`go
mySlice := []int{} // 空のintスライスを作成しています。
“`
・:=は型と値を一度にセットする
Go言語において、`:=`演算子は、変数の宣言と同時にその変数に値を割り当てる「短い変数宣言(short variable declaration)」を行います。この演算子を使用することで、変数の型を明示的に指定する必要がなくなります。代わりに、割り当てられ
ユニクロのUTでGoコードが書かれているTシャツ買ってみた🐉
## はじめに
2024年初投稿です!よろしくお願いします!
## 何を買ったか?
これです!
https://www.uniqlo.com/jp/ja/products/E459561-000/00?colorDisplayCode=09&sizeDisplayCode=004
かなり前から気になっていて、もうないんだろうなと思っていたのですが
最近また見てみたら、あったので購入しました!サイズは、XLで部屋着にします。
リモートも多いのでちょうど良い!まだ、寒いですが
## 解読
Googleレンズを使用して、Tシャツを読み取りました。
“`go
package main; import ( “fmt”; “html”; “10 “net/http”; “strconv”; “strings”; “time” trolMessage struct { Target string; Count func main() { controlChannel := make(chan sage); workerCompleteChan := make(chan bo
gRPCを用いた使用例
## はじめに
gRPCを用いたエンドポイントとリクエスト、レスポンスデータのセットの備忘記録です。
例えばSample/GetDataというエンドポイントを通じてクライアントからのリクエストを受け取り、適切なレスポンスを返すプロセスを実装例を記載します。## 環境構築
以下を参考に環境を作りました。(非常に簡易に作れる)https://qiita.com/totoaoao/items/6bf533b6d2164b74ac09
## 今回試すファイルを修正と対応
ファイル構成
“`
.
├── client
│ └── main.go
├── go.mod
├── go.sum
├── grpc_sample
│ ├── sample.pb.go
│ └── sample_grpc.pb.go
├── proto
│ └── sample.proto
└── server
└── main.go
“`proto/sample.goを以下のように記載
“`proto
syntax = “proto3”;
package sample;opt
モノリスだけどマイクロサービス??Service Weaver 使ってみる
# はじめに
Google が、この 3月にオープンソースとして公開した Service Weaver というフレームワークを公開しました。
📣 Introducing Service Weaver!
Service Weaver is an open source framework for building and deploying distributed applications. It allows you to write your application as a modular monolith and deploy as a set of microservices.
Learn more → https://t.co/XmnVALYXNC pic.twitter.com/N67AWTA9kn
— Google Open Source (@GoogleOSS) March 1, 2023
https://serviceweaver.dev/
簡単に紹介すると、
“モノリスなアーキテクチャーのようにコードを書くだけで、マイクロサービスとしてデプロイ可能なアプリを書くためのフレームワーク”
です。「は?何を言っているの?」でしょうし、字面をなんとなく理解できたとしても、「そんな魔法のような話がある訳ないでしょ?」だと思います。
今回は、「あぁ、こういうことか!便利だな!」と感じられるように、実際に手を動かして、実際の動きを見てみたいと思います。
# 前提
OS への依存は、特には無いとは思いますが、Ubuntu 22.04 LTS を利用しています。
“`bash
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTR
GoとWebsocketでリアルタイムチャットサービスを作成しRenderへデプロイしてみた
# はじめに
どうも、Shakkuです。
都内某高専情報科の3年生です。(2024/3/24時点)Websocketを使って何か作りたいな〜とずっと思っていつつ、「javascript全くわからん!」でずっと触れていなかったので、さらっとjsのお勉強して今回リアルタイムに会話ができるチャットサービスを作ってみました。
また、作ったプログラムをデプロイするという体験もしてみたかったので、[Render](https://render.com/)というサービス内でサーバーとPostgreSQLをお借りして、プログラムをデプロイ&公開してみました。
作成したものは、GitHubにもあげています。(https://github.com/Shakkuuu/websocket-chat-go)
どんなコードかだけ見たい方は上のGitHubから。
ざっくりとした構成や使用技術の概要も見たい方は、下の「概要」「参考画面」「使用技術」「構成」などを。
プログラムの中身の説明も見たい方は、最後まで読んでいただければと思います。いつものごとく、プログラムの説明は自身の振り返り
AtCoder Unit Test が新しくなりました!
AtCoder の問題ページからユニットテストを生成するブラウザ拡張機能 “AtCoder Unit Test” を大幅リニューアル!便利な新機能をいろいろ実装しました!
* **テストコードのテンプレートが編集できるようになりました。**
* **テストコードの生成方法が変更になりました。**
* Go, Ruby のテストコードを生成できるようになりました。
* (Python) テストコードを含んだまま提出できるようになりました。 ([例](https://atcoder.jp/contests/abc341/submissions/51385551))
* (Java, Kotlin) テストライブラリが JUnit5 に変更になりました。ダウンロードは ↓ から。ぜひご利用ください!!!
* [AtCoder Unit Test – Chrome ウェブストア](https://chromewebstore.google.com/detail/atcoder-unit-test/lmahhninbclefepjbcdfbcjnancipfmi?hl=ja&auth
画像の動的リサイズ方法を検討した
# 結論
https://www.libvips.org/
速度・省リソースの観点ではこれが良い。
# 背景
10年もののシステムを運用しています。
画像を扱うサービスなのですが、画像ファイルが相当数になって、ファイルサイズの合計が peta byte にとどこうとしています。
ここまでくると、Storageの費用がかなり目立ちます。画像の表示速度が遅くなることはビジネス要件として許容しにくく、ストレージを低速なものに変えにくいです。
一番量が多い画像の種別は大きさ違いで同じものを扱っている画像でした。
(メインのドメインの画像を大きさごとに物理的に3種類)なので、
その種別の画像は1枚のみ管理して他の大きさの画像を削除して1種類のみ管理することで、ストレージのディスクサイズを減らすことで費用削減効果が期待できました。
(細かい話は割愛)1種類のみ管理するために他の大きさの画像は動的に生成することでそれが実現できます。
(他にも色々対策ありそうですが、細かい話は割愛)つまり、
画像の大きさを動的に生成する必要がありました。動的リサイズ: https://e
ent. の使い方についてかんたんにまとめてみた
# はじめに
APIサーバを作成するにあたって、「`ent.`がモダンで使いやすそうだな」と思い学習した内容を書いていきます。
[Quick Introduction](https://entgo.io/ja/docs/getting-started/)から、極力コードを省いた、`ent.`の使用フローについて、`Atlas`によるマイグレーションついてわからなかったことを書きました。
# 使い方の流れ
1. Goモジュールの作成
2. スキーマの作成・定義
3. アセットの生成
4. スキーマのマイグレーション## Goモジュールの作成
“`bash
go mod init example
“`## スキーマの作成・定義
以下のコマンドで、Userスキーマを自動生成できる。
複数生成する場合も、引数を追加することで可能。
“`bash
go run -mod=mod entgo.io/ent/cmd/ent new User
“``entdemo/ent/schema/` 配下に `user.go` ファイルが作成される。
内部の`User.Fi
Goにおける「俺的」クリーンアーキテクチャ構成
# はじめに
こんにちは、mizukoです!親の顔より見たGoのクリーンアーキテクチャ構成について、自分はこうしているよ!というのをアウトプットしていきます!
Goのディレクトリ構成に悩んでいる人の参考になりましたら幸いです!# 構成
まず全体像です。“`
.
├── .devcontainer
├── .env
├── .gitignore
├── Makefile
├── compose.yml
├── config
│ ├── config.go
├── docker
│ ├── golang
│ │ └── Dockerfile
│ └── postgres
│ ├── Dockerfile
│ └── pg_hba.conf
├── domain
│ ├── model
│ │ ├── category.go
│ │ ├── memo.go
│ │ └── user.go
│ └── repository
│ ├── category
│ │ └── cate
【OpenSSL】localhost を https 化する 自己証明書の作成方法
自己証明書(通称オレオレ証明書)の作成方法です :smiley:
## 1. CA用の秘密鍵を生成
このコマンドは、2048ビットのRSA秘密鍵を生成し、`localCA.key` というファイルに保存します。“`bash
$ openssl genrsa -out localCA.key 2048
“`
– openssl genrsa: RSA 秘密鍵を生成するコマンド
– -out: 生成した秘密鍵の出力ファイル名 (例: localCA.key)
– 2048: 秘密鍵の長さ (ビット単位) (例: 2048ビット)## 2. 秘密鍵と識別情報から証明書署名要求 (CSR) の作成
このコマンドは、以下の情報を設定した CSR を生成し、`localCA.csr` というファイルに保存します。“`bash
$ openssl req -batch -new -key localCA.key -out localCA.csr \
-subj “/C=jp/ST=Osaka/L=Osaka-shi/O=\”Example Inc\”/OU=Foo/CN=
反省会~その①
プログラミングをして、ハイ終わり。
では勿体ないと思っています。
学校の勉強同様、何が間違ったのか、何で間違ったのか検証しようと思います。—
お題はこちら。https://qiita.com/NothingMyself37/items/27b87c6e2b9e88055673
—
> – importするのは1つだけだから、()で括らなくて良い
> – 1日24時間を定義していない
> – 定数と変数の違いを、きちんと理解して使い分けしていない
> – 単位を表示させていない
> – 当然ながら、計算式が合っていないので不正解では、1つずつ検証していきましょう。
—
> – importするのは1つだけだから、()で括らなくて良い
こちらについては、初めてコメントを頂きました。
ありがとうございます。“`
その通りではあるんですが、常にカッコを付けるのは今後インポート対象が増えるときに出る差分が少ないというメリットはあるので一長一短かなと思います。
“`言われて、たしかに、と思いました。
模範解答=絶対解ではない、ということを教えてくださり
GoのORM「Gen」を使ってみた
# はじめに
こんにちは、mizukoです!みんさんはGoのORMは何を使っていますか?
私はしばらくGormを使っていたのですが、結局難しい表現をしようとするとガッツリSQLを書く必要があり、「あれ?ORMとは…?」となる事が多々あります。
そもそもGo自体はORMを使わず標準パッケージを使う派閥がいるらしいですし、私自身が元々NodeやLaravel、Rails出身で、ORMならできて当たり前と思ってしまっている節があるのも原因かと思いますが…😢そこで今回はGenを試しに使ってみた所感を記載していきたいと思います。
# Genとは
[Gen](https://gorm.io/gen/index.html)とは、Gormプロジェクトの一部として開発されており、データベーススキーマからGoのコードを自動生成することで、型安全で高性能なデータアクセスを実現してくれるORMです。
あくまでGormプロジェクトの一部であり、**GormでできないことはGenでもできない**と思って頂いて良いと思います。# 導入
[ドキュメント](https://gorm.io/gen/
写経から初の練習問題へ
Golangの勉強を始めるにあたって、昨年友人から頂いた書籍を使っていきます。
https://amzn.asia/d/4NaB7sH
「入門Goプログラミング」という書籍です。
火星探査機を構築しながら学べるので、夢がありますね(・ω・`)基本的には、写経をしていきます。
そして、練習問題を解いていきます。—
昨日解いた問題は、下記の通りです。
>「マラカンドラ(火星の別名)」に28日で到着するには、どれだけの速度(km/時)で宇宙船を飛ばせば良いのかを調べるプログラムを書きましょう。距離は、56,000,000km と仮定します。
私の解答は、こちら。
“`
package mainimport (
“fmt”
)func main() {
const distance = 56000000
var speed = distance / 28
fmt.Println(speed)
}
“`模範解答は、こちら。
“`
package mainimport “fmt”
func main() {
const hoursPerDay
[Go] VSCodeでジャンプできなかった時にやったことのメモ
# はじめに
時々、「別のリポジトリであれば定義元や利用先にコードジャンプできるのに、このリポジトリだとなぜかできない。」みたいなことがありました。
Goの拡張やインストール済みだし、最新だし、なぜ?という感じでした。# 対処したこと
VSCodeが使用するGoバージョンを変えました。なぜか問題のあるリポジトリでは、スクショのようにtoolchainのものになっていたため、対象バージョンを選択してダウンロードして、それを使うようにしたら、ジャンプできるようになりました!
![スクリーンショット_2024-03-19_9_56_21(2)_png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221948/a68983f5-ee2d-72c6-5828-f826fda37b29.png)
Golangの環境構築って、いつの間にか変更されていたんですね
はじめまして。
さっとんと申します(・ω・`)
Golangは、2019年~2020年にかけて、ほんの少し齧ったことがある程度のレベルです。
なので、**初心者よりたちが悪い**です。—
当時と比較しながら、記事を執筆していこうと思います。
当時のGolangの環境構築は、
“`
1. 公式サイトからインストーラをダウンロード
2. インストーラを実行
3. システムの詳細設定から、環境変数を追加
4. VScodeをインストール
5. インストーラを実行
6. Golangの拡張機能を追加
“`
をしていました。—
先日、久々にGolangを勉強しようと思い環境構築をしました。
手順は、**ほぼ**上記の通りでした。
ほぼと記載したのは、3.の工程が不要で、自動で追加されていたからでした。試しにHello Worldを表示させようとデバッグしたら、VScodeでエラーが表示されました。
見たことのないエラーって、焦りますよね(;´・ω・)—
自力で解決することはできず、Google先生に尋ねました。
すると、まず下記のサイトを教えてくれました。
gRPCを使用した例
## はじめに
gRPCをGo言語で使用する基本的な例を提供します。
例では、簡単なgRPCサービスを定義し、そのサービスを実装したサーバーとクライアントを作成します。## 一般的な流れ
### Step 1: Protocol Buffers (protobuf) の定義まず、`.proto` ファイルを作成して、gRPCサービスとメッセージ形式を定義します。`helloworld.proto` という名前のファイルを作成し、以下の内容を記述します。
“`proto
syntax = “proto3”;package helloworld;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}// The request message containing the user’s name.
message HelloRequest {
string
【GO】ある構造体のポイント型に定義されたメソッドは、nilポインタからでも実行できる話
# 結論
“`go
type Dog struct {
Name string
}func (d *Dog) Speak() {
fmt.Printf(“Woof”)
}func main() {
var nilPoint *Dog
nilPoint.Speak()
}
“`
上記のコード動くと思いますか?
.
.
.
タイトルがネタバレになってる感すごいですが、動きます。
ちゃんと`Woof`が出力されます。
ポインタレシーバに対するメソッド呼び出しは、nilポインタに対してでも正常に行えます。
あまり業務で使う機会はないと思いますが、初めて知った時結構びっくりしたので備忘録として残しておきます。
# 余談
当然ですが、構造体のプロパティを参照している場合panicが発生します。
“`go
type Dog struct {
Name string
}func (d *Dog) Speak() {
fmt.Printf(“Woof, I am %s\n”, d.Name)
}func main() {
var nilPoint *Dog
nilP
S3・SQS・Lambdaで自動マスタリングアプリを作る
# 概要
今回は、AWSのSQS・Lambdaを練習も兼ねて触ってみようということで自動マスタリングアプリを開発しました。
ちなみにマスタリングとは、音楽制作の最終工程であり、最終的に配信やCDプレスするために音質を整える作業のことです。※ファイルをS3にアップロード・ダウンロードするUI等は実装しません。
# 音圧爆上げくんとは
AIを使用したマスタリングを、オンラインで自動的に行なってくれるサービスです。
以前は有料機能もあったようですが、2024年3月17日現在は無料で使えます。APIが提供されており、今回使用させていただきました。
https://bakuage.com/
https://qiita.com/bakuage/items/5e383be930477ca6f148
実装には、こちらのチュートリアルが役立ちます。
https://github.com/ai-mastering/tutorial-go
# 成果物
今回開発したアプリの使い方の説明です。
### 1. 音声ファイルをS3バケットに配置する
Go の net/http(とecho) で HTTP リクエストを見てみる
## Go で HTTP リクエストを見てみよう!
Go で HTTP リクエストを見てみる。
HTTP リクエストとは、**クライアント => サーバ** に送られるもので、クライアントの情報が書いてある。サーバはこれを頼りに情報を送り返す。例
“`HTTPResponse
GET /req-header HTTP/1.1 # メソッド URI HTTPバージョン
Accept-Encoding: gzip, deflate, br # ヘッダ
Accept-Language: ja
Host: localhost:8080
# 空行
# あればボディ
“`まずは復習。シンプルに `hello!` と返すサーバを立ててみる。
“`go
func main(){
http.HandleFunc(“/simple”, simple)
http.ListenAndServe(“:8080”, nil)