- 1. 導入
- 2. 問題
- 2.0.1. for文でcontinueの理解。使用例も合わせて
- 2.0.2. Google Compute Engine(GCE)にGo(Echo)で作成したAPIをデプロイする
- 2.0.3. Go言語でREST API開発:CRUD操作を実装してみた
- 2.0.4. Go言語の構造体とインターフェースについてまとめてみた
- 2.0.5. Go言語に入門してみたので基本文法をまとめてみた
- 2.0.6. 【ハンズオン】LangChain + Goを使用した生成AIアプリケーションをつくってみよう!【LangChain/Go/RAG/Gemini】
- 2.0.7. 【Go】json.Decoderとjson.Encoder
- 2.0.8. クリーンアーキテクチャに入門してみた 後編
- 2.0.9. gRPCのバリデーションツール「protovalidate」を使ってみよう
- 2.0.10. GitHub ActionsでGolangとProtocol Buffersのコード品質を維持しよう!
- 2.0.11. Go言語の特徴
- 2.0.12. 【Go言語】パニック
- 2.0.13. AWS Lambdaを定期的に実行するためにEventBridgeを設定する [Terraformを使用]
- 2.0.14. AWS LambdaにGo言語のスクリプトをDockerイメージでデプロイする [Terraformを使用]
- 2.0.15. AWS LambdaにGo言語のスクリプトをzipファイル形式でデプロイする [Terraformを使用]
【Paiza】山折り谷折り (paizaランク A 相当)をGo「Template」で解いた【text/template】
:::note warn
この記事は、「paiza×Qiita記事投稿キャンペーン」のキャンペーン対象問題の解説記事です。
**通常の「paizaスキルチェック問題」の解答公開は禁止されています** のでご注意ください。
:::Go Templateだけでスキルチェックを突破しようとする ~~実用性0の~~ 記事2本目です。前回の記事はこちら。
https://qiita.com/Syuparn/items/de5f3a4b5bba41f4959c
# 解答
ソースコード(クリックで開く)
“`go
package mainimport (
“bufio”
“os”
“text/template”
)var tmplStr = `
{{- define “writeZero” -}}
{{- if ge (len $) 1 -}}
{{- $next := (slice $ 1) -}}
{{- template “writeZero” $next -}}
{{- print “0” –
echoを使ったAPIキー認証のサンプル
# 概要
echoの使い方を勉強してみるがてら、APIキーによる認証を作ってみようと思い取り組んでみました。
APIキーによる認証の考え方がGCPのドキュメントにまとめられていたのでリンク置いときます。https://cloud.google.com/endpoints/docs/openapi/when-why-api-key?hl=ja
# やってみた
リクエストヘッダに `X-API-KEY` としてAPIキーが付与されるものとして、curlで以下のようなリクエストを送る想定です。
“`bash:ターミナル
curl -H ‘X-API-KEY:testkey’ localhost:8080/hello
“`## echoのミドルウェアを使ってみる
“`go:main.go
package mainimport (
“net/http”“github.com/labstack/echo”
“github.com/labstack/echo/middleware”
)func main() {
e := echo.New()
// APIキーチ
【Paiza】長テーブルのうなぎ屋 (paizaランク B 相当)をGo「Template」で解いた【text/template】
:::note warn
この記事は、「paiza×Qiita記事投稿キャンペーン」の **キャンペーン対象問題** の解説記事です。
**通常の「[paizaスキルチェック問題](https://paiza.jp/challenges)」の解答公開は禁止されています** のでご注意ください。
:::# TL; DR
https://paiza.jp/works/mondai/b_rank_skillcheck_sample/long-table
“`
{{- /* 座席の初期化 */ -}}
{{- $seats := “” -}}
{{- /* nSeats <= 100 なので、100回のループをnSeats回で打ち切れば 長さ nSeats の文字列が得られる */ -}} {{- range $i, $_ := $.Looper -}} {{- if ge $i $.NSeats -}} {{- break -}} {{- end -}} {{- $seats = print $seats " " -}} {{- end -}} {{- /* グループを
A Tour of Goの個人メモ
Goを触る機会が出てきそうなので、A Tour of Goを始めました。
学習した内容をメモしていきます。# A Tour of Go
https://go-tour-jp.appspot.com/list
## パッケージ( package )
規約で、パッケージ名はインポートパスの最後の要素と同じ名前になります。 例えば、インポートパスが “math/rand” のパッケージは、 package rand ステートメントで始まるファイル群で構成します。
## factored import statement
factored の意味は、「要素化、グループ化、整理済み」
“`go:例
import (
“fmt”
“math”
)
“`## Exported names
Goでは、最初の文字が大文字で始まる名前は、外部のパッケージから参照できるエクスポート(公開)された名前( exported name )です。
## Functions
関数名の後ろに型を書きます。
“`go:例
func add(x int, y int) int {
r
【Golang 備忘録】VSCodeで”BrokenImport”が出たときに読んでほしい記事
導入
こんにちは。
Golangを学び始めて1ヶ月が経ち、ついにVSCodeでAPIサーバーを作ってみました。そこで、BrokenImport
にとても苦しまされたのでその解決策を備忘録という形で残すことにしました。
初投稿であり、読みにくいと感じられる点もあるかと思いますが、参考になれば幸いです。問題
私のAPIサーバーのディレクトリは下のようになっていました。(一部略)
api
├ cmd/
│ └ go.sum
│ └ go.mod
│ └ main.go
├ internal
│ ├ domain
│ │ └ user.go
│ │ └ works.go
│ ├ router
│ │ └ router.go
:
├ go.mod
└ go.su
for文でcontinueの理解。使用例も合わせて
## 実装
“`go
for i := 1; i <= 100; i++ { if i%3 == 0 { fmt.Println(i, "3で割り切れる数") if i%5 == 0 { fmt.Println(i, "3でも5でも割り切れる数") } } else if i%5 == 0 { fmt.Println(i, "5で割り切れる数") } else { fmt.Println(i) } } ``` 上記のようにfor文の中身をif文で出し分けしてもいいのですが、可読性が悪くなるので下記のように書き換えることができます。 ```go for i := 1; i <= 100; i++ { if i%3 == 0 && i%5 == 0 { fmt.Println(i, "3でも5でも割り切れる数字") continue } if 1%3 == 0 { fmt.Println(i, "3で割り切れる数字") continue } if i%5 == 0 {
Google Compute Engine(GCE)にGo(Echo)で作成したAPIをデプロイする
最近仕事でGCEにGoのEchoで作ったAPI資産をデプロイする必要がありました。
なんでわざわざVM?コンテナでよくない?というお話はあるのですが、色々な関係でテスト環境だけそうなってしまったので仕方がないです。
わざわざ記事に残す意味はあるかとも思いましたが、何となく今後も似たようなシチュエーションが出てきそうだったので、自分のために備忘録的な感じで残そうかと思います。
## インスタンスを立ち上げる
まずはデプロイするインスタンスを立ち上げるところです。
これは細かく書くほどでもないと思うので割愛します。
“`
# SSH
gcloud compute ssh –project [プロジェクト名] –zone [ゾーン名] [インスタンス名]# 初期化
sudo apt-get update && sudo apt-get install# 時刻の変更
sudo timedatectl set-timezone Asia/Tokyo
date“`
## Goのインストール
まずはGoをサーバーにインストールします。
“`
sudo apt
Go言語でREST API開発:CRUD操作を実装してみた
# はじめに
こんにちは、Webエンジニアの岩田史門([@SI_Monxy](https://x.com/SI_Monxy))です!
今回はずっと気になっていたGo言語に入門してみたのでREST APIの実装について記事を書いてみました!
改善点や修正点があれば、コメントにて優しくご指導いただけると嬉しいです!# 概要
この記事では、Goを使って基本的なCRUD操作を行うREST APIを構築する方法を説明します。この記事を読み終えると、Go言語で簡単なREST APIを作成し、CRUD(Create、Read、Update、Delete)操作を実装する方法が理解できます。# プロジェクトのセットアップ
まず、プロジェクトディレクトリを作成し、go modを初期化します。
“` bash
mkdir go-rest-api
cd go-rest-api
go mod init go-rest-api
“`次に、必要なパッケージをインストールします。ここでは、HTTPルーティングにgorilla/muxを使用します。
“` bash
go get -u github.
Go言語の構造体とインターフェースについてまとめてみた
# はじめに
こんにちは、Webエンジニアの岩田史門([@SI_Monxy](https://x.com/SI_Monxy))です!
今回はずっと気になっていたGo言語に入門してみたので、構造体とインターフェースについて記事を書いてみました!
改善点や修正点があれば、コメントにて優しくご指導いただけると嬉しいです!# 概要
Go言語は、オブジェクト指向プログラミング(OOP)の概念をサポートしており、構造体とインターフェースを使用することで実現できます。この記事では、Goにおける構造体とインターフェースの基本を理解し、オブジェクト指向のプログラミング方法について学びます。# 構造体とは
構造体(struct)は、フィールドの集まりを定義するための型です。構造体は、データをカプセル化し、関連するデータを一つの単位として扱うことができます。# 構造体の定義と使用
以下の例では、Person構造体を定義し、そのインスタンスを作成します。“` go
package mainimport “fmt”
// Person構造体の定義
type Person struct {
Go言語に入門してみたので基本文法をまとめてみた
# はじめに
こんにちは、Webエンジニアの岩田史門([@SI_Monxy](https://x.com/SI_Monxy))です!
今回はずっと気になっていたGo言語に入門してみたので基礎文法について記事を書いてみました!
改善点や修正点があれば、コメントにて優しくご指導いただけると嬉しいです!# 概要
Go言語(Golang)は、シンプルで効率的なプログラミング言語です。この言語は、Googleによって開発され、高いパフォーマンスと並列処理のサポートを特徴としています。本記事では、Go言語の基本的な文法と最初のプログラムの書き方について解説します。# Go言語の特徴
Go言語は以下のような特徴を持っています– シンプルな文法:コードが読みやすく、保守しやすい。
– 高いパフォーマンス:コンパイルされたバイナリは高速に動作する。
– 並列処理のサポート:goroutineを使用して並列処理を簡単に実装できる。
– 標準ライブラリが豊富:多数の標準ライブラリが用意されており、追加の依存を最小限に抑えられる。# Go言語の環境設定
Go言語を始めるためには、まず環境を設定
【ハンズオン】LangChain + Goを使用した生成AIアプリケーションをつくってみよう!【LangChain/Go/RAG/Gemini】
## はじめに
どうも、こんにちは!LLMについては特段詳しくないフツーのバックエンドエンジニアの[@オーガ](https://twitter.com/o_ga09)といいます。
今回はそんな僕が、LLMを使用した生成AIアプリケーションをつくるというハンズオン的な感じの記事にしておこうと思っています。よろしければ、最後までお付き合いください!
## 対象読者
– Geminiさわってみたい方
– Goさわってみたい方
– Gopherくんが好きな方## 目次
– [なぜ、Go + Geminiなのか?](#なぜgo–geminiなのか)
– [GoでLLMってプロダクトレベルで使われているの?Pythonじゃないの?](#goでllmってプロダクトレベルで使われているのpythonじゃないの)
– [つくるもの](#つくるもの)
– [技術構成](#技術構成)
– [LangChainでなにができる?](#langchainでなにができる)
– [ベクトル検索とは?](#ベクトル検索とは)
– [【ハンズオン】LangChainで生成AIアプリを作成する](#ハンズオ
【Go】json.Decoderとjson.Encoder
# はじめに
GoでJSONを扱う場合、最初に出会うのが`json.Marshal`と`json.Unmarshal`だと思います。しかし、これらはバッファにデータを格納したり、読み取ったりすることで実現されるのですが、`Decoder`と`Encoder`を使えば、リクエストボディのストリームから直接デコードしたり、エンコードしたりするため、一時的なバッファを作成する必要がなく、メモリ使用量を抑えることができます。
またコードも簡潔に書くことができるため可読性も上がります。
今回は、そんな`Decoder`と`Encoder`を使い方を確認します。
# MarshalとUnmarshalを使用する場合
“`go
// POST /article
func PostArticleHandler(w http.ResponseWriter, req *http.Request){// Header.GETの返り値はstringなのでAtoiで整数に変換
length, err := strconv.Atoi(req.Header.Get(“Content-Length
クリーンアーキテクチャに入門してみた 後編
# はじめに
– 前回クリーンアーキテクチャの理論的な部分を学んだので今回は実際にクリーンアーキテクチャで簡単なサンプルアプリの実装をしてみたのでその解説です
– [前回の記事](https://qiita.com/aaaasahi_17/items/b4b4d08dbad45a270bd8)
– 実装にはGo言語を使用しています# 実装
## 構成など
### 実装したサンプルアプリのリポジトリ
https://github.com/aaaasahi/go-clean-app
### 使用技術
– Go 1.21.0
– echo (https://github.com/labstack/echo)
– MySQL 8.0### ディレクトリ構成
“`
├── application # ユースケース
├── config # 各種設定値
├── domain # ビジネスロジックのコア部分(エンティティ、リポジトリインターフェース)
├── infra # データベースなど外部サービスとの通信
├──
gRPCのバリデーションツール「protovalidate」を使ってみよう
# はじめに
弊社では、Next.jsとGoを使ったWebアプリケーション開発を行っています。Go側では、Protocol Buffersのメッセージにバリデーションルールを定義するためのライブラリ「protovalidate」を利用しています。
protovalidateは、BufによるgRPCのバリデーションツールで、Protobuf Validationの後継にあたります。このツールを使うことで、protoファイル内にバリデーションルールを直接記述できます。そして、そこから自動生成されるコードを利用することで、Next.jsとGoの両方で共通のバリデーションルールを適用することができるのです。
# protovalidate とは?
protovalidate は、Buf が提供する gRPC のバリデーションツールです。Protobuf Validation の後継にあたり、proto ファイル内でバリデーションルールを定義することができます。
# protovalidate の主な特徴
– protoファイル内でデータのルールを直接定義できる
– 文字列の長さ
GitHub ActionsでGolangとProtocol Buffersのコード品質を維持しよう!
# はじめに
ソフトウェア開発においてコード品質を維持することは非常に重要です。コードの品質が低下すると、バグの発生リスクが高まり、保守性や拡張性が損なわれてしまいます。そこで、コードの品質を自動的にチェックするためのツールを導入し、CI/CD パイプラインに組み込むことが有効な対策となります。
この記事では、GitHub Actions のワークフローファイルを使って、Golang のコードとスキーマファイル(Protocol Buffers)の品質をチェックする方法を紹介します。
# ワークフローファイルの概要
以下のワークフローファイルは、2 つのジョブから構成されています。
“`yml
name: Lint for Golangon:
push:
pull_request:jobs:
golangci-lint:
runs-on: ubuntu-latest
steps:
– uses: actions/checkout@v4
– uses: golangci/golangci-lint-action@v6
Go言語の特徴
# はじめに
ソフトウェア開発の世界には、多くのプログラミング言語があります。
Python、JavaScript、C、Ruby、最近ではRustやKotlinなど、それぞれ特徴があります。
様々なプログラミング言語に触れてきました。その中でも私が特に印象に残っているGo言語について解説したいと思います。
# Go言語とは
“**Go**”という名前にもあるようにGoogleが開発した言語です。
2009年に発表され、現在では様々なサービスに利用されています。
日本のサービスだと、メルカリやクックパッドなどがあります。[^1]
![スクリーンショット 2024-06-06 160725.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809382/2075dcef-9ad5-e3ed-9f04-dfe5fde9b159.png)
# 特徴
特徴は大きく分けて3つほどあります。後ほど順に解説します。
* コンパイラ型
* 記述がシンプル
* 未使用の変数、モジュールはエラーになる## コンパイラ型
ま
【Go言語】パニック
# はじめに
Goにはtry/catchがないが、panicやrecoverをむやみにつかってはいけない。一般的には、error型で返すのが好ましい。
# panicとは
[Go Playground](https://go.dev/play/p/AQKptHYU6SO)
“`go
func main() {
fmt.Println(“a”)
panic(“foo”)
fmt.Println(“b”)
}
“`パニックが発生すると、現在の goroutine がリターンするか、recover でパニックが捕捉されるまで、パニックはコールスタックをさかのぼる。
以下はrecoverで捕捉する例である。
“`go
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println(“recover”, r)
}
}()f() // パニックが発生するfをコールする
}func f() {
fmt.Println(“a”)
panic(“foo”)
fmt.
AWS Lambdaを定期的に実行するためにEventBridgeを設定する [Terraformを使用]
## 要約
最終的なソースコード全体は以下のリンクからご確認いただけます。https://github.com/mochi-yu/qiita-material/tree/main/lambda-with-event-bridge-by-terraform
## 関連記事
Go言語で記述したスクリプトを、**AWSのLambdaにTerraformを用いてデプロイする**機会があり、その過程の試行錯誤を整理して一連の記事にまとめました。この記事はそのうちの3本目として、GoのスクリプトをAWS EventBridgeから定期実行する構成をデプロイしてみたいと思います。
– [zipファイルを用いてGo言語の処理をAWS Lambdaにデプロイする](https://qiita.com/mochi_2225/items/1b645f87148899f1bc09)
– [Dockerイメージを用いてGo言語の処理をAWS Lambdaにデプロイする](https://qiita.com/mochi_2225/items/000ee604b3a274b6b62d)
– **Even
AWS LambdaにGo言語のスクリプトをDockerイメージでデプロイする [Terraformを使用]
## 要約
最終的なソースコード全体は以下のリンクからご確認いただけます。https://github.com/mochi-yu/qiita-material/tree/main/golang-lambda-by-docker-with-terraform
## 関連記事
Go言語で記述したスクリプトを、**AWSのLambdaにTerraformを用いてデプロイする**機会があり、その過程の試行錯誤を整理して一連の記事にまとめました。この記事はそのうちの2本目として、Dockerイメージを用いてLambdaにスクリプトをデプロイしてみたいと思います。
– [zipファイルを用いてGo言語の処理をAWS Lambdaにデプロイする](https://qiita.com/mochi_2225/items/1b645f87148899f1bc09)
– **Dockerイメージを用いてGo言語の処理をAWS Lambdaにデプロイする**(この記事)
– [EventBridgeからAWS Lambdaを定期実行する処理をデプロイする](https://qiita.com/mo
AWS LambdaにGo言語のスクリプトをzipファイル形式でデプロイする [Terraformを使用]
## 要約
最終的なソースコード全体は以下のリンクからご確認いただけます。https://github.com/mochi-yu/qiita-material/tree/main/golang-lambda-by-zip-with-terraform
## 関連記事
Go言語で記述したスクリプトを、**AWSのLambdaにTerraformを用いてデプロイする**機会があり、その過程の試行錯誤を整理して一連の記事にまとめました。この記事はそのうちの1本目として、zipファイルを用いてLambdaにスクリプトをデプロイしてみたいと思います。
– **zipファイルを用いてGo言語の処理をAWS Lambdaにデプロイする**(この記事)
– [Dockerイメージを用いてGo言語の処理をAWS Lambdaにデプロイする](https://qiita.com/mochi_2225/items/000ee604b3a274b6b62d)
– [EventBridgeからAWS Lambdaを定期実行する処理をデプロイする](https://qiita.com/mochi_22