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

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

関数を引数として渡す方法(Go言語)

Go言語では、関数を他の関数の引数として渡すことができます。これは高階関数(higher-order functions)と呼ばれ、関数型プログラミングの強力な機能の一つです。

### 基本的な使い方についての例

まず、関数を引数として渡す基本的な方法を見てみましょう。以下は、簡単な例です。

“`go
package main

import (
“fmt”
)

// 関数型の定義
type operation func(int, int) int

// 関数を引数に取る関数
func compute(a int, b int, op operation) int {
return op(a, b)
}

// 足し算の関数
func add(x int, y int) int {
return x + y
}

// 引き算の関数
func subtract(x int, y int) int {
return x – y
}

func main() {
a, b := 5, 3

// 足し算を実行
sum :=

元記事を表示

Go 基礎

# はじめに
初めまして!WebエンジニアになりたいK.Yです!
今回は、まだ基礎を勉強中であるGoについて書きたいと思います!
※認識間違ってたら、コメントしてくれると有り難いです:bow_tone1:

# Goのプログラムの構成
Goは、変数や関数の全てのプログラムの要素は何らかのパッケージに属しています!
その為、プログラムはパッケージの宣言から始まります。

以下のようにpackage mainと記述することで、そのファイルはメインパッケージに
関するプログラムであることを宣言しているということです。
“`
package main
“`

続いては、main関数です。
こちらはエントリーポイントと呼ばれていて、プログラムの本体となります。
何かを出力したい時は、このmain関数の中に記述します。

“`
func main() {

}
“`

# GoでHello Worldと出力してみた!
Goでは出力用の関数を纏めたパッケージが装備されているので、そのパッケージを
インポートする必要があります!

まずはパッケージのインポートをしていきます。
fmt

元記事を表示

Go言語とは

# はじめに
こんにちは!WebエンジニアになりたいK.Yです!
今回はGo言語について学んだことを書きたいと思います。
※認識が間違ってたら、コメントしてくれると嬉しいです:grinning:

# Goとは
Go言語とは、2009年にGoogleによって作られたオープンソースの静的付けプログラミング言語です。
Go言語は、コマンドツールライン、Webアプリケーション、クラウドやコンテナ技術などに使われています。
YouTubeやメルカリ、クックパッドなど、大規模なユーザー数を誇るサービスの開発に使用されています。

# Go言語のメリット
– シンプルで可読性の高いコードを書きやすい。

Goはコードを書く自由度が高くない。

そのため、誰が書いても同じ様なコードになりやすい。

複数人でコードを書いても、作業効率は落ちにくい。


– 実行速度が速い

コンパイル速度が早く、コンパイル済みのプログラム実行速度もC言語に迫る速さ。

処理が高速なので、プロダクトのパフォーマンス改善にも大きく期待できる。


– エラーがわ

元記事を表示

【GO言語】init関数の使い方

# はじめに

Go言語のinit関数についてまとめました。

## init関数とは?

アプリケーションの状態を初期化するために用いられる関数。パッケージ変数の初期化などに使われる。引数を取らず、何も値を返さない。パッケージが初期化→パッケージ内の全ての定数と変数宣言が評価→init関数の実行。

“`go
// 2番目に実行
func init() {
fmt.Println(“init”)
}

// 一番最初に実行
var a = func() int {
fmt.Println(“var”)
return 0
}()

// 最後に実行
func main() {
fmt.Println(“main”)
}
“`

これを実行すると、以下のようになります。

“`
var
init
main
“`

他にも、実際の実行が始まる前にプログラムの状態が正しいかどうかを検証または修復する用途にも使用される。

“`go
func init() {
if user == “” {
log.Fatal(“$USER not set”)

元記事を表示

3年の技術負債を解消するため、サービス全てをリプレイスし生産性とUXが爆上がりした話(第一弾)

## はじめに

![1716284384027 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3796131/d920af3b-f194-2cb2-5316-c47057dd1d79.png)

こんにちは!
株式会社BlankrでTechLeadをしている原田です。

弊社では、『[ライドリ](https://rideo.jp)』というクリエイターの活動を支援するプラットフォームを運営しています。

2021年からライドリの前身となるサービスの運用を開始し、「オンライン握手会」「SNS」「ファンクラブ」機能など、様々な機能の追加を行ってきました。

今回は、サービス開始から3年が経過した2023年に、メンバー3名で1年かけてサービスを全てリプレイスしたことについて紹介します。

リプレイス後、チームの生産性が向上・バグの問い合わせ数が減少・ページの読み込み速度が向上するなど、様々な効果が得られました。

ぜひ最後までご覧いただけたらと思います。

## 目次

– [はじめに](#はじめに

元記事を表示

How to use Enums in Golang

## Background

Imagine you’re building a Todo application using Go. Each task in your application has a status associated with it, indicating whether it’s **“completed”**, **“archived”** or **“deleted”**.

As a developer, you want to ensure that only valid status values are accepted when creating or updating tasks via your API endpoints. Additionally, you want to provide clear error messages to users if they attempt to set an invalid status apart from the valid ones.

**_Of course, you will sa

元記事を表示

golang

golangを全く知らない状態から学習しましたので、それに自分のコメントをつけたメモです。
今回は以下の3つのUdemy講座を視聴しました。どれも分かりやすい講座でした。一部goのバージョンによってはうまくいかない講座もあるのでその場合は適宜調整が必要です。(そこまで大きな調整ではありませんので、大丈夫だと思います。)

https://www.udemy.com/course/golang_concurrency/learn/lecture/36733674?start=45#questions
https://www.udemy.com/course/go-fintech/learn/lecture/12058826?start=0#questions
https://www.udemy.com/course/bitcoin-lambda-golang/learn/lecture/24927994?start=15#questions

golang学習の定番サイトである`A Tour of Go`は今回学習せずに受講しましたが、他のプログラミング言語を触った経験のある人は一部を除

元記事を表示

[Golang]Testcontainersを使ってElasticsearchの単体テストを実装する

## 本記事でやること
– [Testcontainers](https://testcontainers.com/)を使ってElasticsearchに対するテスト環境を構築する
– テスト時に用いるElasticsearchのインデックスを作成するフィクスチャを実装する
– Elasticsearchに検索リクエストを実行するメソッドの単体テストを実装する

## 対象読者
– Elasticsearchへのアクセス周りの単体テストに興味がある人
– Testcontainersを使ってみたい人

## 使用言語/ライブラリ
– Go 1.22.2
– [go-elasticsearch](https://github.com/elastic/go-elasticsearch)
– [testcontainers-go](https://github.com/testcontainers/testcontainers-go)

## 背景
データベースに依存した単体テストを実装する際、該当のデータベースの振る舞いを模倣したテストダブルを用いることがよくあります。

ただ、この方法

元記事を表示

【Go言語】スライスとポインタ

# はじめに

Goのスライスを使う上での注意点をよく忘れるので、自分でまとめました。appendやcopyなどを何も考えずに行うと、メモリリークが起きたり、意図しない動作になる可能性があります。また、v1.21以降では、slicesパッケージが追加されたので、そちらについても少し触れております。

# 例題

さて、突然ですが以下のコードを実行するとどうなると思いますか?

“`go:sample1
func main() {
slice1 := make([]int, 0, 5)
slice2 := slice1
for i := 0; i < 10; i++ { slice1 = append(slice1, i) slice2 = append(slice2, i+100) } fmt.Println("slice1 =", slice1) fmt.Println("slice2 =", slice2) } ``` [Go Playground](https://go.dev/play/p/gVXo9n1FPBB) 実行すると、以下のような結果になりま

元記事を表示

ローカルのDockerコンテナをEC2へデプロイしてみる

## やりたいこと
ローカルで構築したDockerコンテナをEC2上にデプロイして実行する

## 材料
* EC2
* FSx for windows
* Docker
* Amazon Elastic Container Registry (ECR)
* ローカルGo環境
* AWS CLI

## レシピ

### 1.AWS CLIをインストール

“`
# 例:Macでhomebrewを使用
% brew install awscli
“`

### 2.EC2を作成
![スクリーンショット 2024-05-18 11.01.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17764/db88bfdc-cea0-f680-a429-cfb8551c59d8.png)

キーペアを作成した場合はダウンロードしたpemファイルのパーミッションを変更
(ローカル環境)
“`
% chmod 400 keypar.pem
“`

### 3.必要なパッケージをインストール
(EC2)

`

元記事を表示

Go言語学習記録

## はじめに
昨年Go言語を習得しました.この記事では私がどのようにGo言語を習得したのか,参考にした本や記事,Go言語への感想などについてつらつらと書き記します.

## 動機
まず私がなぜGo言語を習得しようと思ったか,主たる動機はバックエンド開発言語のスタックを増やしたかったからです.
それまでにバックエンドの開発言語としてPHPやKotlinを使用していました.
しかしインターンなどの募集が少ないことや実行速度の遅さ,コーディングスタイルが合っていなかったことから別の言語を探していたところGo言語に出会いました.
Go言語と出会い私は一目惚れしました.
シンプルで見やすく書きやすいコード,コンパイル速度の速さ,応答速度の速さなどGo言語の特徴すべてが私にマッチしているような,そんな気分でした

https://go.dev/

## 学習
Go言語入門としてまずは公式の[A Tour of Go](https://go.dev/tour/welcome/1)から始めました
それまで.Net開発などでMicrosoftにお世話になっていたので同時に[Microsoft Lear

元記事を表示

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

# はじめに

前回は、`ls`コマンドの一部実装に取り組んでみました。今回は、`grep`コマンドの一部実装に取り組んでみます。
目標としては、
1. 検索文字列が出現する行を出力し、その検索文字列は区別できるように色づけてあげること
2. `-n`オプションで出現位置の行数も出力するようにすること

の2つを設定したいと思います。

前回の記事はこちらから

https://qiita.com/taga3_dev/items/1dd46c3593d1a414dc32

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

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

まず、1つ目の「 `my-grep sample.txt`で検索文字列が出現する行を出力すること」を実装してみます。ポイントは、`Scanner`を用いて、一行ずつテキストを読み込み、対象の文字列が含まれているか走査している点です。また、対象文字列の色付けには`fatih/color`というライブラリを拝借させていただ

元記事を表示

Go + Reactでアプリを作成してみた【Todo】

## technology used

– Go – Server
– Fiber – Go web server
– Vite – Client
– Mantine – React component library
– TypeScript – Static types

## Serverを作成する

“`NOTES.md
## Create a Server folder

mkdir Server

## initialize Go app

go mod init github.com/tomdoestech/go-react-todo

## Install Riber v2

go get -u github.com/gofiber/fiver/v2

## Create client app with Vite

yarn create vite client — –template react-ts

## Install dependencies

yarn add @mantine/hooks @mantine/core swr @primer/octic

元記事を表示

[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つ目が受け取ってきたデータを処理する部

元記事を表示

OTHERカテゴリの最新記事