- 1. IPv4 アドレスからその所属国のカントリーコードを検索するためのGo言語用モジュールを作ってみました
- 2. 重複しているデータがあればINSERTをさせないようにする[MySQL, Go]
- 3. DMMのGo言語5daysインターンが最高すぎた!
- 4. 開発効率爆上がり!Go言語×Airでホットリロードを超簡単設定
- 5. [golang]プライベート関数の定義方法
- 6. [golang]初期化関数initについて
- 7. Go言語(Golang)のスライス、マップ まとめ
- 8. Go言語(Golang) ポインター まとめ
- 9. もしPHPが使われなくなったら、どのバックエンド言語を選ぶか?
- 10. [Cloud Functions 2nd Gen.] 単一リポジトリで複数関数を管理する [Go]
- 11. 【Golang】軽量なHTTPサーバのDockerコンテナを作成
- 12. Goモジュールを作成してみた
- 13. Gemini API を Goで使ってみる
- 14. Goを試してみた①(環境構築〜Hello Worldまで)
- 15. ダーツを投げればポインタがわかる!?ポインタ入門【いらすとや図解】
- 16. エナジードリンクから学ぶインターフェース
- 17. 【Go】psqlコマンドを実行し、テストデータを作成する方法
- 18. フロントエンドエンジニアのためのGo入門:変数と関数をサクッと理解しよう!
- 19. Goのマイグレーションツールであるgooseでdockerのmysqlのマイグレーションをする方法
- 20. 初心者向け!fmt.Printfで覚えておきたいフォーマット指定のやり方
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 mainimport “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 mainimport (
“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 mainimport “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って知ってます?ほら、あの青いパ
【Go】psqlコマンドを実行し、テストデータを作成する方法
# はじめに
DBに接続したテストを実行する前に、テストデータを作成したいケースに対応する方法を記事にします# フォルダ構成
こちらの`repositories`フォルダのテストコードを参照ください
https://github.com/AppDeveloperMLLB/todo_app/tree/main/repositories`repositories/testdata`にテストで実行するsqlファイルを格納しています
テストでsqlファイルを実行するのは`main_test.go`となります# 実際のコード
実際のコードは、setupTestDataメソッドを参照してください。
(Githubのコードとは、一部、変えています)
“`go
cmd := exec.Command(
“psql”,
“-h”,
“127.0.0.1”,
“-U”,
“test”,
“-d”,
“todo_db”,
“-f”,
“./testdata/createTable.sql”)
cmd.Env = append(os.Environ(), “P
フロントエンドエンジニアのためのGo入門:変数と関数をサクッと理解しよう!
# はじめに
Goはシンプルで効率的な言語ですが、TypeScript(Javascript)の経験のあるフロントエンドエンジニアが初めて学ぶ際には、いくつかの独特なポイントで戸惑ったので記事にしました。
フロントエンドエンジニアがGoを学ぶ際につまづきやすい点をわかりやすく解説し、それぞれの言語の比較コードを示します。
この記事はA Tour of GoのBasicsの一部をピックアップしました。https://go-tour-jp.appspot.com/list
# エクスポートされた名前
Goでは、名前が大文字で始まる場合、その名前はパッケージ外から参照できる「エクスポートされた名前」になります。TypeScriptでも同様にエクスポートの概念がありますが、違いは大文字小文字によってエクスポートが決まる点です。
Goでは、大文字で始まる Name フィールドがパッケージ外から参照可能です。一方で、name のように小文字で始まるフィールドはパッケージ内でしか参照できません。“`sample.ts
export class User {
constructor(p
Goのマイグレーションツールであるgooseでdockerのmysqlのマイグレーションをする方法
# はじめに
今回はGo言語の学習で、github版のgooseでのマイグレーションをどうすればいいのか調べてもイマイチいい情報がなかったのでメモ感覚で書きます# 使っている環境
– golang 1.23
– これはmacに直接ダウンロードしました。
– docker
– mysql 8.0.34
– goose# やりたい事
マイグレーションファイルを作ってgooseでdocker上にあるmysqlに対してマイグレーションを実行させたい# やったこと
※golangのインストールやdockerでmysqlのコンテナを立ち上げる方法は割愛します(mysqlはmacに直接インストールしても問題ないです)### gooseのインストール
下記コマンドでgooseをインストールする
“`
go install github.com/pressly/goose/v3/cmd/goose@latest
“`
その後whichコマンドで確認する:::note warn
この時パスが通ってない場合はパスを通す必要あり
:::“`
which goos
初心者向け!fmt.Printfで覚えておきたいフォーマット指定のやり方
## fmt.Printfでよく使われるもの一覧
### 文字列
| verb | 内容 |
|:-:|:-:|
| %s | 文字列|
| %q | エスケープされた文字列 |#### 例
“`Go
var s1 = “文字列”fmt.Printf(“%s\n”, s1) // 文字列
s2 := `バッククオートを使った、改行や
タブが入った
文字列`fmt.Printf(“%s\n”, s2) // そのまま表示
fmt.Printf(“%q\n”, s2) // バッククオートを使った、改行や\n\tタブが入った\n\t\t文字列
“`### 整数
| verb | 内容 |
|:-:|:-:|
| %d | 整数 |
| %b | 2進数 |
| %o | 8進数 |
| %x | 16進数(小文字のa-f) |
| %X | 16進数(大文字のA-F) |#### 例
“`Go
var i = 254
fmt.Printf(“%d %b %o %x %X\n”, i, i, i, i, i) // 254 111