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

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

[Go] lsコマンドを一部実装してみる

# はじめに
Goを勉強したいので、手始めに`ls`コマンドを一部実装してみようかなと思います。今回は、`ls`でファイル名の一覧が表示されること、またオプションは、`-l`でファイルの詳細一覧が出力されることを目標として設定します。

# 実装
今回のリポジトリですmm

https://github.com/ayanami77/go-my-commands/blob/main/my-ls/main.go

では最初に、`ls`を実装していきます。ポイントは、`os`パッケージが提供している`os.Getwd()`でカレントディレクトリのパスを取得し、`os.ReadDir()`でディレクトリ内のファイルを全て返して、ファイル名を出力しているようにしている点です。

“`main.go
package main

import (
“fmt”
“os”
)

func main() {
dir, err := os.Getwd()
if err != nil {
panic(err)
}
files, _ := os.ReadDir(dir)

listFiles

元記事を表示

ローカルのAWS Lambda開発環境を整える(hot reload)

ローカルでLambdaの開発をやるために環境を整備したのでやったことを残しておきます。

zenn にも全く同じ内容を書いています。

https://zenn.dev/imishinist/articles/8ff24429f0eb41

今回作成したサンプルの全体コードはこちらのリポジトリです。

https://github.com/imishinist/lambda-sample

## できること
1. ローカルに立ち上げたDockerでAWS Lambdaを動かす
2. 手元からcurlでLambdaを呼び出す
3. ビルド時に自動でLambdaを更新する(hot-reload)

### 動かし方

Goのコード(Lambdaのハンドラ)をビルドしたいときは以下の `make` を実行する。

“`bash
make build-lambda
“`

Lambdaを立ち上げたいときは `docker-compose` で起動する。

“`bash
docker compose up -d –build
“`

## 仕組み

### AWS Lambda を

元記事を表示

Go でアプリを作成してみた【API 開発】

## Dependency Setup

① Go Moduleを初期化する
“`
go mod init example.com/myproject
“`
② Ginのインストール
“`
go get github.com/gin-gonic/gin
“`
## Imports & Data Setup

“`main.go
package main

type book struct{
ID string `json:”id”`
Title string `json:”title”`
Author string `json:”author”`
Quantity int `json:”quantity”`
}

var books = []book{
{ID: “1”, Title: “In search of Lost Time”, Author: “Marcel Proust”, Quantity: 2 },
{ID: “2”, Title: “The Great Gatsby”, Author: “Scott Fitzgerald”, Quan

元記事を表示

【初心者向け】Stripeでクレカ登録・決済・削除を実装する【Python, Go, Javascript】

こんにちは、[わいけい](https://twitter.com/yk_llm_gpt)です。
今回の記事ではStripeを使ってクレジットカード決済を実装します。

## 前置き
開発規模の大小を問わず、**実装したプロダクトで収益を得るにはユーザーからお金を払ってもらう必要があります。**
しかし、決済の仕組みを自分たちで実装するのは色々な困難が伴います。

キャッシュレス決済といえばクレジットカードですが、クレカ決済の実装には例えば下記のような課題があります。

– 実装ミスなどで、ユーザーのクレカ情報が流出すると大事故になる
– PCI DSSというセキュリティ要件を守り、決済ブランドの審査に通過するには莫大なコストがかかる

結論として、個人や小規模な企業がクレカ決済を独自実装するのはあまり現実的ではないと私は思っています。
こういった問題のソリューションとなるのがStripeです。

私のSNSアカウント等です。
今後もPython・LLM・Go・Web開発などのトピックについて発信していくのでフォローしていただけると喜びます。

X: [わいけい](https:

元記事を表示

Goでwebアプリケーションを作成してみよう! 第3回 ~フロントエンドの実装~

この記事では5回に分けてwebアプリケーションの作り方を説明していく
第1回
 [webアプリケーションの構成、仕組み](https://qiita.com/Yutosaki/items/0c6f9349b427d4aee08e “第3回”)
第2回
 [サーバー立ち上げ](https://qiita.com/Yutosaki/items/fcd773a278e9b8663f36 “第2回”)
第3回
 フロントエンドの実装(この記事)
第4回
  [バックエンドの実装](https://qiita.com/Yutosaki/items/da564b74d6fac87aa601 “第4回”)
第5回
メニュー画像の読み取り

実際に作ったアプリケーション

https://github.com/Yutosaki/WiFiRader

# やること
以下のような画面構成にするための JavaScript を書く。また、Go で作成するアプリケーションサーバーに HTTP リクエストを送る。

![今回作成した画像](https://github.com/Yutosa

元記事を表示

【Go】エラーの場合は返り値として空の構造体を返す?nilを返す?

## はじめに

以下のようなコードで、`err != nil`のとき、

ある関数では`models.Article{}`と空の構造体を返しているのに対し、

“`go
func PostArticleService(article models.Article) (models.Article, error) {
// 略
newArticle, err := repositories.InsertArticle(db, article)
if err != nil {
return models.Article{}, err
}

return newArticle, err
}
“`

別の関数では(**空のスライス`[]models.Article{}`ではなく**)`nil`を返しています。

“`go
func GetArticleListService(page int) ([]models.Article, error) {
// 略

articleList, err := repositories.SelectArtic

元記事を表示

Goでwebアプリケーションを作成してみよう! 第4回 ~バックエンドの実装~

この記事では5回に分けてwebアプリケーションの作り方を説明していく
第1回
 [webアプリケーションの構成、仕組み](https://qiita.com/Yutosaki/items/0c6f9349b427d4aee08e “第3回”)
第2回
 [サーバー立ち上げ](https://qiita.com/Yutosaki/items/fcd773a278e9b8663f36 “第2回”)
第3回
[フロントエンドの実装](https://qiita.com/Yutosaki/items/1058dea6e2246b650c7e “第3回”)
第4回
  バックエンドの実装(この記事)
第5回
メニュー画像の読み取り

実際に作ったアプリケーション

https://github.com/Yutosaki/WiFiRader

# やること
JSON 形式で送られてきた現在地と希望金額の情報から、近場のWi-Fiのある場所で、かつ希望金額以下のメニューがあるところのデータを送信する。
構成としては3つに分けられ、
1つ目が受け取ってきたデータを処理する部

元記事を表示

AWS Health 組織ビューの情報をCSV出力するCLIツールをつくりました

:::note info
本記事で紹介しているツールは AWS Health API を使用しています。AWS Health APIを使用するには、ビジネスプラン以上の AWS Support 契約が必要です。
:::

## はじめに
全国の AWS Organizaitons 管理者の皆さん、AWS Health に通知されるイベントの管理はどうされていますか? AWS を利用していると日々様々な通知が飛んでくるのではないかと思います。

これらのイベントは、システムの可用性や信頼性に影響を与える可能性があるため、適切に管理する必要があります。直近では Amazon RDS の証明書更新 (8月) や AWS Lambda の Python 3.8 ランタイムバージョンのサポート終了 (10月) など大きなイベントも待ち構えています。

組織内で多数のアカウントを管理している場合、手作業でイベントを確認し、必要な情報を収集するのはそれなりに手間がかかるのではないでしょうか。

## AWS Health Exporter という CLI ツールをつくりました

https://gi

元記事を表示

密っこくん

# 目次
[1. 概要](#1-概要)
[2. 背景](#2-背景)
[3. 技術スタック](#3-技術スタック)
[4. アプリの詳細](#4-アプリの詳細)
[5. GitHubリポジトリ](#5-githubリポジトリ)
[6. まとめ](#6-まとめ)
# はじめに
 このアプリは**Golang**と**Websocket**による**双方向通信**を学びたいというモチベーションのもと、唐突な思いつきで作成したアプリです。(現在もまだ修正中。最終的には一時的にでもデプロイしたい。)
**やさしい目**で見てもらえると嬉しいです。
 とりあえずアプリの発信のために本記事を書いてます。
**(※使用する場合はリポジトリの注意書きを参照して下さい。)**

 また双方向通信やGolangについてはまた別でまとめられればと思ってます。
(現状あまりやる気が…)
# 1. 概要
 みなさん、こんな経験ないですか?

### 学校で、授業中寝てる友達に先生が気づくように、音を立てて先生の注目を引いたりして、どうにか友達をチクりたい!

みたいな経験ありませんか?(周りにはないと言わ

元記事を表示

ミニ Abema作ってみたい

# Abemaを作ってみたい
作るならどんな感じになるか考えてみた

# スコープ
Androidのabemaアプリのミニ版(機能 超縮小版)を作成する。
Azure等のサービスを使い、インフラ・バックエンドまで簡単に構築する。

## 実装したいAbemaの機能
時間が限られているため、動画タイプは実装せず、配信型のみ実装する。
配信型で全画面表示時、画面上にコメントが表示されようにするタイプの実装を目指す。(既存abemaにない実装となる)
(niconicoの特許に抵触しないよう気をつけたい、)
コメントを打てるようにする。
ユーザーごとにidを振る。
配信が始まったときに、プッシュ通知を出せるようにする。
画質設定ができるようにする。
ユーザーIDに紐づいたマイリストを作る
リンクでシェアできるようにする
CMを定期的に流せるようにする
埋込み型の広告を表示できるようにする

# やるべきことの洗い出し
プレイストアへの登録(可能な範囲で)
広告表示の方法調査(手続きがめんどくさそうでなので、学習レベルで)
フロントエンドの実装
バックエンドの実装
インフラの構築

## 技

元記事を表示

【Go言語学習】struct{}{}

## struct{}{}
再度、なんだこりゃと思い

以前、関数の引数の定義において c <-chan struct{} という表現を知った時、メモリを消費しない表現であると認識したが、受信専用で有ったためか struct{}{} は出てこなかったようで... マップや送信専用チャネルの変数に入れる際は c chan<- struct{}{} とするようで、 意味としては struct{}型の空のインスタンス(値が何も無いので、値を管理するためのメモリを消費しない) を表現しているとのこと。 ・インスタンス自体は存在するためnilではない ・配列のノリで struct{}{}{} をやると、文法エラー ・interface{}{}も文法エラー ## mapで試す ```Go package main import "fmt" func main() { set := make(map[string]interface{}) // 要素を追加 set["item1"] = struct{}{} set["item2"] = "" set["item3"] = nil

元記事を表示

【Golang】Goroutineについて

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985550/f22aafef-3524-8098-0d36-551dc0f21a01.png)

## Goroutine

とても簡単に言うと、`Goroutine (ゴルーチン)`とは、Go言語で**並列処理**を簡単に実現するためのものです。

参考)

https://go.dev/doc/effective_go#goroutines

**並列処理**を適切に実装することで実行効率が良くなります。

具体的には、複数のCPUを利用してタスクを分散することで、全体の処理速度を高めることができます。

**3**秒かかる処理`A`と、**2**秒かかる処理`B`の2つを実装してみましょう。

まずは、`Goroutine`を使わずに直列で実装します。

“`golang:main.go
// 3秒かかる処理
func A() {
time.Sleep(3 * time.Second)
println(“A”)
}

/

元記事を表示

Go言語で可変引数の関数にスライスを展開する方法

Go言語において、可変引数の関数を扱う際、スライスを引数として、関数が可変数の引数を受け取る場合に非常に便利です。例えば、ログの出力、数値の集計、文字列の結合など、さまざまなシチュエーションで役立ちます。

### 可変引数の基本

まず、可変引数関数の基本から見ていきましょう。可変引数関数は、任意の数の引数を同じ型で受け取れる関数です。関数定義時には、パラメータの型の前に `…` を置くことで、その型の任意の数の引数を受け取ることを示します。

例:以下の max 関数は、渡された整数の中から最大値を返します。

“`go
func max(values …int) int {
maxVal := values[0]
for _, val := range values[1:] {
if val > maxVal {
maxVal = val
}
}
return maxVal
}
“`

### スライスを可変引数に展開する

次に、あるスライスから条件に合う値のみを選び出し、それを max 関数に渡す例を見てみましょう。たとえば、10以上の値

元記事を表示

JavaのOptionalをgolangにportする – Method Reference と Method values

[JavaのOptionalをgolangにportする](https://qiita.com/shinnara/items/dca2181717e72b92d10d) が他の記事に比べて見られてます。といっても3桁程度ですが。タイトル詐偽的な状況になってしまったのかなと反省してます。今回も大した事は書いてないのでゆるゆるお付き合いください。

# 前回までのあらまし
* Javaを勉強するために、golangでJavaの[Optional](https://github.com/openjdk/jdk/blob/jdk-21%2B35/src/java.base/share/classes/java/util/Optional.java#L86)を実装してみます
* Optionalをいきなり実装できないので、まず[Function](https://github.com/openjdk/jdk/blob/jdk-21%2B35/src/java.base/share/classes/java/util/function/Function.java)を実装します
* golangで[

元記事を表示

Go言語でテストごとにデータベースを空にする方法

## はじめに

今回は、ポートフォリオ開発で作成したテストの中で、DBを用いたテストでした工夫を紹介します。

今回作成したコードはGithubにpushしてあるので参考程度にどうぞ

https://github.com/piny940/portfolio

ポートフォリオはこちらから確認できます。

https://www.piny940.com

## 解決策
各テストごとにトランザクションを張り、テストが終わったらロールバックすることで、データベースのデータを空にすることができます。

まず、テスト開始時にテスト用のデータベースに接続をします。

“`go
func TestMain(m *testing.M) {
dsn := fmt.Sprintf(“user=%s password=%s host=%s dbname=%s sslmode=%s”,
os.Getenv(“DB_USER”), os.Getenv(“DB_PASSWORD”), os.Getenv(“DB_HOST”),
os.Getenv(“DB_NAME”), os.Getenv(“DB

元記事を表示

初めてのオニオンアーキテクチャ実装チャレンジ

# はじめに
はじめまして、先日、路頭に迷っていた子猫を保護して人生で初めて猫と生活を始めた、初級者エンジニアです。
依存関係の逆転?アーキテクチャパターン?って何・・・?みたいなところからスタートし、勉強のためにオニオンアーキテクチャ(的な)実装チャレンジをGo(echoフレームワーク)でしてみたので、備忘録です。

# オニオンアーキテクチャについて
オニオンアーキテクチャは、ソフトウェア開発において柔軟で維持しやすいアプリケーションを構築するための設計パターン。
このアーキテクチャの目的は、アプリケーションのコアを保護し、各層が次の層にのみ依存するようにすることで、結合を制御し、より保守性の高いアプリケーションを作ること。

※オニオンアーキテクチャを表す玉ねぎの画像([Jeffrey Palermoさんのサイトから拝借](https://jeffreypalermo.com/2008/07/the-onion-architecture-part-1/))
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazo

元記事を表示

[Go言語] Echo でルーティング

# はじめに

Go 言語のフレームワークである [Echo](https://echo.labstack.com/) を使ってバックエンドを実装する際の、ルーティング に関する備忘録です。
私はこうやったということを残すものであり、ベストプラクティスではありませんが、みなさまの参考情報となれば幸いです。

# 環境と各ツール

| | バージョン | 備考 |
| ————————————————————– | ——— | —————————————————- |
| [Go](https://go.dev/) | v1.2

元記事を表示

【Go言語学習】ポインタのレシーバの実験

レシーバがポインタとそうでないと何が違うのだろうと思ったので、
基本的には大きいデータの構造体はポインタで扱うのが良いというのと、ポインタで扱う場合は、副作用に注意する必要があるということ。
副作用は、現状アイディアが無いので、とりあえず処理時間とメモリの使用量を比べてみることに…
この実験は結論から言うと、面白くない結果です…アイディアが乏しいのが原因かな…悔しい

## ポインタの時
func (g *Group) Go(f func() error)の場合、gはポインタなので、同じオブジェクトを複数のゴルーチンで使用すると、それらのゴルーチンがオブジェクトの状態を同時に変更しようとすると競合状態が発生する可能性ある。
同じオブジェクトを複数のゴルーチンで使用する場合は、適切な同期メカニズム(例えば、ミューテックス)を使用して、同時アクセスを制御することが重要。(今回何もしていなので、何かすれば間違いなく結果は変わるでしょう)
“`Go
package main

import (
“fmt”
“runtime”
“sync”
“time”
)

type

元記事を表示

【個人開発】AIがおすすめの飲食店を教えてくれるLINEチャットボットを作りました

# AI美食探訪というアプリを開発しました

Line上でやりとりできるAIチャットアプリです。
メッセージを送信すると、条件にあったお店を紹介してくれます。
(一応テスト版という状態です。実運用での入力データを集めること、それを精度向上に役立てることを目的としています)

ここからLineの友達追加ができます。
スマホの通常のカメラで読み取れます。
![qr20240512113623589.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/473706/08192e49-ec0b-a136-9290-e4ef463bb7a0.png)

こちらからでも🙆‍♂

https://liff.line.me/1645278921-kWRPP32q/?accountId=234luzuw

ぜひ試してみて、フィードバックをいただけると大変嬉しいです。

お問い合わせ用

https://docs.google.com/forms/d/e/1FAIpQLSdLV7zaDC9U8YoiVPXwg3mpx_7pRw

元記事を表示

Goでwebアプリケーションを作成してみよう! 第1回 ~webアプリケーションとは~

この記事では5回に分けてwebアプリケーションの作り方を説明していく
第1回
 webアプリケーションの構成、仕組み(この記事)
第2回
 [サーバーの立ち上げ](https://qiita.com/Yutosaki/items/fcd773a278e9b8663f36 “第2回”)
第3回
 [フロントエンドの実装](https://qiita.com/Yutosaki/items/1058dea6e2246b650c7e “第3回”)
第4回
  [バックエンドの実装](https://qiita.com/Yutosaki/items/da564b74d6fac87aa601 “第4回”)
第5回
メニュー画像の読み取り

実際に作ったアプリケーション

https://github.com/Yutosaki/WiFiRader

# そもそもwebアプリケーションとは
webアプリケーションとは、高度な性能のwebサイトのような認識で大丈夫。

・webサイト
webサイトは静的なコンテンツが提供され、何かを読んだり、動画を視聴できたりなどの比較的単純なインタラ

元記事を表示

OTHERカテゴリの最新記事