Go関連のことを調べてみた

Go関連のことを調べてみた
目次

Go:分かりにくいContextを簡単なコードで解説

# Contextの基本
– **Contextの目的**:context.Contextは、ゴルーチンの実行に関連する設定やシグナルを伝達するためのものです。これには、処理のキャンセル、タイムアウトの設定などが含まれます。
– **キャンセルシグナルを送る**:あるゴルーチンが他のゴルーチンに「もう止めて」と伝えることができます。これは、不要な作業を止めてリソースを節約するのに役立ちます。
– **タイムアウトを設定する**:特定の時間が過ぎたら、自動的にいくつかの作業を止めるように設定できます。

# Contextの使い方
“`go
package main

import (
“context”
“fmt”
“time”
)

func main() {
// Contextを作って、3秒後に自動で止めるように設定
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()

// ここで5秒待ってからメッセージを出そうとする
select {

元記事を表示

いろんな言語比較してみた

# 軽く比較🍻
書いた見た目を比較するだけ。
実装内容は
– **文字列**の`配列(系のやつ)`の初期化、追加、末尾削除
– のディープコピー
– をフィルタするだけ
– をフィルタしつつ出力

を関数にして呼び出すものとします。まぁ準備運動ですね。👯‍♂️

言語は以下です。
筆者が扱える言語が少ないのでこれだけですが、おいおい増やしたいと思います。

– JavaScript
– Python
– Go
– Java
– Rust
– C++
– SQL
– zsh
– vimscript

# JavaScript
これがいちばんすき😎😎
“`js
/**
* test
*/
(() => {
// 配列
list = [“test”, “test”]
list.push(“add”)
list.pop(0)
// 配列を移す
_ = […list] // これは非破壊だがシャローコピー
_ = JSON.parse(JSON.stringify(list)) // これはディープコピー
_ = stru

元記事を表示

Web開発にAIを取り入れる 〜Golangの活用〜

# はじめに
AIの進化は、Web開発の新たな可能性を開いています。CloudflareのWorkers AIは、この進化を具現化し、Stable DiffusionとCode Llamaを通じてWebアプリケーションにAIの力を容易に組み込む機能を提供します。このブログでは、特にGolangを使用してこれらのAI機能を活用する方法を解説します。

## Cloudflare Workers AIについて
Cloudflare Workers AIは、Stable Diffusionによる画像生成とCode Llamaによるコード生成の2つの強力な機能を提供します。開発者は、テキストから画像を生成したり、多様なプログラミング言語でコードを生成したりすることができます。

## GolangによるWorkers AIの利用
Golangは高性能で効率的なWebサービス開発に適した言語です。ここでは、Golangを使用してCloudflareのWorkers AIにアクセスし、AI機能をWebアプリケーションに組み込む方法を紹介します。

### 1. 環境の設定
Golangの開発環境を

元記事を表示

プログラミング言語 Go Java C# で整数カウントアップ実行時間を仲良く競う

# はじめに
プログラミング言語 Go とJava C# とで整数カウントアップの反復実行時間を仲良く競い合わせてみます。コンソール出力は意外と重い処理なので、いったん素の処理でどんなものなのか検証します。

## この記事内容の作業環境
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 ar

元記事を表示

【Go+Gin+gorm】クリーンアーキテクチャでログイン機能を実装したAPI

## 保険
この記事はGoを勉強して1ヶ月くらいの奴が書いてます。
また、クリーンアーキテクチャについてわかったつもりのやつが書いてます。
ご了承ください。

## 機能
– ユーザー登録
– ログイン
– ログアウト

## クリーンアーキテクチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2932655/5e2201cd-77e3-3072-628f-208c1fbf6683.png)

## ログイン処理の流れ
理解を簡単にするために、ユーザーがログインする際の実際の処理の流れについて考えてみます。
1. ユーザーがエンドポイント“`/login“`にPOSTリクエスト
1. ルーターが“`/login“`に対応するコントローラーを呼ぶ
1. コントローラーがリクエストボディのjsonを構造体に変換してユースケースに渡す
1. ユースケースが渡された構造体の“`Email“`を引数にリポジトリを呼び出す
1. リポジトリがDBにアクセスし、“`Email“`が

元記事を表示

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 main

import (
“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 main

import “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 main

import (
“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

元記事を表示

OTHERカテゴリの最新記事