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

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

ゲーム開発におけるログインボーナスAPIの仕様

# はじめに
この記事は[サイバーエージェント24卒内定者 Advent Calendar](https://qiita.com/advent-calendar/2023/ca24engineer)の18日目です。

こんにちは、都内在住の大学生をしている[Daina](https://qiita.com/nishiumidaina)です!普段はゲームの開発や研究をしています。
今回はゲームのサーバーサイド開発に焦点を当てて、ログインボーナスAPIのロジックや実装方法に関する内容を中心に取り扱います!

## プロジェクト構成
– 言語:Golang
– フレームワーク: Echo
– DB: MySQL
– ORM: gorm
– キャッシュ:go-cache

※重要なディレクトリのみ記載
“`
.
├─ api
| ├─ di: wire
| └─ presentation
| ├─ controller: ハンドリングを記述する
| ├─ middleware
| ├─ request: 自動生成
| ├─ response: 自動生成
|

元記事を表示

12/08にリリースされたFrankenPHP触ってみた

# FrankenPHPってなに?
Go言語で書かれたモダンなPHPアプリケーションサーバーだそうです。
サイトはこちら👇
https://frankenphp.dev/docs/

![スクリーンショット 2023-12-08 12.12.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14268/9daeaeaa-3cc5-6732-7bbb-ee8f94920972.png)

[ドキュメントサイト](https://frankenphp.dev/docs/)も作成されていました。

AdventCalendarの締め切りも近づいてたので、ちょっと触ってみるかということで触ってみました。

# インストール
インストールというよりは、Dockerで動かしてみることができるようです。

“`bash
$ docker run -v $PWD:/app/public \
-p 80:80 -p 443:443 \
dunglas/frankenphp
“`

Go言語で書かれ

元記事を表示

[Golang]レイヤードアーキテクチャから学ぶ密結合と疎結合

## 本記事でやること
– レイヤードアーキテクチャを題材として密結合なコードを紹介
– 密結合だとどういう問題があるのかを紹介
– 疎結合なコードに変更
– 疎結合にするとどういうメリットがあるのかを紹介

今回実装したコードはこちらのレポジトリで公開しております。

https://github.com/kurakura967/go-layered-architecture-anti-pattern

## 対象読者
– 「密結合」・「疎結合」というワードは知っているが、実際にどういう状態を指すのかわからない方
– 「密結合」だとどういう問題があるのかを知りたい方
– 「疎結合」だとどういう利点があるのかを知りたい方

## 使用言語
– Go言語 1.21.0

## 背景
システム設計やソースコードなど含め、「疎結合」に保つことが重要というのはよく耳にすると思います。
筆者の過去の経験ですが、インターネットで「密結合」や「疎結合」について調べてみても、モノに例えて説明している記事が多く、腑に落ちないことがありました。
そこで、より実務に沿った内容で密結合と疎結合について考えるこ

元記事を表示

ミーティング中を検知して周囲の人間に知らせる(1)

# ミーティング中を検知して周囲の人間に知らせる(1)

私は同居人と2人で暮らしているのですが、在宅ワークをしているとミーティングの際に不意に同居人から話しかけられたりすることがあります。
これを防ぐため、ミーティングする前には一言声をかけるのですが、こんどはミーティングが終わったことを知らせるのを忘れてずっと音を抑えたまま不便な思いをさせてしまうことが何度かありました。
この問題をシステムで解決しようと思い立ちました。

内容は長くなりそうなので2部か3部構成にします。

## アプローチ

### ミーティングかどうかを検知する方法

在宅では基本的にMeetやHaddleでミーティングを行うため、ミュート、アンミュートに限らずPCのマイクの使用を検知すれば現在がミーティング中かどうかは判断できそうです。
さらに言えば、プロセスの名前等からhaddleやMeetに入っているかどうかも検知できそうです。

### 周囲の人間に知らせる方法

これはラズパイ等のマイコンとパトランプを用意し、パトランプをピカピカさせることで周知できそうです。
また、マイコンでLAN内のサーバーをホスト

元記事を表示

GCP Contact Center AI機能と実装

# GCPのContact Center AIの概要と機能

## 概要
GCP(Google Cloud Platform)のContact Center AIは人工知能(AI)と自然言語処理(NLP)を活用したクラウドベースのコンタクトセンターソリューションです。このソリューションは、企業が顧客との対話を自動化し、効率的かつパーソナライズされたカスタマーエクスペリエンスを提供することを支援します。

## 機能
1. 対話フローマネージャー:GCPのContact Center AIは、ビジュアルなエディターやAPIを通じて対話フローの作成と管理を提供します。顧客との対話の流れや質問に基づいて対話フローを定義し、顧客が問題を解決するための情報を収集します。

2. 自然言語処理(NLP):Contact Center AIは、顧客の発言やテキストメッセージを解釈し、意図やエンティティを抽出する自然言語処理を提供します。これにより、顧客の要求や問題を正確に理解し、適切な返答やアクションを提供できます。

3. オムニチャネルサポート:GCPのContact Center AIは、電話

元記事を表示

[Go]パート3

# はじめに
訳あってGo言語を勉強することになりました。
完全に自分のメモ用です。
馴染みのない書き方を中心にメモしていきます。

## if文

“`go:main.go
package main

import “fmt”

func main() {

var hoge string = “apple”

if hoge == “apple” {
fmt.Println(“○”)
} else {
fmt.Println(“×”)
}

}

“`
結果
“`

“`
条件部分に()を付けなくて良いです。

## Switch文
“`go:main.go
package main

import “fmt”

func main() {

var hoge string = “apple”

switch hoge {
case “apple”:
fallthrough
case “coffee”:
fmt.Println(“りんご”)
fmt.Println(“コーヒー”)
default:
fmt.Println(“その

元記事を表示

GCP Duet AI for Google Cloud機能と実装

## GCPのDuet AI for Google Cloudの概要

GCPのDuet AI for Google Cloudは、Google Cloud上で提供されるAIを活用したデュエット型のサービスです。ユーザーは、自身のアプリケーションにDuet AIを組み込むことで、音声やテキストなどの入力に対して自然な対話応答を行うAIチャットボットを作成することができます。

## 機能

Duet AI for Google Cloudには以下のような機能が備わっています。

1. デュエット型AI: Duet AIは、対話の流れを理解し、質問に応じた自然な回答を生成することができます。AIモデルは、大量のデータを学習しており、高い応答品質を実現しています。

2. マルチ言語対応: Duet AIは、複数の言語に対応しています。ユーザーは異なる言語での対話インターフェースを簡単に作成することができます。

3. カスタムトレーニング: ユーザーは、独自のデータセットを使用してDuet AIをカスタムトレーニングすることができます。これにより、特定のドメインや業務に適したAIモデルを

元記事を表示

sqlboilerの使い方

# sqlboiler
アドベントカレンダー9日目は`sqlboiler`について。
sqlboilerはGoにおけるORMです。

https://github.com/volatiletech/sqlboiler

GoのORMhはGORMやsqlxなどがありますが、sqlboilerの特徴としてデータベースファーストであることが挙げられます。

## インストール
“`bash
go install github.com/volatiletech/sqlboiler/v4@latest
go install github.com/volatiletech/sqlboiler/v4/drivers/sqlboiler-mysql@latest
“`

## sqlboiler設定ファイル
ここで用いている値は先日のアドベントカレンダーGoでsqlを扱うのものに基づいています。

https://qiita.com/shuyaeer/items/8911c8ea25f4208f9cee

“`toml
[mysql]
dbname=”golang”
host=”mysq

元記事を表示

日本語プログラミング言語Mindはどこまで英語でソースコード書けるか試してみる3 – まさにGo言語風?

# はじめに
日本語プログラミング言語Mindはどこまで英語でソースコードが書けるか試してみました。前回記事で動きましたが、今回はMind開発者の@killyさんのアドバイスをいただき、よりいっそうコトの発端となったGo言語のソース風となりました。:tada::tada:

# 経緯
先日Go言語で整数をカウントアップする実行時間を計測するコードを書いていたとき、Mindを連想していました。
「ひょっとしてMindって英語でも書けるんじゃない?」
てなことから、書いてみました[前々回記事のバージョン](https://qiita.com/mylifewithviolin/items/18def3a63009d5990680)では動きませんでした。
その後の[前回記事の調整版](https://qiita.com/mylifewithviolin/items/8156ab2e5775429a18ed)で動きましたが、エントリポイントの「メイン」が残っていました。

# お題のソースコード

#### Go
コトの発端となったGo言語のソースコードは下記の感じ。
“`go:callfun

元記事を表示

HomebrewのFormulaを作成して公開する

# はじめに

自作したコマンドをhomebrewでインストールして利用できるようにするまでの流れです。

結論こうなります。
“`bash
$ brew install foobar-cli
$ foobar -v
“`

## コマンドを作成する
インストールするコマンドを作成します。
これはどの言語でもいいのですが、インストール時にbuildしたりするよりもbinにしておいたほうがすんなり導入できると思います。

前回作成したgoのreplをコマンドとしてインストールするためgithubに置きます。
適当なタグをつけ、Releasesを作成してbinファイルをアップロードしておきます。

https://github.com/runeleaf/go-repl/releases/tag/v0.1.0

コマンド側の準備はこれで終わりです。

## Formulaを作成する

brewコマンドからあたらしいFormulaを作成します。
上記のReleaseにあるappファイルのURLを控えておきます。

“`bash
$ brew create –set-name=go-re

元記事を表示

GCP Document AI機能と実装

### GCPのDocument AIの概要

GCP(Google Cloud Platform)のDocument AI(Artificial Intelligence)は、文書処理にAI技術を利用するためのクラウドサービスです。Document AIは、自然言語処理や機械学習などの先進的な技術を活用することで、大量の文書を自動的に処理・分析することができます。主な機能としては、文書のOCR(光学式文字認識)、テキスト抽出、情報の分類、自動要約、機密情報の検出などがあります。

### Document AIの機能

1. OCR(Optical Character Recognition): Document AIは、画像やスキャンされた文書からテキストを抽出するOCR機能を提供します。複数の言語に対応しており、高い精度で文字を認識できます。

2. テキスト抽出: Document AIは、文書内の特定の情報を抽出する機能も備えています。例えば、契約書からの特定の項目や注文書からの商品情報などを自動的に抽出することができます。

3. 情報の分類: Document AIは、文

元記事を表示

Go:sqlc generate コマンドによって生成された3つのGoファイル

# sqlc とは
SQLクエリから型安全なGoのコードを生成するツールです。
これにより、SQLクエリとアプリケーションコード間の不整合を減らし、データベース操作の安全性と効率を向上させることができます。

# sqlc generate とは
sqlc の主要な機能の一つで、事前に定義されたSQLクエリからGoのコードを生成します。

# sqlc generate コマンドの実行例
## ディレクトリ構成&コード
“`sh
$ tree
.
├── db
│   ├── db.go ← sqlc generateコマンドで生成されたファイル
│   ├── models.go ← sqlc generateコマンドで生成されたファイル
│   ├── create_user.sql.go ← sqlc generateコマンドで生成されたファイル
│   ├── migration
│   │   └── 001_create_users_table.up.sql
│   └── sql
│   └──

元記事を表示

Ưu điểm cửa thép vân gỗ

Hiện nay, cửa thép vân gỗ đáp ứng được các yêu cầu khắt khe lắp đặt cửa cho kết cấu nhà ở, thay thế được cho mẫu cửa gỗ tự nhiên.
Trên thị trường, các sản phẩm cửa thép vân gỗ có mức giá chỉ khoảng 70% so với mẫu cửa gỗ tự nhiên cùng loại, kích thước. Do đó, ưu điểm giá thành rẻ là điểm thu hút nhiều gia đình Việt chọn cửa thép vân gỗ trang bị cho nhà ở, thay thế cho các mẫu cửa truyền thống.
Nếu bạn đang tìm kiếm nơi bán cửa vân gỗ uy tín thì Saigondoor.vn – Một trong những nhà sản xuất và cung

元記事を表示

【Golang】Invalid go version ‘**’: must match format ** の対処法

# はじめに
こちらは、go.modのパースに関するエラーです。
コマンド以外ではgo.modを触っていなかったので対処法が分からず苦労したので、バグレポートのような感じで残しておきます。

# 原因と対処法
原因は、go.mod内で記述するgoのバージョン指定方法に誤りがあるためでした。
“` go.mod
module hoge

go 1.21.3 // ここが原因(バージョン指定方法ミス)

require (

)
“`

そのため、以下の記述方法に変更します。
“` go.mod
module hoge

go 1.21 // 変更

require (

)
“`

そうすると、エラーが発生せずに動かすことができました。

元記事を表示

[Go]パート2

# はじめに
訳あってGo言語を勉強することになりました。
完全に自分のメモ用です。
馴染みのない書き方を中心にメモしていきます。

## 型に別名

“`go:main.go
package main

import “fmt”

func main() {
type UtcTime string
var utctime UtcTime = “piyo”
fmt.Println(utctime)
}

“`
結果
“`shell
piyo
“`

“`go:main.go
package main

import “fmt”

func main() {

type UtcDate string
type UtcTime string
var hoge UtcDate = “20231208”
var piyo UtcTime = “170000”

piyo = UtcTime(hoge)
fmt.Println(piyo)

}

“`
結果
“`
20231208
“`
キャストも可能です。

## 配列

“`go:main.go
pack

元記事を表示

ory/dockertest で網羅性を取り戻す

## はじめに

この記事は、[Kyash Advent Calendar 2023](https://adventar.org/calendars/8604) 9日目の記事です。

こんにちは。Kyash でエンジニアをしている [reo](https://twitter.com/_uhzz_) です。
今年は、開発基盤チームメンバーとして[TechTalk](https://speakerdeck.com/uhzz/an-quan-niqawoxing-eruhuan-jing-gazheng-imasita-kyash-techtalk-number-6-kyashnokai-fa-wotirajian-se)に登壇デビューしたり、新機能チームに入ってゴリゴリ開発したりあっという間の一年でした。

今回は日頃のユニットテストにおける認知負荷を下げて[^1]、よりテストケースに集中できる方法を紹介します。

## 前提

この記事で扱うアーキテクチャは、DDD+オニオンアーキテクチャ+Repositoryパターンを想定しています。
掲載内容は私自身の見解であり、必ずしも所属する企業

元記事を表示

Golangを用いたゲームAPIの開発におけるアーキテクチャ

## はじめに
この記事は[サイバーエージェント24卒内定者 Advent Calendar](https://qiita.com/advent-calendar/2023/ca24engineer)の9日目です。

こんにちは、都内在住の大学生をしている[Daina](https://qiita.com/nishiumidaina)です!普段はゲームの開発や研究をしています。
今回はDDDで構築されたGolangのゲームAPIに自動生成を組み合わせたアーキテクチャについて解説します!

本記事で扱うプロジェクトは[ゲーム開発におけるのサーバー負荷と戦う工夫](https://qiita.com/nishiumidaina/items/aa48c7a4eb3d2a49dadf)でも解説しているため、興味のある方は是非ご覧ください!

## プロジェクト構成
– 言語:Golang
– フレームワーク: Echo
– DB: MySQL
– ORM: gorm
– キャッシュ:go-cache

※重要なディレクトリのみ記載
“`
.
├─ api
| ├─ di: wire
|

元記事を表示

Go(present)でプログラムが実行できるスライド作ってみる

# はじめに
スライドを作る時に、大抵はgoogleスライドかパワーポイントを使うと思います。僕もそうです。GUI操作で簡単に作れますし、多くを覚えなくても作れることはすごく楽です。
ですが、スライド上でプログラムを実行したい場面がきっとあるはずです(こじつけ)。そこでGoの`present`を使うことで、リアルタイムにプログラムを実行してみます。

## 動作イメージ
![画面収録-2023-11-25-17-imageonline.co-4052414.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1939085/c067e7f1-aa4f-b06c-9d52-14835e97318b.gif)

こんな感じで`present`を使うことで、プログラムが実行できるスライドが作れます。

## フォルダ構成
スライド上でプログラムが実行できれば目標は達成ですが、せっかくなのでスライドっぽく何枚か作りました。
“`
── .
├─ image
│ ├─ golang.png

元記事を表示

linebotをgolangで開発した際のTips

初めまして!マレーシアで大学生をしているりゅうじんと申します!
マレーシアに来てから友人との金銭管理をLINEで行いたく思いMessagingAPIを使用したので、その時得たTipsを共有したく思っていました。
その折にアドベントカレンダーの9日目が空いていたので、そこに投稿していきたいと思います。

## Messaging APIとは?
> Messaging APIは、あなたのサービスとLINEユーザーの双方向コミュニケーションを可能にする機能です。

https://developers.line.biz/ja/services/messaging-api/

LINEで受け取った何らかのアクションをきっかけにしてあなたが用意したサーバーに転送して処理を実行できるよ。(意訳)

素晴らしい機能ですね!!これだけでもbotの作り甲斐がありそうです。

さてさてTipsを共有していきたいと思います!!!準備はいいですか!?

## ローカルで開発するにはngrokを使え!
LINEはWebhookである以上、自前で建てたローカルサーバーをWebhookサーバーとして設定することがで

元記事を表示

connect-go+dockerでサーバー開発環境を構築する

本記事 `Cocone Advent Calendar 2023` 9日目の記事となります。

## はじめに

最近では様々な事情もあり、connect-goの利用を始めています。
今回は簡単な利用方法と、protocol bufferのコンパイルもDockerを利用し、すぐに開発開始できるようにしたいよね、ということで、その為に必要な作業をまとめました。
`※golang及びDockerの利用が可能、という前提で進めて行きます`

## connect-goについて

gRPC互換で、よりスリムに、よりスマートに利用できるHTTP APIライブラリです。今回はgolangで利用しますが、web/kotlin/swift/nodeなど、様々な環境への対応も進んでいます。
`Unary RPC` `Client Streaming RPC` `Server Streaming RPC` `Bidirectional Streaming RPC` へも対応しており、今回は触れませんが、各種interceptorも利用できます。

既にgRPCで構築されているシステムでも比較的容易に切り替

元記事を表示

OTHERカテゴリの最新記事