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

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

【OSS】イベント・ハンズオン向けサポートツール(スライド共有、メッセージ送信)

# はじめに

どうも、Shakkuです。

都内某高専情報科の4年生です。(2024/8/30時点)

 今回は、スライドを使用するイベントや講演会、ハンズオンなどで使用する便利なサポートツールを作成しました。
また、初めてOSSとしての公開をしてみました。(OSSの定義がちょっと曖昧なため、ちゃんとできているか不安ですが、多分みなさんの環境でも使えるはずです…)

 本アプリケーションについて、自由に使用・修正・拡張していただいて問題ありません。使用した際の感想や問題点改善点などがありましたら、お気軽にご連絡ください。(再配布に関しては一度ご連絡いただけると幸いです。)

# 経緯

 私の通っている高専では定期的に「ICT基礎Lab. for Junior」という中学生向けの技術イベントを学生主体で開催しています。私もそのイベントの運営や講師として当日や事前準備に参加しています。

 そんな中で運営している際に以下のような問題があり、私も他の運営の学生もなんとかしないとなーという状況でした。

– 正面のスクリーンやディスプレイにスライドを映しているため、作業遅めの参加者の進

元記事を表示

GOのAWS SDKでEC2のインスタンスを作成

# はじめに
GoのAWS SDKを使用してEC2のインスタンスを作成してみました。これまでも、インスタンスの起動、停止用のツールとして使用していましたが、もうちょっと深く学習してみようと思い、EC2インスタンスの作成を行ってみました。

# 環境
* Windows 11
* AWS SDK for Go v2

# 前提
AWSサービスにプログラムからアクセスするため、AWS側でAccess Key IDとSecret Access Keyを事前に作成し、~/.aws/credentialsファイルを準備しました。SDKでもcredentialsファイルからプロファイルを読み込むことができます。

【credentialsファイル】
“`
[myregion]
aws_access_key_id =
aws_secret_access_key =
“`

また、EC2で使用するKeyPaire、Subnet、SecurityGroupも事前にAWSで作成しています。プログラムで作成できますが、力不足のためや

元記事を表示

Goで黄金比ハッシュマップ

https://android.googlesource.com/kernel/common/+/refs/tags/ASB-2018-08-05_3.18-n-release/include/linux/hash.h#49

Linuxカーネルのソースに、不思議な定数があります

“`C:hash.h
#define GOLDEN_RATIO_32 0x61C88647
“`

どうやらこの数字は、2 ^ 32を黄金比で割り、符号付きで表した数とのこと

“`math
\phi = \frac{(1 + \sqrt{5})} {2} \\
“`
“`math
\frac{2^{32}} {\phi} = 2654435769.4972…
“`
2654435769を32ビット符号付き10進数にすると-1640531527
符号をプラスにして16進数で表記すると61C88647

ハッシュマップのようなデータ構造を作る際に、程よくばらけたインデックスが必要になるのですが、黄金比から導いたこの定数を用いることで、適度にばらけた良い感じの値が得られるそうです

クヌース先生

元記事を表示

ES自動生成AIを作ってた ~コード解説編~ (SignIn & SignOut)

今回は以下の拡張機能を作成したときのことについて書いていく。

https://github.com/Yutosaki/es-writer/tree/main?tab=readme-ov-file

以下の機能がどの様に動いているのかについて、それぞれコードを追いながら解説していきたいと思う。

* [SignUp(メールアドレスなどの認証も含む登録)](https://qiita.com/Yutosaki/items/5fec33696105678aa416)
* SignIn(ログイン)
* 経歴入力(自己PR、経験、今まで作った作品)
* 回答生成(埋め込み含む)
* SignOut(ログアウト)

構成は以下の様になっている。
“`bat:フロントエンド
frontend (モジュールやビルドパッケージについては省略)
├── package.json
├── pnpm-lock.yaml
├── postcss.config.js
├── README.md
├── src
│ ├── components
│ │ ├── Profile.tsx

元記事を表示

IPv4 アドレスからその所属国のカントリーコードを検索するためのGo言語用モジュールを作ってみました

![作ったモジュールのデモ用CLI](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872080/b1b67141-5220-d26b-8808-f16390db0551.png)

勉強がてら、IPv4 アドレスからその所属国のカントリーコードを検索するためのGo言語用モジュールを作ってみました(上の画像は、そのモジュールのデモ用CLIのスクリーンショット)。
せっかく作ったので、需要は無視して無謀にも公開。

[github.com/suka-test/ccipv4](https://github.com/suka-test/ccipv4)

## 作った動機とか

IPアドレスの国判定なんていうのは、いろんな手段が提供されていまして、今さら作る必要もない気もしますが。
実際、わたしもアクセスログのチェックなどに、アメリカのMaxMind社が提供している無償利用可のジオロケーションデータベース GeoLite2 Free をずっと使っていました。

[MaxMind](https://www.maxmind

元記事を表示

重複しているデータがあればINSERTをさせないようにする[MySQL, Go]

データベースのレコードの挿入を自動で行うプログラムを作っていた際に、同じデータがあったら挿入させないようにするにはどうしたらいいのかわからなかったので調べて実装してみました。

# コード
実際に実行するSQLクエリは下のようになっています。
“`sql
INSERT INTO musics (music_name, composer,createdAt,updatedAt)
SELECT ?,?,?,? WHERE NOT EXISTS (SELECT 1 FROM musics WHERE music_name = ?, AND composer = ?)
“`
これはサブクエリで同じデータがないか確認し、存在しなければ実行するように条件分岐させています。

:::note
#### サブクエリ
サブクエリとは,sqlクエリの中にsqlクエリを書くことを言います。
上のクエリでは、`WHERE`文以降にある()で囲まれている部分がそれに該当します。
:::

上のクエリにおけるサブクエリ内では、`SELECT 1`と書かれている部分があると思います。

これは、実際には以下の

元記事を表示

DMMのGo言語5daysインターンが最高すぎた!

初めて企業のインターンに参加しました。DMMさんのGo言語5daysのインターンです。今回はこのインターンの内容、またGo言語でのAPI開発で学んだTipsを中心に記事を書きます。
温かい目で見てくださると嬉しいです。記事の内容に誤りがあった場合は、いつでもご指摘ください 🙇‍♂️

## インターン概要

今回のインターンは8月5日から8月9日の5日間にわたって行われました。最終日はオフィス開催で、4日間はオンラインでの開催でした。
初日と2日目は主にライブラリの使い方を学び、残りの3日間はハンズオン でAPIのエンドポイントを実装しました。このインターンの教材はDMMさんの新卒バックエンド研修の課題として使用されているため、難易度はとても高かったです。

私はGo言語を使用した経験がありますが、本で独学という勉強の仕方だったので、少し古い情報で学んでいたこともあり、
今回最近のバージョンに追加された機能などを知ることができました。また、Go言語の勉強だけでなく、アーキテクチャやライブラリの選定理由なども紹介があり、とても実践的な内容でした。

## サポート体制

開発は難しかった

元記事を表示

開発効率爆上がり!Go言語×Airでホットリロードを超簡単設定

# `Air` を使ったGo言語のホットリロード設定ガイド

こんにちは!今回はGo言語での開発をもっと効率よくするために、[`Air`](https://github.com/air-verse/air)というツールを使ってホットリロードの環境を整える方法を紹介します。開発中にコードを編集するたびに、毎回手動でアプリケーションを再起動するのは手間ですよね。そんなときに便利なのが、この`Air`なんです!`Air`を使えば、コードの変更を自動で検知してアプリケーションを再起動してくれるので、開発がかなりスムーズになります。

DMMさんのインターンでこのツールを教えていただき、早速自分のプロジェクトにも導入してみましたが、設定がとても簡単だったので投稿いたします!(初心者🔰の記事ですので温かい目で見ていただけると嬉しいです:bow:)

## ホットリロードとは?

ホットリロードとは、コードを変更したときに自動でアプリケーションを再コンパイルして再起動する機能のことです。これによって、変更が即座に反映されるので、毎回手動で再起動する手間が省けて、作業効率がグッと上がります!

###

元記事を表示

[golang]プライベート関数の定義方法

## これはなに
この記事では、Goにおけるパッケージ内でプライベートな関数を定義する方法について説明します。Go言語では、関数名を小文字で始めることで、その関数をプライベートにし、パッケージの外部からのアクセスを防ぐことができます。これにより、パッケージ内部の実装を隠蔽し、安全性やカプセル化を高めることができます。

## 対象読者
– Go言語を使ってプログラムを開発しているエンジニア
– Goでの関数の可視性について学びたい初心者
– パッケージ設計やセキュリティに興味があるプログラマ

## ゴール
– Goにおけるプライベート関数の定義方法を理解する
– プライベート関数とパブリック関数の違いを明確にする
– パッケージ内での関数のアクセス制御の方法を学ぶ

## TL;DR
– 関数名を小文字で始めると、Goではその関数がプライベートになり、パッケージ外からはアクセスできなくなります
– 関数名を大文字で始めると、その関数はパッケージ外からもアクセス可能なパブリック関数になります

## プライベート関数の定義方法

### プライベートな関数の定義
プライベートな関数は、

元記事を表示

[golang]初期化関数initについて

## これはなに
この記事では、Goにおける`init`関数の役割と、`init`と`Init`の違いについて説明します。Go言語で開発をしている際に、`init`関数が自動的に実行される仕組みを理解し、どのように使うべきかを知ることで、より効率的に初期化処理を行えるようになります。

## 対象読者
– Go言語を使ってプログラムを開発しているエンジニア
– Goの`init`関数について学びたい初心者
– 効率的な初期化処理の方法を知りたいプログラマ

## ゴール
– Goにおける`init`関数の役割を理解する
– `init`関数と他の関数(特に`Init`)の違いを明確にする
– 適切な初期化処理の方法を学ぶ

## TL;DR
– `init`関数はGoで特別な意味を持ち、パッケージがインポートされたときに自動的に実行される初期化関数です。プログラマが直接呼び出すことはできません
– `init`関数はパッケージレベルの変数の初期化、設定ファイルの読み込み、リソースの準備などに利用されます
– 同じパッケージ内に複数の`init`関数がある場合、それらはファイルの出現順序

元記事を表示

Go言語(Golang)のスライス、マップ まとめ

### スライスの概要

スライスは、Go言語における動的な配列を扱うデータ構造です。スライスは固定長の配列と異なり、要素の追加や削除が可能で、サイズを動的に変更できます。スライスは配列への参照として実装されているため、配列の一部を取り扱うこともできます。

### スライスの宣言と初期化

スライスの宣言と初期化の方法は以下の通りです。

“`go
package main

import “fmt”

func main() {
// 空のスライスを宣言
var s1 []int
fmt.Println(s1) // []

// リテラルでスライスを初期化
s2 := []int{1, 2, 3}
fmt.Println(s2) // [1, 2, 3]

// make関数でスライスを作成
s3 := make([]int, 5) // 長さ5のスライスを作成
fmt.Println(s3) // [0 0 0 0 0]
}
“`

### スライスの操作

スライスに対する基本的な操作を以下に示します

元記事を表示

Go言語(Golang) ポインター まとめ

### ポインターの役割

1. **メモリの効率的な操作**:
ポインターを使用することで、大きなデータ構造をコピーする代わりに、そのデータ構造のメモリアドレスをコピーするだけで済みます。これにより、メモリ使用量と処理速度の面で効率が向上します。

2. **参照渡し**:
関数に引数を渡す際に、値渡しではなく参照渡しを行うことができます。これにより、関数内で元の変数の値を直接変更することが可能になります。

3. **動的メモリアロケーション**:
ポインターを使用することで、動的にメモリを割り当てたり解放したりすることができます。Goでは、`new`や`make`を使用して動的にメモリを割り当てることができます。

### ポインターの基本的な使い方

#### ポインターの宣言
ポインターは、`*`を使って宣言します。例えば、`*int`は`int`型のポインターです。
“`go
var p *int
“`

#### ポインターの初期化
変数のアドレスを取得するには、`&`演算子を使用します。
“`go
var i int = 42
p = &i

元記事を表示

もしPHPが使われなくなったら、どのバックエンド言語を選ぶか?

私はベテランのバックエンド開発者として、PHPは私のキャリアにおいて重要な役割を果たしてきました。しかし、技術の世界は日々変化しており、常に新しい挑戦に備える必要があります。では、もしPHPが今日突然消滅したら、どのバックエンド言語を選ぶでしょうか?以下が私の鋭い見解です。

## 1. Golang

まず、私は間違いなくGolang(Go言語)を選びます。なぜなら、Golangは性能が優れているだけでなく、開発体験も非常に良いからです。PHPと比べて、Golangの並行処理能力はまさに雲泥の差です。Golangのコードを書くことは、面倒な設定や終わりのないデバッグがない、楽しい旅のようです。

Golangの標準ライブラリは非常に強力で、ほぼすべての開発ニーズを満たすことができます。また、Golangの”Bring your own”アプローチは、フレームワークに縛られるのが嫌な開発者にとってまさに理想的です。各構造体のために個別のファイルを作成する必要はなく、エラーハンドリングもより直接的で透明です。要するに、Golangはコードそのものに集中できるようにしてくれます。

##

元記事を表示

[Cloud Functions 2nd Gen.] 単一リポジトリで複数関数を管理する [Go]

Cloud Functions(第二世代)のドキュメントを読んでいくと、ソースのディレクトリ構造のサンプルとして以下のような構造が出てきます。

“`
.
├── myfunction.go
├── go.mod
└── cmd/
└── main.go
“`
[Source directory structure](https://cloud.google.com/functions/docs/writing#directory-structure-go) より

ドキュメントに出てくるようなシンプルな例ならこれでも十分かもしれませんが、Cloud Functions の関数も含めてモノレポにまとめて、共通部分を切り出して…などやっていく場合、どういう構成にすれば良いか悩む人も多そうだな、と。

そこで今回、一つの例として実際に実装してみたのでシェアします。

なお、Cloud Functions の前提知識として、[前回の記事](https://qiita.com/yukia3e/items/a629ec51656493544091) もあわせて読んでい

元記事を表示

【Golang】軽量なHTTPサーバのDockerコンテナを作成

Golangの入門書を読んで何か作成してみたいと思い、どうせならGolangが得意とする軽量なコンテナを作成しました。
# ゴール
下記をゴールとしました。
– 次の機能を有する静的コンテンツを公開するHTTPサーバとする
– デフォルトで、ルートパスへのアクセスで hello ページを返す
– バインドマウントでホストの静的Webコンテンツを返す
– 任意の Content-Type を返すことが可能
– x64やarmなどのマルチプラットフォームに対応したコンテナイメージを作成してDocker Hubで公開
# 実装
まずは、Golangのソースです。
“`golang
package main

import (
“encoding/json”
“fmt”
“html”
“io”
“net/http”
“os”
“strings”
)

type Config struct {
ContentTypes map[string]string
}

func getConfig() (config Config, err error) {
jsonFi

元記事を表示

Goモジュールを作成してみた

# 背景・目的
[前回](https://qiita.com/zumax/items/040c3cce24eeb6727679)、Goについて簡単なプログラムを書いてみました。今回はGoモジュールを作成てしみます

# まとめ
下記に特徴をまとめます。

|特徴|説明|
|:–|:–|
|Goモジュールの概要|関連するパッケージをモジュールに収集し、他の開発者が使用できるようにモジュールを公開できる|
|Goモジュール公開の概要|・モジュールに含まれるパッケージを設計しコーディングする

・Go ツールを介して他のユーザーが確実に利用できるようにする規則を使用して、コードをリポジトリにコミットする

・開発者から見つけられるようにモジュールを作成し公開する

・時間の経過とともに、各バージョンの安定性と下位互換性を示すバージョン番号つき規則を使用するバージョンでモジュールを改定する|
| `go.mod`ファイルの概要|モジュールは、ルートディレクトリに`go.mod`という名前のUTF-8でエンコードされたテキストファイルにより定義される|

元記事を表示

Gemini API を Goで使ってみる

無料枠があるので、Gemini API を Goで使ってみる

Gemini API クイックスタートを参考に。

https://ai.google.dev/gemini-api/docs/quickstart?hl=ja&lang=go


# できたもの
プロンプトや画像の読み込みはコード内に直接書き込んでいます。

“`
// プロンプト: ONEPIECEの作者は?
go run main.go
ONE PIECEの作者は **尾田栄一郎** です。
“`

“`
// プロンプト: 2つの画像の違いを教えて
go run main.go
1枚目はルフィ、2枚目はゾロです。
“`

“`
// プロンプト(user): こんにちは、赤い果物は何がありますか?
// プロンプト(model): いちごやりんごがあります。
// プロンプト: その中で小さいのはどちらですか?
go run main.go
いちごはリンゴよりも小さいです。
“`

“`
// プロンプト: モンキー・D・ルフィが食べた悪魔の実について説明して
go run main.go

元記事を表示

Goを試してみた①(環境構築〜Hello Worldまで)

# 背景・目的
最近、Goに触れる機会が増えてきたので、今後、本格的に学んでいこうと思います。
本ページではGoの特徴など基本的なところを整理します。

# まとめ
下記に特徴を整理します。

|特徴|説明|
|:–|:–|
|概要|・Google がサポートするオープンソースプログラミング言語
・学びやすく、チームに最適
・組み込みの同時実行性と堅牢な標準ライブラリ
・パートナー、コミュニティ、ツールによる大規模なエコシステム|
|Goのユースケース|・Cloud & Network Services
・CLI開発
・Web Development

Development Operations & Site Reliability Engineering|
|Cloud & Network ServicesでGoを利用するメリット|・開発サイクル時間の短縮
・サーバパフォーマンスの向上
・サービス開発をサポートする強力なエコシステム
・サービス用のGo APIと、一般的なOSSライブラリを提供している|
|CLI開発でGo

元記事を表示

ダーツを投げればポインタがわかる!?ポインタ入門【いらすとや図解】

# はじめに
A Tour of Goのポインタで理解に時間がかかったのでイラストやを使って解説してみました。
メモリアドレスといった難しいワードを使わないようにしているので比較的わかりやすいかなと思っております。

https://go-tour-jp.appspot.com/moretypes/1

# 今回の実装コード
以下のコードを解説していきます。
16進数の値は状況に応じて変わる可能性があります。
“`darts.go
package main

import “fmt”

func main() {
blueArrow, redArrow := 42, 2701
blueArrowMap := &blueArrow

// blueArrow: 42
fmt.Println(“blueArrow:”, blueArrow)
// &blueArrow: 0xc000104040
fmt.Println(“&blueArrow:”, &blueArrow)
// redArrow: 2701
fmt.Println(“redArrow:”,

元記事を表示

エナジードリンクから学ぶインターフェース

# はじめに

こんにちは、皆さんエナドリ飲んでますか。

「エナジードリンクなんて、カフェインの塊じゃないか」
「そんなもの毎日飲んでたら身体に悪いぞ」
「依存症になるんじゃないのか?」

大丈夫、私はもうカフェイン依存症です☕️

今日は皆さんに、**カフェイン依存症**と**プログラミング**の意外な関係性についてお話しします。

実はこの2つには驚くほど共通点があります。例えば:

– どちらも「適度に」じゃないと危険
– 一度ハマると抜け出すのが難しい
– 周りから「それ、やりすぎじゃない?」と心配される
– 本人は「まだいける!」と思っている

最後に、

**適切に設計しないと、とんでもないことになる**

「依存」と「設計」の深いい関係に、ダイブしていきましょう。

その前に、エナジードリンク補給してきます。

**カシュウッ!!(缶を開ける音)**

# カフェイン依存症

おk、注入しました😊
本題に入っていきましょう。

まず、私が最初にハマったエナジードリンク、そう、**BlueBull**のことから話します。

BlueBullって知ってます?ほら、あの青いパ

元記事を表示

OTHERカテゴリの最新記事