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

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

Azure AI Search機能と実装

# Azure AI Searchの概要と機能

## 目次
1. 概要
2. 機能/詳細
3. サンプルコード
4. まとめ

## 1. 概要
Azure AI Searchは、Microsoft Azureの一部であり、機械学習と自然言語処理を活用した高度な検索エクスペリエンスを提供します。企業や開発者は、このサービスを利用して、顧客が求める情報を簡単かつ正確に取得できる検索エンジンを構築できます。

Azure AI Searchは、以下のような主な特徴を備えています:
– 豊富な機能セット: テキスト検索、フィルタリング、スペルチェック、敏感情報の検出、自動補完、類似結果の提案など、様々な機能を提供します。
– AIによる向上: 高度な機械学習アルゴリズムと自然言語処理技術により、検索の精度と品質を継続的に改善します。
– スケーラビリティ: クラウドベースのサービスであるため、スケーラブルで高性能な検索エンジンを提供します。
– カスタマイズ可能: カスタムスキーマの作成、自動インデックス作成、自動スケーリングなどの機能により、個々のニーズに合わせてカスタマイズできます。

元記事を表示

LangChainで業務アプリの機能を作ろうとして学んだこと(失敗談)

初めまして。人事業界のSaaS企業でバックエンドエンジニアをしている蔭山です。

この度、私は業務の一環として3か月ほどlangChanを活用した新規機能開発を行っていました。
最終的に精度の問題で開発はストップになったのですが、初心者ながら業務で生成系AIに向き合った中で学んだことを記事にしたいと思います。

私は初心者であり生成系AIに詳しいわけではないので、あくまで新卒やインターンに生成系AI機能開発をさせる場合のイチ参考にして頂けると幸いです。
また、内容に間違いや勘違いが含まれている可能性があります。その際はコメントでご指摘くださると幸いです。

## 作成しようとした機能
弊社のサービスでは、顧客側で自由にエクセル関数のような計算式を組める機能を提供しています。
非常に便利な機能である反面、顧客にとっては使いこなすまでが難しく、必然的に社内でもお問い合わせ対応に時間を割かれてしまう状態でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605179/ecaa29f7-

元記事を表示

Windows11でGo言語開発環境構築 ~WSL2+Docker+VSCode+Remote Developmentを添えて~

## はじめに

この記事は「[Qiita Advent Calendar 2023 Go言語](https://qiita.com/advent-calendar/2023/go)」の20日目の記事です

## ゴール

Windows11上でGo言語で開発したHello Worldアプリケーションをexeとして他の方に使ってもらえる形を目指します

## 全体の流れ

1. WSL2 のインストール
1. Ubuntu の初期設定
1. Windows Terminalの設定
1. Docker のインストール
1. VSCode のインストール
1. WSL から VSCode を起動する
1. Go 開発環境を構築する
1. VSCode拡張の自動インストール
1. Gitのインストール
1. Goアプリケーションのビルド

## WSL2 のインストール

1. 管理者権限でターミナルを開く
1. `wsl –install` を実行する
1. デフォルトだと Ubuntu がインストールされる
3. インストールが完了したら、PCを再起動する

![image.

元記事を表示

WebAssembly の過去・現在・未来

## はじめに

WebAssembly (略して Wasm) では WASI や WIT、 Component Model など様々な仕様があります。
それぞれが登場した背景、モチベーションなどを理解することでなんとなく概要を掴んでいくことができるのではないかと考えたため、過去・現在・未来と時間軸で整理してみました。

まず Wasm とその特徴に関して簡単に紹介した後、Wasm の過去として生まれた背景やモチベーションを紹介します。
そして現在の Wasm がなぜ注目を集めているのか、そして現在策定中の仕様と目指している未来について紹介します。

## WebAssembly とはなにか

web-assembly-logo

WebAssembly はスタックベースの仮想マシン用バイナリ命令フォーマットの仕様です。Wa

元記事を表示

Goとvegetaで行うHTTP負荷テスト

この記事は [カバー株式会社 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/cover) の20日目です。

こんにちは。カバー株式会社エンジニアのDです。
よろしくお願いいたします。

本記事では、 [tsenart/vegeta](https://github.com/tsenart/vegeta) をライブラリとしてGoで用いての負荷試験について記載します。

前回の記事は [@kura_cvr](https://qiita.com/kura_cvr) による [ホロライブアプリのアーキテクチャ その3 ~これまでとこれから~](https://qiita.com/kura_cvr/items/67529e8e50b5283369b9) です。こちらも是非ご覧ください。

# はじめに

[tsenart/vegeta](https://github.com/tsenart/vegeta) は、HTTP負荷テストツールです。
CLIおよびGoライブラリとして利用可能です。

ライブラリとして利

元記事を表示

S3互換ストレージWasabiの内容をSendGridでメール配信してみる

# 概要

こんにちは。Wano株式会社でエンジニアをしている[@kotobuki5991](https://qiita.com/kotobuki5991) です。
この記事はWano Group Advent Calendar20223 20日目の記事です。

弊社のプロダクトで新しく実装中の機能の一部に、S3(等のストレージ)に保存されたデータを読み取りメールを送信するという要件があります。

技術選定の中で、ストレージとしてWasabiを、メール配信サービスとしてSendGridを試しに触ってみたので設定・実装などを紹介します。

# Wasabiとは?

S3 API互換性認証取得|Wasabi Hot クラウドストレージ

S3完全互換のクラウドストレージで、現在13のリージョンが使用可能です。
すでにS3を使用しているアプリケーションであれば、修正の必要なく移行することが可能です。
また、S3に対して以下のような利点があります。

– 高速
– 下り料金無料!!!

![wasabiの値段.gif](htt

元記事を表示

RCONをGoで自前実装してMinecraftサーバーに”/say Hello!”を送るまで

## はじめに

この記事は[KLab Engineer Advent Calendar 2023](https://qiita.com/advent-calendar/2023/klab) 20日目の記事です。

RCONを実装したライブラリは既存のものがすでにたくさんありますが、今回はあえて一からプロトコルを実装してみる記事となっています。

## RCONとは?

TCP/IPベースの通信を介してゲームサーバーにコマンドを送信するプロトコルです。

Minecraftのサーバーでは[Source RCON Protocol](https://developer.valvesoftware.com/wiki/Source_RCON_Protocol)をベースにしたRCONを利用してリモートでコマンドを実行できます。

なお、Minecraftに限らず、[Ark: Survival Evolved](https://store.steampowered.com/app/346110/ARK_Survival_Evolved/?l=japanese)や[Rust](https://st

元記事を表示

Writing An Interpreter In Go でインタプリタ作ってみた

::: note info
[CA Tech Lounge Advent Calendar 2023](https://qiita.com/advent-calendar/2023/catechlounge)の20日目の記事です。
:::

:::note warn
本記事は書籍から学んだインタプリタについてその概要とそれを実装に落とし込む考え方について記述しています。
詳細なコードはぜひ公式のものを見てみてください👀
:::

## はじめに・自己紹介
私はCA Tech Lounge 2期生でバックエンドの勉強をしている大学生です。
専門は機械学習ですが、CS系の学部・学科ではないため自分でCSの勉強をしてみようかなと思いインタプリタを作ってみました!

そもそもなんでインタプリタなの?と思われる方もいると思うのですが、これはCS系を専攻している友人が授業でインタプリタ・コンパイラを作成しているという話を聞いて興味を持ったからです!ちょうどGoを勉強中なのでWriting An Interpreter In Goはちょうどど真ん中な本でした。

本の概要としてはGo言語を使用してM

元記事を表示

【Go】DBのnullをJSONのundefinedで返す

# はじめに
この記事は[ディップ株式会社 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/dip-dev)の20日目の投稿です!

はじめまして。2023年10月にディップ株式会社に新卒で入社した[@Taro000](https://qiita.com/Taro000)です!
社内向けアプリのバックエンド開発をしているチームに所属しています。

# この記事について
Go言語におけるJSONのundefinedの扱いと、DBのnullの扱いについて学びがあったので共有できればと思います。

### 作るもの
この記事では、クエリパラメータperson_idを使ってpersonテーブルから人物情報を取得できるWebAPIを作ってみます。
APIGatewayとLambdaを使い、Goで実装します。(Goの実装に焦点を当てます)
– golang:1.15
– mysql:8.0.23

### 条件
– DBにNULL許容のカラムが存在する
– レスポンスのJSONとして、値がNULLのカラムはキーごと無し(un

元記事を表示

M1チップ搭載のMac & RancherDesktop環境下におけるTestcontainersを使用したテスト失敗の原因の考察とその解決策

# はじめに
こんにちは、[RetailAI Advent Calendar 2023](https://qiita.com/advent-calendar/2023/rai-adventurers) の 20日目の記事です。

昨日は[jito-20231110](https://qiita.com/jito-20231110)さんの[『Coqを試してみた』](https://qiita.com/jito-20231110/items/72b7e0b590087981013d)でした。

この記事では、MacOSとRancherDesktopを使用した環境での、Testcontainersでpostgres DBを立ててテストを行おうとした際に発生した不具合と、その解決策について解説します。

# Testcontainersとは?
公式だと「Dockerコンテナ上で動かせるものならなんでも動かせる、軽量で使い捨てのインスタンスを生成するオープンソースフレームワーク」と説明があります[1](https://testcontainers.com/)

主にテスト

元記事を表示

go言語でGoogleカレンダーを操作する便利なサンプルコード(codeを標準入力しなくてよい版)

## はじめに

go言語でGoogleカレンダーを操作する方法について、2023年12月時点の公式のクイックスタートのサンプルコードが不便だったため、本ブログではより便利なサンプルコードを紹介します。

(この投稿は[GO Inc. Advent Calendar 2023](https://adventar.org/calendars/8633)の一部です)

## クイックスタートのサンプルコードは何が面倒か

GoogleカレンダーをGO言語で操作しようとしてインターネットを検索すると、一番最初にでてくるのは公式の[クイックスタートのサンプルコード](https://developers.google.com/calendar/api/quickstart/go?hl=ja)だとおもいます。

ですが、このコード、**初回実行時に認証コードを切り取って標準入力に渡す部分がとても面倒です**。

具体的には、手順どおりに作業して、go言語のプログラムを書いて実行すると、コンソールに以下のように指示が出て、標準入力待ちになります。

“`
Go to the following

元記事を表示

【Go言語】日時の取り扱い

Goでは`time.Time`を使用して日時とタイムゾーンを扱う

### `time.Time`の取得

#### 現在時刻の取得
“`go
now := time.Now()
fmt.Println(“現在時刻:”, now)
“`

#### 特定の日時の取得
“`go
tz, _ := time.LoadLocation(“America/Los_Angeles”)
future := time.Date(2015, time.October, 21, 7, 28, 0, 0, tz)
fmt.Println(“指定日時:”, future)
“`

#### タイムゾーンの指定
“`go
jst, _ := time.LoadLocation(“Asia/Tokyo”)
jstTime := time.Date(2021, time.June, 1, 12, 0, 0, 0, jst)
fmt.Println(“JST:”, jstTime)
“`

### `time.Duration`の扱い

#### 時間の加算
“`go
fiveMinutes := 5

元記事を表示

golang.org/x/slices を使ってみる

## 皆さん、slices package 使っていますか??

Go は Ver 1.18 より generics に対応しており、それを活かした API が作成されていっています。
そのような API 群の一つに、 [golang.org/x/slices](https://pkg.go.dev/golang.org/x/exp/slices) があります(※)。
slices package は、その名の通り、slice 型のデータを取り扱う機能を提供しています。
筆者も、この package が存在することを知りながらも、実際に試すことが出来ていなかったため、
自分で試しつつこの記事を書いて情報を読者へ共有したいと思います。

※ `golang.org/x` は Go の準標準のライブラリ/ツールであり、 experimental な機能を提供しています。
この `x` から後に Go 本体と同梱されている標準 package へ採用されているものもあります。
> These repositories are part of the Go Projec

元記事を表示

golang-migrateの導入

# golang-migrate
Go製のマイグレーションツール`golang-migrate`を扱います。

https://github.com/golang-migrate/migrate

## インストール
“`bash
brew install golang-migrate
“`

“`bash
$ $ migrate -h
Usage: migrate OPTIONS COMMAND [arg…]
migrate [ -version | -help ]

Options:
-source Location of the migrations (driver://url)
-path Shorthand for -source=file://path
-database Run migrations against this database (driver://url)
-prefetch N Number of migrations to load in advan

元記事を表示

【Go言語】メモリ起因のパフォーマンス低下を解消する

Goでパフォーマンスに差があらわれがちなポイントに**スライスとマップのメモリ確保**がある。
メモリ確保を高速化する方法を説明する。

### スライスのメモリ確保を高速化する
スライスの拡張`append()`は以下のプロセスになっている
1. すでに確保済みのメモリが不足した場合は、OSに要求
1. 確保済みのものから新しい配列用にメモリを割り当て
1. 新しい配列に古い配列の内容をコピー
1. 古い配列にアクセスするスライスや変数がなくなったらメモリを解放

上記のようにメモリ不足が発生するつどOSにメモリ追加の確保を依頼しているので、あらかじめ必要な要素数が分かっている場合はサイズを指定してスライスを宣言するのが望ましい。

#### サンプル
実際にパフォーマンス計測も行った
“`go
package main

import (
“fmt”
“time”
)

func main() {
// パフォーマンス計測開始
start := time.Now()

// スライスの動的拡張
dynamicSlice := make([]int, 0)
for i

元記事を表示

【Go言語】意図的に0や空文字を使うとvalidatorが反応してしまう問題

## TL;DR

必須チェックを行う場合は構造体の変数をポインタ型にすることで0や空文字を使ってもバリデーションエラーを返さないようにできます。

“`go
type Human struct {
Name *string `validate:”required”`
Age *int `validate:”required”`
}
“`

## 遭遇した問題

Goで構造体をバリデーションを行っていたとき、Ageに0を入れるとバリデーションエラーを返してしまう問題に遭遇しました。

“`go
type Human struct {
Name string `validate:”required”`
Age int `validate:”required”`
}

func main() {
h := Human{
Name: “Taro”,
Age: 0, // 意図的に0を入れている
}
if err := validator.New().Struct(h); err != nil {
var ve validator.Valid

元記事を表示

Goで書かれたPHPアプリケーションサーバーのFrankenPHPを触ってみた

![スクリーンショット 2023-12-19 0.43.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/765794/3317b5d1-125c-60b4-9637-e522a76e57a4.png)
Goで書かれたPHPアプリケーションサーバーである[FrankenPHP](https://frankenphp.dev/)を触ってみました。
2023/12/11にバージョン1.0.0がリリースされたPHPアプリケーションサーバーです。やっと触れました。

https://frankenphp.dev/

## FrankenPHPとは
[公式](https://frankenphp.dev/docs/)より
> FrankenPHP is a modern application server for PHP built on top of the Caddy web server.

*FrankenPHPは、Caddy Webサーバー(※1)の上に構築されたPHP用のモダンなアプリケーションサ

元記事を表示

【Go言語】環境変数の活用

### 環境変数とは

* 実行時のオプションとしてではなく、プロセスが持つ変数として提供される
* オペレーティングシステムは、プログラムの実行時に環境変数のリストをプログラムに渡す
* デプロイ時に設定可能で、同一のバイナリを異なる環境(本番、テストなど)で使用する際に柔軟な設定を可能にする

### 環境変数の取得方法
2通り紹介する

#### `os`パッケージを使用する方法
一番プリミティブな方法

“`go
package main

import (
“fmt”
“os”
)

func main() {
gopath := os.Getenv(“GOPATH”)
fmt.Println(gopath)
}

“`

#### `envconfig`を使用する方法
環境変数をGoの構造体にマッピングすることができる

* 使い方
* 構造体のフィールドに`envconfig`タグを付けることで、環境変数との対応付けを行う
* `default`オプションを使用して、環境変数が設定されていない場合のデフォルト値を指定できる
* `re

元記事を表示

Rust vs. Go: Learning Dependency Injection

[Rust Advent Calendar 2023](https://qiita.com/advent-calendar/2023/rust) の投稿です。

https://qiita.com/advent-calendar/2023/rust

自己紹介です。現職は、小売の買い物体験向上に取り組む Software Engineer です。

この投稿では、本業(SRE)のかたわらで取り組む Backend について書きます。

題材は、Rust 初心者として考える Production Code です。

Production Code において、`main.rs`[^6] だけで構成することは、通常ないと思います。

従って、Architecture が必要です。

ここ数年、DDD[^1] や Clean Architecture[^2] など、色々な設計手法が話題です。
僕個人の意見として、Architecture は、テスト可能なコードであれば良いと思います。
最低限、自動テストを可能にするには、抽象化が必要になります。

“`mermaid
graph TD

元記事を表示

モックはChatGPTにサクッと作ってもらいましょう

## はじめに
こんにちわ。オルトプラスでサーバーサイドエンジニアやってます勝城です。

普段は社内プロジェクトでテックリードをしつつ、サーバーサイドエンジニアの採用担当をしております。

みなさん、ChatGPTを使っていますか?オルトプラスではaiラボというSlackチャンネルがあり、AI関する情報の共有等を積極的に行っています。

さて「モックはChatGPTにサクッと作ってもらいましょう」というタイトルにしましたが、ChatGPTでできることは自分でやる必要はなく、どんどん活用しませんかという布教記事です。

私はエンジニアですが、非エンジニアの方でもChatGPTを活用することでモックレベルなら簡単に作れてしまうでしょう。

この記事でやること

・ChatGPTを使ってローカル環境で動くモックを作る

この記事はこんな人におすすめ

・ChatGPTを活用したい方
・ChatGPTでできる一例を知りたい方
・非エンジニアで簡易なモックを作りたい方

本記事は

  • OTHERカテゴリの最新記事