Go関連のことを調べてみた2023年08月06日

Go関連のことを調べてみた2023年08月06日

エンジニア初学者のころの勉強方法について

# はじめに
私がエンジニアとしてキャリアをスタートさせた時に行った演習課題とその解き方を記述します。
エンジニアとなった最初はHTMLとPHPから勉強を始めました。
昨今ではPHP言語が使われることは少なくなってきましたが、保守などに使うことがあること、プログラミングとはどういうものかを理解するのにコストが少ないことから、初めて触る言語としてオススメだと思います。  
私は最初の2ヶ月くらいはPHPを触り、それからGO言語やTypeScriptなどの静的言語の学習を始めました。

本稿では、お馴染みではありますが、繰り返し処理と配列について学んでいきましょう。 
PHPの繰り返し処理だけでは、面白くないので最後にGO言語を使って同じ繰り返し処理と配列を作成します。

# 準備
PHPの実行環境を準備しましょう。
今回の演習では、webページに九九を表示させることをゴールとします。

~~以下の記事を参考に環境を構築してください。~~
実行環境の記事は別途公開予定です。

# 課題
課題は以下の順番で進めていきます。
1. 1の段

元記事を表示

チーム分けアプリの開発:Elo Rating Systemによるプレイヤーのランキングと5vs5のチーム分け 1

## はじめに
この記事では、Elo Rating Systemを使用したチーム分けアプリの開発手順について解説します。Elo Rating Systemは、競技の強さを数値化するアルゴリズムで、チェスなどの競技に広く使用されています。
目標は、Elo Rating Systemを活用してプレイヤーのランキングを管理し、バランスの取れた2つのチームに分けるシステムを開発することです。

## 使用する技術
– バックエンド: Go言語を使用し、Echoフレームワークを採用
– データベース: PostgreSQL
– ORM: GORM

1.プレイヤーデータのモデル化とデータベース設計
– プレイヤーデータのモデルをGoのstructで定義
– データベースのテーブルとプレイヤーモデルを紐付ける

2.データベース接続とリポジトリ層の実装
– GORMを使ってデータベースに接続する
– プレイヤーデータを操作するためのリポジトリ層を実装

3.ユースケース層の設計と実装
– Elo Rating Systemの計算ロジックをユースケース層に実装
– プレイヤーのレーティングの取得や更

元記事を表示

Golangの基礎まとめ

# はじめに
こちらの記事は以下Udemy講座で学んだ内容をベースに作成したものです。
https://www.udemy.com/course/golang-webgosql/
より詳しく学びたい方は実際に受講いただくのがいいかと思います。
既に受講された方は復習などでお使いください。

# データをコンソールに表示
標準パッケージの`fmt`を使用する。
`Println`は最後に改行が入る。似た関数では`Print`や`Printf`がある。
“`Go
package main

import “fmt”

func main() {
fmt.Println(“Hello World”) // コンソールにHello Worldと表示される
}
“`

# Goの実行方法
## go run
簡単な実行方法。
ファイルを指定するだけでプログラムを実行できる。
“`Bash
go run ファイル名
go run main.go // 例
“`

## go build
コンパイルしたファイルを作成する。その後作成されたファイルを実行することができる。
“`Bash
g

元記事を表示

[Go言語]インストール〜実行(環境構築)

# はじめに

* 実務がフロントエンドメインになってきてるので、バックエンドのキャッチアップも行いたかった。
* スタートアッププロジェクトなど、GO言語が使われ始めてるのでやっておいて損はなさそう。
* バックエンドはJavaをやっていたので、javaにはない良さがあるといいな。

# Goのインストール

* PCはMac。homebrewをインストール済みであること。

“`
> brew install go
“`

* これだけ。パスの設定も必要なかった。バージョンが表示されればOK。

“`
> go version
go version go1.20.7 darwin/arm64
“`

# Goの実行

* `go run 実行ファイル/goファイル`
* buildで作成した実行ファイルを指定することで実行する。
* goファイルを指定した場合は、コンパイルせずに実行できる。手軽に試した場合に実施する。
* 内部的には、コンパイルファイルを一時領域に作って、終わったら削除している
* `go build ファイル名`

元記事を表示

[GCP] AI Dialogflowの機能調査x実装

# GCPのDialogflowについて

Dialogflowは、Google Cloud Platform(GCP)の一部であり、自然言語処理(NLP)と機械学習(ML)を使用して、チャットボットや会話型インターフェースを作成するための開発者向けプラットフォーム。以下では、Dialogflowの概要と主な機能について説明する。

## 概要
Dialogflowは、開発者がユーザーとの対話型インターフェースを構築するために必要なツールやAPIを提供する。このプラットフォームは、ユーザーが自然な言語で意図を伝え、回答やアクションを得ることができるAIエージェントを作成するのに役立つ。Dialogflowの主な要素は以下の通り。

– **エージェント (Agent)**: エージェントは、ユーザーとの対話を管理するためのコアコンポーネント。ユーザーが対話を開始すると、エージェントはユーザーの発話を解釈し、適切な応答を生成するためのロジックを実行する。

– **インテント (Intent)**: インテントは、ユーザーの発話とエージェントの応答の関係を定義するもの。エージェントは、ユ

元記事を表示

Go(echo)とMySQLでAPIサーバー構築してみた

# はじめに
Goを使ってみたいな〜と思っていた矢先、就職先の新人研修でAPIサーバーを構築する機会があったので、練習として簡単に作ってみました。

概要としては、以下の流れを実行するAPIサーバーを作ってみました。
1. POSTメソッドで送られてくるデータを受け取る
2. 受け取ったデータを元に、SQL側にリアクションを求める
3. 求めたリアクションによる結果をjson形式で返す

## ディレクトリ構造
以下の通り。同じディレクトリ内で作りました。
“`
.
├─ api.go
├─ main.go
├─ go.mod
└─ go.sum
“`

## データベース構造
データベース名は`sample`で、テーブル名は`employee`にしました。
“`
// データベース作成
CREATE DATABASE sample;

// 使用するデータベースの選択
USE sample;

// テーブル作成
CREATE TABLE employee (id integer PRIMARY KEY, name varchar(10));
“`

## ソースコード

元記事を表示

Terraformで作るECS × RDS × ElasticCache(Memcached)を使ったクエリキャッシュ

## はじめに

本記事は以下の記事の続編となります。RDSのクエリ結果をElasticCacheを使ってキャッシュすることで、パフォーマンス改善を行うためのサンプルアプリです。

https://qiita.com/WebEngrChild/private/b9b21c1d2d133d523389

## インフラ構成図

![名称未設定ファイル-AWS編.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1824740/0fc876c2-5d72-fdc0-b7ba-0416b6e08157.png)

:::note alert
注意点
利用するAWSの各リソースは課金対象となるものが多く含まれています。個人利用される方は特に注意してください。発生した費用に関して一切責任を負いかねます。
:::

## サンプルAPI概要

:::note info
本ハンズオンでのユースケース
*非常に遅いクエリを発行するAPIをキャッシュを用いてパフォーマンス改善する*といったケースを想定しています。
:::

元記事を表示

【図解】キャッシュ戦略って何?キャッシュを使ったクエリチューニングって何?

# 基礎知識編

Webシステム開発においてキャッシュの理解と設計は非常に重要です。

キャッシュはサーバーの負荷を軽減し、レスポンス時間を大幅に短縮する役割を果たします。頻繁にアクセスされるデータや計算結果を一時的に保管しておくことで、同じリクエストが来たときに再計算や再取得をせずにすみます。

前半の”基礎知識編”では、主にキャッシュ戦略やAWSが提供しているインメモリのキャッシュサービスについてまとめ、記事の後半の”ハンズオン編では、”MemCached”を使ったクエリチューニングを実践していきます。

## キャッシュ戦略種別

キャッシュ戦略は、システムの目的や構成、負荷の性質に応じて選択することが重要です。主に、「ローカル or リモート」、「リード or ライト」、「インライン or アサイド」の三つの軸で戦略が分類されます。それぞれの軸での選択がパフォーマンスや一貫性に大きな影響を及ぼします。

### ローカル or リモート

**ローカルキャッシュ**
一般にはブラウザのようなクライアント側にデータを一時的に保存する方法を指します。これにより、データがローカルに存

元記事を表示

Go言語向けNCMB SDKの使い方(データストアの更新と削除)

NCMBはモバイル向けのBaaS(mobile Backend as a Service)ですが、サーバー側のデータとNCMB上のデータを連係させたいというニーズは良くあります。

そんなときには各言語向けのSDKがあると便利です。サーバー向けにはRuby、Python、PHP、Java、C#のSDKがあります(すべて公式サポート対象外の、コミュニティSDKという位置づけです)。

新しくGo言語向けのSDK開発をはじめたので、その使い方を紹介します。今回はデータストアの更新と削除について解説します。

## ソースコード

ソースコードはGitHubにて公開しています。ライセンスはMIT Licenseになります。

[NCMBMania/ncmb\_go](https://github.com/NCMBMania/ncmb_go)

## インストール

SDKのインストールは下記コマンドで行います。

“`bash
go get -u github.com/NCMBMania/ncmb_go
“`

## インポート

続けてSDKをインポートします。

“`go
impo

元記事を表示

Go言語向けNCMB SDKの使い方(データストアの取り出し方)

NCMBはモバイル向けのBaaS(mobile Backend as a Service)ですが、サーバー側のデータとNCMB上のデータを連係させたいというニーズは良くあります。

そんなときには各言語向けのSDKがあると便利です。サーバー向けにはRuby、Python、PHP、Java、C#のSDKがあります(すべて公式サポート対象外の、コミュニティSDKという位置づけです)。

新しくGo言語向けのSDK開発をはじめたので、その使い方を紹介します。今回はデータの取得方法を解説します。

## ソースコード

ソースコードはGitHubにて公開しています。ライセンスはMIT Licenseになります。

[NCMBMania/ncmb\_go](https://github.com/NCMBMania/ncmb_go)

## インストール

SDKのインストールは下記コマンドで行います。

“`bash
go get -u github.com/NCMBMania/ncmb_go
“`

## インポート

続けてSDKをインポートします。

“`go
import (

元記事を表示

自分のおすすめの曲を紹介したい!!曲の紹介ができるアプリを作成しました。

# はじめに

はじめまして:raised_hands:
今回、曲を選曲できるアプリ「曲選曲」を制作しました!

曲を自由に選んで、投稿することができます。曲の幅を広げたい。未知なる曲を紹介されたい。みんなが気づいていない曲を紹介したい。そんな人におすすめです!

![スクリーンショット 2023-07-01 122721](https://github.com/ari5008/dev_frontend/assets/127650560/0b69d525-a62e-453d-97cf-1f8685f032f8)

## 作成した人
私は、現在大学4年生です。大学は文系でプログラミングに全く興味がありませんでした。
プログラミングに興味を持ったきっかけは、テレビ番組でプログラミングが特集され、パソコン一台でアプリが制作できるという点に強く関心を抱いたことです。その後すぐにprogateからはじめたのですが、これは面白いと思い、独学で学習を続けてきました。現在までphp、go、reactと順に触ってきました。今では個人制作でアプリまで作れるようになったので、ぜひ見ていってほしいです!

元記事を表示

Go言語で依存性逆転の原則(DIP)と依存性注入(DI)のコード例を書いてみた

## 依存性逆転の原則(DIP)と依存性注入(DI)の活用
プログラミングにおいて、依存性逆転の原則(Dependency Inversion Principle, DIP)と依存性注 (Dependency Injection, DI)は、コードの保守性や拡張性を高めるために活用される原則です。ここではDIPとDIを使用して、クラス間の依存関係をより柔軟に管理する方法について説明します。

## シンプルなシナリオ
まずは、シンプルなシナリオを考えてみます。二つの異なるパッケージ(PackageAとPackageB)があり、それぞれにいくつかのクラスが存在しています。PackageAのクラスはPackageBのクラスに依存しているという状況を考えてみます。

具体的には、PackageAのStructAがPackageBのStructBに依存しているとしましょう。この依存関係を依存性逆転の原則を用いて解決し、依存性注入によって柔軟な設計を実現します。

“`Go
package PackageA

import “PackageB” // PackageBに依存している

// P

元記事を表示

Go言語向けNCMB SDKの使い方(データストアの保存)

NCMBはモバイル向けのBaaS(mobile Backend as a Service)ですが、サーバー側のデータとNCMB上のデータを連係させたいというニーズは良くあります。

そんなときには各言語向けのSDKがあると便利です。サーバー向けにはRuby、Python、PHP、Java、C#のSDKがあります(すべて公式サポート対象外の、コミュニティSDKという位置づけです)。

今回はGo言語向けのSDK開発をはじめたので、その使い方を紹介します。まずはデータストアへのデータ保存についてです。

## ソースコード

ソースコードはGitHubにて公開しています。ライセンスはMIT Licenseになります。

[NCMBMania/ncmb\_go](https://github.com/NCMBMania/ncmb_go)

## インストール

SDKのインストールは下記コマンドで行います。

“`bash
go get -u github.com/NCMBMania/ncmb_go
“`

## インポート

続けてSDKをインポートします。

“`go
import

元記事を表示

Go言語で昔懐かしのPongを作ってみた話 – ゴール判定と得点表示の追加

前回の記事では、Go言語とEbitenを使ってシンプルなPongゲームの作成について記載しました。
今回はそのコードにゴール判定と得点表示を追加したので記載します。

## 使用するバージョン
– Go言語: 1.16
– Ebiten: v2

## 変更したコードの解説

以下に、変更を加えたコードを示します。各部分の詳細は後ほど説明します。

### Game構造体の定義
Game構造体にプレイヤーのスコアを保持する新しいフィールドを追加しました。

“`go
type Game struct {
ballPositionX, ballPositionY float64 // ボールの位置
ballDX, ballDY float64 // ボールの移動速度
paddle1Y, paddle2Y float64 // パドルの位置
player1Score, player2Score int // プレイヤーのスコア
}
“`

### Updateメソッド
ゴール判定を追加し、ボールが左右の壁に当たったとき

元記事を表示

【Go】ログイン機能でウェブアプリを作ってみる(7)

こんにちは。

Part 7は本登録 /auth/register/completeについてです。

# 今回の目標
– 本登録を実装する!

では、仮登録時と同じようにざっと確認していきましょう。

# 全体の流れの確認

– 仮登録 /auth/register/initial
– クライアントからemail, passwordを受け取る
– email宛に本人確認トークンを送信する
– 本登録 /auth/register/complete
– クライアントからemailと本人確認トークンを受け取る
– ユーザーの本登録を行う
– ログイン /auth/login
– クライアントからemail, passwordを受け取る
– 認証トークンとしてJWTを返す
– ユーザー情報の取得 /restricted/user/me
– クライアントからJWTを受け取る
– ユーザー情報を返す

では、本登録にはどんな機能が必要になるでしょうか。

# 必要な機能を考えよう!

– emailとトークンを受け取り、バリデーショ

元記事を表示

dindでsqlc+dockertest

この抜粋の内容は次のとおりです。

– 環境構築
– sqlc
– dockertest
– go test

“`mermaid
flowchart LR
VSCode
dind[“dind
postgres”]
devcontainer[“devcontainer
Go”]
VSCode –>|go test| devcontainer –>|query| dind
“`

さらに詳しく知りたい方は読み続けてください。

2023年8月1回目です。

[sqlc](https://github.com/sqlc-dev/sqlc) + [dockertest](https://github.com/ory/dockertest) についてです。

日々、database に悩まされます。例えば、query の tuning など。

また、developer が好む ORM は、query が隠蔽されるため、どんな query なのか、認識するのに時間が必要な場合が多いです。

slow query の場合、どんな

元記事を表示

Go言語で昔懐かしのPongを作ってみた話

## はじめに
前回は画面上でボールが動くだけの処理について記載しましたが、
ボールが動くのであれば、昔懐かしのpongのようなホッケーゲームができると思い作成しました。
以下はソースについて記載します。

## 必要なパッケージのインポート

“`go
import (
“image/color” // 色を扱うためのパッケージ
“log” // ロギングを行うためのパッケージ

“github.com/hajimehoshi/ebiten/v2” // Ebitenのパッケージ
“github.com/hajimehoshi/ebiten/v2/ebitenutil” // Ebitenのユーティリティパッケージ
)
“`

## 定数の定義

“`go
const (
screenWidth, screenHeight = 640, 480 // 画面の幅と高さ
paddleWidth, paddleHeight = 20, 80 // パドルの幅と高さ
ballSize = 20 // ボールの大きさ
pad

元記事を表示

aws-sdk-go Dynamodb PutItem Err: ValidationException について

# はじめに
初投稿になるので何か指摘等あればよろしくお願いします。

# このエラーについて (ValidationException)
Local環境でsamを利用してAPI経由でLambdaからDockerで建てたLocalのDynamodbにアクセスしている状況です。
Tableはaws-cliで作成し、lambdaからPutItemした時に起きたエラーです。

[AWSの公式](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Programming.Errors.html)によると、
> このエラーは、必須パラメータが指定されていない、値が範囲外である、データ型が一致しない、などいくつかの理由で発生します。エラーメッセージに、エラーを引き起こしたリクエストの特定部分に関する詳細が含まれています。

# 結論
Goの構造体の値がエクスポートされておらず、定義されていない状態でした。
なのでデータ型が一致せずにエラーが出たということです。

Dynamodbの項目が小文字から始まる場合、

元記事を表示

【Golang】 基礎

## 変数の省略定義
“`golang:
// 型は自動で推測される
name := “John”

// 以下と同じ
var name string
name = “John”
“`

## 名前付き戻り値
戻り値を変数として定義しておくことで、return のみで返却できる
“`go:
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum – x
return
}

func main() {
a, b := swap(10, 7)
fmt.Println(a, b)
}
“`

## Defer
defer へ渡した関数の実行を、呼び出し元の関数の終わり(returnする)まで遅延させる。
defer へ渡した関数が複数ある場合、その呼び出しはスタック( stack )されます。 呼び出し元の関数がreturnするとき、 defer へ渡した関数は LIFO(last-in-first-out) の順番で実行されます。

“`go:
fu

元記事を表示

【Go】POSTのAPI作成

# 作るもの
– NameとEmailをPOSTで送り、それに基づくレスポンスを返すようなAPI(Go言語)。
– POST以外のメソッドは受け付けないようにする。

![スクリーンショット 2023-08-01 16.51.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1850625/7892ba22-966a-0c1f-dfe3-39b947535344.png)

![スクリーンショット 2023-08-01 16.51.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1850625/989eedeb-d34e-366a-61d3-b035247d2b1f.png)

# 実装
“`go:main.go
package main

import (
“encoding/json”
“fmt”
“log”
“net/http”
)

// RequestBody はPOSTリクエストのJSONデー

元記事を表示

OTHERカテゴリの最新記事