- 1. ISUCON 13 に参加して20位でした (最終スコア: 91,400 なんかいい感じではやいやつ)
- 2. Kubernetesローカル環境構築
- 3. GitのようなRDBMSバージョン管理システムの構築 〜Golangを用いたアプローチ〜
- 4. Go×ReactでGCSに画像をアップロードする
- 5. プログラミング言語 Go Java C# でHello World実行時間を仲良く競う
- 6. Go:ゴルーチンとチャネルによる並列処理
- 7. AWS CDK for Goを使用して、Go言語で書かれたLambda関数を定期実行する
- 8. Go:レシーバについて解説(Rubyとの違いも合わせて解説)
- 9. GoでtxtファイルをExcelファイルに変換
- 10. 改めて学ぶセッションベース認証[Goによる実例付き]
- 11. GoのLambda関数のランタイムをGo1.xからprovided.al2に変更しました(Serverless Framework)
- 12. [Go]「…(ピリオド3つ)」の使い方(応用編)
- 13. [Go]不確実性なテストで使える assert.InDelta と assert.InEpsilon の使い方
- 14. VSCode gopls client: couldn’t create connection to server.の解決法
- 15. Goで学ぶGraphQLサーバーサイド(7)ーリゾルバの実装(応用編)2
- 16. ゴールーチンのメモ(チャネルなど)
- 17. 【永久保存版】0からGo言語を勉強するならこのロードマップに従え!
- 18. こんにちは!!@Sicut_studyです!
- 19. OPA・Regoでコーディング規約が守られている事を検査する
- 20. GolangとCasbinでABACを実装する
- 21. Go:入門者向けにポインタをコードで解説
ISUCON 13 に参加して20位でした (最終スコア: 91,400 なんかいい感じではやいやつ)
# ISUCON 13 に参加して20位でした (最終スコア: 91,400 なんかいい感じではやいやつ)
ISUCON 13に参加して20位になりました。
また、Tver賞として Firetv stick 4K max を獲得しました!
ありがとうございます!![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905557/d3b879c4-c570-8fc0-7355-245c21a9b540.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905557/7a83364f-5233-6c4c-6543-2091590801a9.png)
## 参加確定まで
ISUCON 参加はこれで3回目でした。
最初の難関が、申し込みです。
DOS攻撃ばりのアクセスするのは嫌だったので、参加確定券付きの個人スポンサーとして申し込みました。割とチームメンバーは決まっていて、去年と同
Kubernetesローカル環境構築
# 目次
(1)概要
(2)準備・前提条件
(3)構築手順
・(3-1)フォルダ構成
・(3-2)DockerDesktop設定
・(3-3)Dockerローカル環境設定
・(3-4)今回使用するKubernetes要素4つ
・(3-5)DBポッド起動
・(3-6)APIポッド起動
・(3-7)FRONTポッド起動
・(3-8)ブラウザ動作確認# (1)概要
本記事では、DockerDesktopを使用し、以下の技術構成の「**Kubernetesローカル環境**」をしていきます。
– Go
– MySQL
– TypeScript
– Reactローカル環境でもKubernetesを使用し、「**本番環境**」や「**検証環境**」でもKubernetesを使用している場合に、環境間の差異を無くすことができます。環境間の差異により、ローカルではうまくいっていても本番環境でポッドが起動しない等のエラーを未然に防ぎましょう!
Kubernetes初学者にとっても無料でKubernetesをいじれるのでおすすめです!
# (2)準備・前提条件
GitのようなRDBMSバージョン管理システムの構築 〜Golangを用いたアプローチ〜
# はじめに
現代のデータ駆動型アプリケーションにおいて、データベースの変更管理は重要な課題です。PostgreSQLやMySQLなどのリレーショナルデータベース管理システム(RDBMS)において、これらの変更を効率的に管理するための方法は多岐にわたります。本ブログでは、Gitのようなバージョン管理システムをGolangで構築する方法について詳しく説明します。# 要件定義
### 対象データベース
+ 初期対象: MySQLデータベースシステム
+ 将来的な拡張: PostgreSQLなど他のRDBMSへのサポート拡張予定### バージョン管理機能
+ スキーマ管理: スキーマの変更を追跡し、バージョン管理する
+ データ追跡: データの追加や更新を追跡する
+ Gitライク機能: コミット、ブランチ、マージ、タグなどのGitの主要概念をサポート### ユーザーインターフェース
+ ウェブベースUI: インタラクティブなウェブインターフェースを提供し、ユーザーが容易に操作できるようにする### データベース操作
+ スキーマ操作: スキーマの変更機能を提供
+ データイ
Go×ReactでGCSに画像をアップロードする
この記事ではGo×Reactを使って、GCSに画像データをアップロードする処理の実装方法をまとめています。
背景としては、個人開発で『自分の描いた絵をアップロードし、保存共有ができるWebサイト』の開発を行っており、そこでGCSに画像をアップロードする処理が必要だったからです。
いろいろ調べながら実装して学べることが多かったのでアウトプットとして記事を書こうと思いました!🐶
## 使用技術について
今回使用する技術は以下のものになります。
– Golang(v1.21.2)
– React(v18.2.15)
– TypeScript(v5.0.2)
– PostgreSQL(v14.9)
– GCS(Google Cloud Storage)
– axios## 前提条件
GCSにすでにbucketを作成しているものとします。bucketってなんや?
1 : 🐶 にーな
「GCSのバケットっていうのは、Google Cloud Storageの中でデータを保存するための場所だよ。」
2 : 🦊 もん
プログラミング言語 Go Java C# でHello World実行時間を仲良く競う
# はじめに
プログラミング言語 Go とJava C# とで「Hello World」コンソール出力の反復実行時間を仲良く競い合わせてみます。## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
go version go1.19.5 windows/amd64
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。# お題のソースコード
#### Java
“`Java:main.java
import java.lang.System;
/**
* プログラム型
*/
class Program
{
/**
* メイン
* @param args 引数
*/
public static
Go:ゴルーチンとチャネルによる並列処理
# はじめに
Go言語は並列処理を容易に実現するための強力な機能を備えています。
特に**ゴルーチン**(**goroutines**)という軽量スレッドの概念を使って、並行処理を実装できます。
そして、**チャネル**(**channel**)という機能を使うことで、複数のゴルーチン間でデータの受け渡しを行うことができます。
この記事では、**ゴルーチン** **チャネル** を使った並行処理の実装方法を説明します。# ゴルーチンとは
**ゴルーチン**とは、Go言語のランタイムによって管理される軽量スレッドです。
**ゴルーチン**は、スレッドよりもメモリ使用量が少なく、スレッドの切り替えにかかる時間も短いため、
多数のゴルーチンを同時に実行しても、メモリやCPUの負荷が大きく増加しないのが特徴です。# ゴルーチンの使用例
“`go
package mainimport (
“fmt”
“time”
)// 2. タスクの実行
func task(name string) {
for i := 0; i < 5; i++ { fmt.Println(na
AWS CDK for Goを使用して、Go言語で書かれたLambda関数を定期実行する
## はじめに
AWS CDK(Cloud Development Kit)は、クラウドリソースをコードで定義し、デプロイするためのオープンソースのソフトウェア開発フレームワークです。この記事では、AWS CDK for Goを使用してGo言語で書かれたLambda関数を定期的に実行するスケジュールを設定する方法を説明します。
## 前提条件
– AWSアカウントがすでに設定されていること。
– AWS CDKを操作するCLIがインストールされていること。CDKのCLIのインストールについては[こちら](https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/cli.html)をご覧ください
## 環境
– Go 1.20
## プロジェクトの初期化
新しいディレクトリを作成し、その中に移動します。
“`bash
mkdir go-lambda-cdk
cd go-lambda-cdk
“`以下のコマンドを実行して新しいCDKプロジェクトを初期化します。
“`bash
cdk init app –language=
Go:レシーバについて解説(Rubyとの違いも合わせて解説)
# はじめに
レシーバは一般的に利用される関数と違い形式がわかりづらいです。
本記事を読んでいただき、レシーバの理解に役立てていただければ幸いです。# レシーバとは
レシーバは特定の型に対するメソッドを定義する際に使用されます。
メソッドが操作する主体を指し、メソッドがどの型に属するかを定義します。# レシーバの書き方
“`go
package mainimport “fmt”
// 1. 型の定義:
// type ~ structは、Rectangle構造体を定義しています。Rectangleは長方形を表します。
type Rectangle struct {
Width, Height int
}// 2. レシーバを持つメソッドの定義:
// Rectangle構造体に対するAreaメソッドを定義しています。これは長方形の面積を計算します。
func (r Rectangle) Area() int {
return r.Width * r.Height
}func main() {
// 3. Rectangle構造体のインスタンスを作成
GoでtxtファイルをExcelファイルに変換
# 作成背景
Goの勉強としてテキストファイルからExcelファイルを作成し、そのデータを元にグラフを描画してみようと思ったので、記録のため、今回の記事を書きました。# 準備
テスト用テキストファイル
“`test.txt
商品名 値段(円)
プロテイン 3000
“`また、GoでExcelファイルを扱うために以下のライブラリを使用しました。今回、Go Modulesを利用したので、
“`
go get github.com/xuri/excelize/v2
“`
※詳しくはこちらhttps://github.com/qax-os/excelize
# 実装
“`main.go
package mainimport (
“bufio”
“fmt”
“log”
“os”
“strconv”
“strings”“github.com/xuri/excelize/v2”
)func main() {
// 読み込むテキストファイルと書き出すExcelファイルの名前を決める
var import_file, out_file string
改めて学ぶセッションベース認証[Goによる実例付き]
アプリケーションにおけるユーザー認証は、セキュリティとユーザーエクスペリエンスの核となる部分です。
この記事では、セッションベース認証(この記事ではセッション認証とします)の基本を理解し、Go言語(Golang)のを使った具体的な実装方法を解説します。標準ライブラリのみ使用してシンプルに書いてあるのでGo言語を普段使わない人も理解しやすいかと思います。# セッション認証とは?
セッション認証は、ユーザーが一度ログインすると、その後の各リクエストでユーザーを識別する方法です。
通常、セッション認証では以下のステップが含まれます。1. ユーザーはブラウザを通じてIDとパスワードを含むログインリクエストをサーバーに送信します。
2. サーバーは提供された認証情報を検証し、正しいと判断された場合にセッションを確立します。セッション情報はサーバー内とCookieに保存されます。今回はメモリに保存しますが、実際のアプリケーションではDBやその他のストレージを使用することが一般的です。
3. サーバーは、セッションが確立されたことを示すレスポンスをブラウザに送り返します。
4. ユーザーが認
GoのLambda関数のランタイムをGo1.xからprovided.al2に変更しました(Serverless Framework)
# はじめに
AWSサービスから以下のようなメッセージが来たので、Lambda のランタイムを`GO 1.x`から `provided.al2`に変更しました。
Web検索で調べたところ、SAMの記事に対して`ServerlessFramerwork(SLS)`の記事が少ないように感じたので、
その時の苦戦したところやわかりにくかったポイントをまとめておこうと思います。“`
お客様の AWS アカウントに現在 Go 1.x ランタイムを使用する 1 つ以上の Lambda 関数があることを確認しましたので、ご連絡いたします。Amazon Linux AMI のメンテナンスサポートが 2023 年 12 月 31 日に終了するのに合わせて、AWS Lambda での Go 1.x ランタイムのサポートを終了します [1]。Lambda は、provided.al2 ランタイムを使用して Go プログラミング言語を引き続きサポートします。provided.al2 ランタイムを使用すると、AWS Graviton2 プロセッサのサポートや、より小さなデプロイパッケージとより高速な
[Go]「…(ピリオド3つ)」の使い方(応用編)
# はじめに
以下の記事の応用編を書いてみました。https://qiita.com/Yashy/items/a02b74a00136dc5a42c4
# 「…」の使い方(応用編)
## インターフェース型での可変長引数
Goの可変長引数は、インターフェース型を利用することで、異なる型の引数を一つの関数で受け取ることができます。これは特に、ログ出力や汎用的な処理を行う関数を作成する際に便利です。“`go
func WriteMultipleTypes(values …interface{}) {
for _, value := range values {
fmt.Println(value)
}
}func main() {
WriteMultipleTypes(1, “two”, 3.0)
}// 実行結果
1
two
3
“`
## 外部からオプションを設定する
外部からオプションを設定する一般的な例として、設定オブジェクトや構造体を初期化する関数を考えてみましょう。このアプローチは、設定が多く、柔軟性が必要な場合に特に有用です。
“`g
[Go]不確実性なテストで使える assert.InDelta と assert.InEpsilon の使い方
# はじめに
Hello wolrd!
今日は testify パッケージの中でも特に便利な `assert.InDelta` と `assert.InEpsilon` の使い方について解説します。
これらの関数は、数値の比較テストを行う際に非常に役立ちます。特に、浮動小数点数の精度問題や、小さな誤差を許容する必要があるテストケースに適しています。## assert.InDelta の基本
assert.InDelta は、2つの数値間の差が特定の絶対値(デルタ)以内であることを検証するために使用されます。これは、特に浮動小数点数の計算結果が完全に一致しない場合に便利です。以下の例を見てみましょう。“`go
func TestInDelta(t *testing.T) {
tests := []struct {
name string
expected interface{}
actual interface{}
delta float64 // 許容可能な差分の範囲
}{
{
name: “許容範囲が0、実際の差が0”
VSCode gopls client: couldn’t create connection to server.の解決法
表題にあるエラーでめちゃくちゃハマったので、解決策を残します。
“`bash
[Error – 10:13:34 PM] gopls client: couldn’t create connection to server.
Message: Pending response rejected since connection got disposed
Code: -32097
[Error – 10:13:35 PM] The gopls server failed to initialize.
[Error – 10:13:35 PM] gopls client: couldn’t create connection to server.
Message: Pending response rejected since connection got disposed
Code: -32097
Error starting language server: Error: Pending response rejected since connection go
Goで学ぶGraphQLサーバーサイド(7)ーリゾルバの実装(応用編)2
こんにちは。
Part 7も「リゾルバの実装 – 応用編」についてです。
今回はリゾルバ分割の実装と動作確認について説明いたします。#リゾルバ分割の実装
リゾルバを分割していない今の状況ではどのような不具合があるのかを確認できたところで、いよいよ分割実装をしていきましょう。
## `gqlgen.yml`に分割設定を記述
リゾルバを分割する設定は、`gqlgen.yml`に記述します。
“`gqlgen.yml
models:
+ Repository:
+ fields:
+ owner:
+ resolver: true
+ issue:
+ resolver: true
+ issues:
+ resolver: true
+ pullRequest:
+ resolver: true
+ pullRequests:
+ resolver: true
“`今回の分割の方針は「`repository`クエリを実行して得られた`Repo
ゴールーチンのメモ(チャネルなど)
## Goroutineとは
Goroutineとは、goのステートメントで、関数を指定することによって並行実行されるもの。“`go
package mainimport (
“fmt”
“time”
)func main() {
go goroutine(“Hello!”)
hoge(“World!”)
}func goroutine(s string) {
for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } func hoge(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } > World!
> Hello!
> Hello!
> World!
> World!
> Hello!
> Hello!
> World!
> Hello!
> World!
→ 並行で実行したため、表示される順番がバ
【永久保存版】0からGo言語を勉強するならこのロードマップに従え!
![bandicam 2023-11-14 18-39-01-453.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/0372d1bc-04dc-e94f-e5ff-4a3f721667dd.jpeg)
# はじめに
こんにちは!!@Sicut_studyです!
今回は**Go言語**の個人的に良かったと思った学習方法を**Go言語を学ぶための最速ロードマップ**として記事にまとめていきます!
つい先日**技術書典**があり、改めて**Go言語**が注目されているというのを再実感しましたので記事を書くなら**今だ!!**と思いました
過去にも**0からロードマップシリーズ**は書いていますので参考にしてみてください
https://qiita.com/Sicut_study/items/78910cd8d103b8d45a73
https://qiita.com
OPA・Regoでコーディング規約が守られている事を検査する
## 概要
チームやプロジェクトで独自に定めたコーディング規約が遵守されていることを確認するために、OPA・Regoを使ってコードを検査する。Golangでの実装を想定している。
## 仕組み
まず、検査対象のコードをASTに変換する。ASTは、抽象構文木のことで、コードの構造を表現したデータ構造のこと。ASTを使うことで、コードの構造をプログラムで扱えるようになる。
Regoで記述したコーディング規約をポリシーとして、ASTをインプットとしてOPAに渡すことで、コーディング規約に違反している箇所を検出することができる。## goast
上記を簡単に実現するために、[goast](https://github.com/m-mizutani/goast)というツールを使用する。goastはユーザが定義したポリシーをもとに上記をまとめて行ってくれる。出力した結果に`pos`という名前でPos値を渡すことで、出力に違反しているコードを表示することもできる。
“`rego
res := {
“msg”: “fmt.Println is not allowed”,
GolangとCasbinでABACを実装する
# はじめに
認可専用のライブラリである[Casbin](https://casbin.org/)を使って、[ABAC](https://en.wikipedia.org/wiki/Attribute-based_access_control)を実装してみる。Casbinでは、単純にルールを羅列するのではなく、[eval()という組み込み関数](https://casbin.org/ja/docs/abac#scaling-the-model-for-complex-and-large-numbers-of-abac-rules)を使用することで、任意の認可ロジックを簡潔に組み込むことができる。なお、CasbinそのものやRBAC/ABAC等の認可の概念に関する説明は本記事ではしない。eval()では、[公式ドキュメントの例](https://casbin.org/ja/docs/abac/#scaling-the-model-for-complex-and-large-numbers-of-abac-rules)のように直接ロジックを渡すこともできるし、[`AddFunction
Go:入門者向けにポインタをコードで解説
# はじめに
Go言語のポインタの概念が分かりづらく、理解に時間を要しました。
初心者は、**文章よりもコードを書いて動かしてみる方が理解が深まると思うので**、本記事のコードを参考にしてください!# ポインタとは
ポインタは、ある値が格納されているメモリアドレスを保持する変数です。
ポインタを使用すると、直接そのメモリアドレスにアクセスして値を読み書きすることができます。
以下の演算子を使用して、ポインタを宣言します。– &演算子:変数のメモリアドレスを取得します。
– *演算子:ポインタが指すメモリアドレスの値にアクセスします。# 例:ポインタを使って値を変更する
“`go
package mainimport “fmt”
func main() {
number := 10 // 整数変数の定義
fmt.Println(“元の値:”, number) // 元の値の出力
fmt.Println(“numberのアドレス:”, &number)