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

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

簡単なAPIを作ってみたまとめ

# 簡単なAPIを作ってみた

APIについて色々読んだりしてみたものの、設計ルールをがっつり盛り込んでAPIを設計するほどのアイデアが出てこなかったのでまずはAPIを作る事に慣れようの回とした。

今回はローカルホストだけどこんな感じに返ってくるAPIを作ってみた。

# 参考リンク

今回はこちらをメインに参考

https://qiita.com/entaku0818/items/c29add790718c215381e

https://chicog.me/posts/m30-7wf2g6

Go公式で参考にしたページ

https://pkg.go.dev/net/http

APIの設計ルール諸々紹介されている記事

https://qiita.com/kazuki_tachikawa/items/7dab01

元記事を表示

GoでHTTPサーバーをゼロから構築する方法

## はじめに

最近、Go言語のシンプルさと高いパフォーマンスに興味を持ったため、
試しにHTTPサーバーを構築してみました。

## 1.Goのインストール
Go言語は、公式サイトから各OSに合わせたインストーラーを使用して簡単にインストールできます。

https://go.dev/dl/

私はMacを使用しているので、Macのインストーラーを使用しました。
このコマンドでバージョン情報が表示されれば準備完了です。

“`shell
% go version
go version go1.23.1 darwin/amd64
“`

## 2. Goプロジェクトの作成
Goプロジェクトの依存関係管理には、Go Modulesを使用するのが一般的です。
ここでは、Goプロジェクトのディレクトリを作成し、初期化する手順を説明します。
まず、新しいGoプロジェクト用のディレクトリを作成します。

“`shell
% mkdir go-http-server
% cd go-http-server
“`

次に下のコマンドを実行してプロジェクトをGoモジュール化します。

`

元記事を表示

表面的にサクッと理解するGo言語(他言語を知っている人向け)

※ この辺の知識が特別な説明なく登場します
* 構造体
* ポインタ
* 抽象データ型(interface)
* ジェネリクス

etc.

# ざっくりとした概要
* 静的型付け言語
* クロスコンパイルが可能
* C と Java を足して2で割った感じ(個人的主観)
* プリプロセッサはない
* コンパイラはGo言語の公式コンパイラとGCC版がある(llgo というLLVMベースのものもあるらしい)
* 名前的型付け(≠構造的型付け)
* キャメルケースを使った命名
* 各命名における頭文字の大文字/小文字でスコープの制御を行う
* インラインアセンブリは書けないが、Goアセンブリというちょっと特殊なアセンブリを使った実装も可能
* 構造体や配列などのオブジェクトは基本的にミュータブル
* 関数型スタイルのコードはちょっと書きづらい(最近は変わりつつもある)

# Hello World
“`main.go
package main

import “fmt”

func main() {
fmt.Println(“Hello, World!”)
}
“`

# 実行方法

元記事を表示

LayerX初開催!ソフトウェアエンジニアサマーインターンが楽し過ぎた!!!

## はじめに

9月2日から9月13日まで、LayerXさんの2週間のサマーインターンに参加しました。この記事では、インターンの内容や学んだことについて紹介します。バクラクサマーインターンが本当に実りある楽しい内容だったことを全力でお伝えしていきます:sob::star:。

インターン期間は前述の通り、9月2日から9月13日の2週間でした。全日オフィス開催の予定でしたが、台風 ⛈️ の影響で初日と2日目は急遽オンライン開催となり、3日目以降からオフィスでの開催となりました。

オフライン初日はとても緊張しましたが、伝言ゲームなどのアイスブレイクを通じて、チームメンバーとすぐに打ち解けることができました。その後の日程も、チームで食事に行ったり、開発中にわからないことはすぐに質問できたりと、コミュニケーションが取りやすく、とても充実した時間を過ごすことができました。

## インターンの内容

### 前半:講義パート

インターン最初の3日間は、技術に関する講義がメインでした。LayerXで実際に使用されていて、インターンでも使用する技術を学びました。インターン生は事前に「must(

元記事を表示

Go言語でsyslogを受信する方法

# はじめに

Go言語でsyslogを受信するためのパッケージgo-syslog

https://github.com/mcuadros/go-syslog

の使い方を説明します。

# syslogを受信するプログラムの作り方

## インストール

“`terminal
$go get gopkg.in/mcuadros/go-syslog.v2
“`

## 受信プログラム

“`go

package main

import (
“fmt”
“log”

“gopkg.in/mcuadros/go-syslog.v2”
)

func main() {
channel := make(syslog.LogPartsChannel)
handler := syslog.NewChannelHandler(channel)

server := syslog.NewServer()
server.SetFormat(syslog.Automatic)
server.SetHandler(handler)
err := server.ListenU

元記事を表示

GoでgRPCのクライアントストリーミングをする

## はじめに
gRPCでクライアントストリーミングするサンプルです.

サンプルコード内でところどころモジュール名`github.com/Tsuyopon-1067/grpc-client-streaming-test`が登場しますがよしなに読み替えてください.

このサンプルでは以下のような通信をします.

通信のイメージ 通信するデータ

[このサンプル

元記事を表示

GOでアプリ作りてぇな[不定期更新]

## という事でアプリつくります。
### 以下備忘録
wails使う。Reactと分けてAPI設計。

元記事を表示

Go言語備忘録

# Goの勉強ver.0
昔プロゲートで好きになったGOを本格的に勉強するための備忘録
– 変数の代入
“`golang
func main(){
a:=”主要な記事:”
s:=”Qiita”
q:=”Zenn”
b:=”と”
z:=a+s+b+z
fmt.Println(z)
}
“`
– コンテキストとcli
“`golang
package main

import (
“fmt”
“os”
“strconv”

“github.com/urfave/cli”
)

func cliinit() {
app := cli.NewApp()

app.Action = func(content *cli.Context) error {

var naming [100]string
for i := 0; i < 100; i++ { var strc string = strconv.Itoa(i) naming[i] = "人生" + strc app.Name = nami

元記事を表示

勤怠管理アプリを作る 技術選定編

はじめまして、Yoichiroと申します。
日々新しい技術が生み出されていく中で、小規模なアプリケーションを開発する際にはどんな技術を選定するべきか、アーキテクチャはどうするのが良いか、ホスティングは?DBは?いろんな悩みがあると思います。

今日は自分が選定した技術について自分なりの視点を持ってまとめようと思います。

:::note
この記事で書くこと
**技術選定の理由**
**選定した技術を類似技術と比較したメリット**
:::

:::note warn
この記事で書かないこと
**環境構築手順**
**具体的な開発手法**
:::

それでは本題に入っていきましょう!!

## 前提 なぜ勤怠管理アプリを作るのか
技術選定には要件を満たすためであるという選定理由が必要です。なので一応どんなアプリを開発したかを記載します。
知人が経営する飲食店で、勤怠管理をタイムカードとExcelを使用しており、タイムカードからの転記を手作業でしていたり間違えてExcelのシートを消してしまったりなど苦労しているところを見かけ、力になれればと思い立ったためです。
– 要件としては2店舗が

元記事を表示

Docker+PostgreSQL+Go+Airで実現する快適サーバーサイド開発環境構築のすゝめ

# はじめに

先日、研究室の後輩たちと[技育CAMPハッカソン](https://talent.supporterz.jp/events/6f769c37-5709-4ddc-804e-4c4ff38d2112/)に参加してきました。
ハッカソンで何を開発したか等は、後輩が記事にまとめてくれたので、良ければ以下の記事をご覧ください。

https://qiita.com/aridome222/items/daf4465faffa608cb202

この記事では、Go言語の経験者がほとんどいない中、バックエンドの開発言語にGoを採用した今回のハッカソンで、入門Gopherのためにも快適な開発ができるよう環境構築をしたので、その紹介をさせていただきます。

紹介するにあたって、Goでのサーバーサイド開発に使えるテンプレートリポジトリも作成しました。Goを使ってみたいけど環境構築はめんどくさい方や、ハッカソン等でパッと使えるGoのテンプレートリポジトリを探している方は、使ってみてください。

# リポジトリの説明

GO + PostgreSQL での開発を、Docker と Air によ

元記事を表示

Go言語のSNMPパッケージgosnmpでsnmpwalkを作る方法

# はじめに

Go言語のSNMPパッケージgosnmpを紹介するシリーズの6回目です。

gosnmpパッケージのサンプルプログラムは、NET-SNMPのsnmpgetコマンドのような動作でした。今回はsnmpwalkコマンドの動作の作り方です。

https://qiita.com/twsnmp/items/2986b696cced09820291

の記事で紹介したOIDと名前の変換も使っています。

# snmpwalkコマンドについて

snmpwalkは、NET-SNMPのコマンドです。グループ単位でMIBを取得できます。SNMPエージェントが対応しているMIBを全て取得する場合にも利用します。

“`terminal
$snmpwalk -v 2c -c public 192.168.1.210 system
SNMPv2-MIB::sysDescr.0 = STRING: Linux minipc 4.19.0-26-amd64 1 SMP Debian 4.19.304-1 (2024-01-09) x86_64
SNMPv2-MIB::sysObjectID.0

元記事を表示

Go言語でimport “C”をするとビルドできなくなる

## はじめに

GoでDLL ファイルを作ろうとした時にハマった点についてのメモです.

環境は以下のとおりです.

– Windows 11 Pro 23H2
– Go1.21.3

## 準備

`go mod init hoge`で module を作ります.

“`:go.mod
module hoge

go 1.21.3
“`

`main.go`は最低限で定義します.

“`golang:main.go
package main

func main() {

}
“`

ディレクトリ構造は次のようになります.

“`
hoge
│ go.mod
│ main.go
“`

ここで,`hoge`ディレクトリ内で以下のコマンドを実行すればビルドできます.windows 環境では`hoge.exe`が生成されます.

“`powershell
go build
“`

## 症状

Go で DLL を作る時,`”C”`を import します.

“`golang:main.go
package main

import “C”

func main

元記事を表示

Go言語のSNMPパッケージgosnmpでTRAPを送信する方法

# はじめに

Go言語のSNMPパッケージgosnmpを紹介するシリーズの5回目です。
前回は

https://qiita.com/twsnmp/items/76d7cb98e55d2e1333db

の記事でTRAPを受信する方法について説明しました。

今回は、TRAPを送信する方法について説明します。

# TRAPを送信するプログラム

gosnmpパッケージでSNMPv2cのTRAPを送信するプログラムは

“`go

package main

import (
“log”

g “github.com/gosnmp/gosnmp”
)

func main() {
g.Default.Target = “192.168.1.250”
g.Default.Port = 162
g.Default.Community = “trap”
err := g.Default.Connect()
if err != nil {
log.Fatalf(“Connect() err: %v”, err)
}
defer g.Default.Conn.Clos

元記事を表示

GoのArrayとSliceについて深掘りしてみた

株式会社Schooの [@hiroto__1220](https://x.com/hiroto__1220)です!
Go研修を受けた際に、「開発だとSliceを使うことが多いです。」と言われており、ArrayとSliceの違いに興味を持ったので深掘りしてみました!

## 簡単にまとめると

– Arrayの全てまたは一部を参照しているのがSlice

– 柔軟性の高いSliceがよく使われる

– Sliceの作成方法は使い分けられると良い

## Array
“`go
func main(){
var a [10]int
fmt.Println(a) //[0 0 0 0 0 0 0 0 0 0]

a[0] = 12
a[2] = 17

fmt.Println(a) //[12 0 17 0 0 0 0 0 0 0]

b := [6]int{1, 2, 3, 4, 5, 6}
fmt.Println(b) //[1 2 3 4 5 6]
}
“`

– Arrayの長さ(要素数)まで型の

元記事を表示

Go 言語の context を基礎から実践まで解説

# はじめに

こんにちは、エンジニアの清水です。

私は業務で Go を書いているのですが、context についての理解が浅いことでエラーに遭遇したので、勉強のために記事を書いてみました。

この記事では、実際のコード例を交えながら Go 言語の context パッケージの基本から実践的な使用方法まで解説していきます。
また実際に私が遭遇したエラーの例も交えて context の陥りやすい落とし穴についても解説します。

# context の基本

## context とは何か

`context`は、Go の標準ライブラリに含まれるパッケージで、API やプロセス間でリクエストスコープの値、キャンセル信号、デッドラインなどを伝播するための仕組みを提供します。

## なぜ context が必要なのか

1. リソースの適切な管理:不要になった処理を適切にキャンセルし、メモリや CPU などのリソースを解放できます。
2. タイムアウト制御:長時間実行される処理に対して、適切なタイムアウトを設定できます。
3. リクエストスコープの値の伝播:HTTP リクエストのトレース

元記事を表示

failed to initialize database, got error dial tcp 127.0.0.1:3306: connect: connection refusedの対処法[Go,MySQL,Docker]

Go+MySQLをDockerで立ち上げようとしたら下のようなエラーが出ました。

“`
failed to initialize database, got error dial tcp 127.0.0.1:3306: connect: connection refused
“`
これはdatabaseの初期化がうまくいかず、コネクションができなかったというエラーです。

# 解決方法
## dsnを確認する
dsnは、`Data Source Name`の略称で、データベースの識別子のことです。

例えばMySQLだと以下のようなdsnになります。

“`
[user]:[password]@tcp([IPアドレス]:3306)/[database_name]?charset=utf8mb4&parseTime=True
“`

まず上手くいかなかった例を紹介します。

私は、ymlファイルにMySQLの設定を下のように記述していました。

“`docker-compose.yml
services:
server:
build:
context:

元記事を表示

Go言語のSNMPパッケージgosnmpでTRAPを受信する方法

# はじめに

Go言語のSNMPパッケージgosnmpを紹介するシリーズの4回目です。

1回目は

https://qiita.com/twsnmp/items/45a02243ce3fbca2a55f

です。

今回は、TRAPを受信する方法です。

# TRAPを受信するプログラム

TRAPを受信するプログラムは

“`go
package main

import (
“log”
“net”

g “github.com/gosnmp/gosnmp”
)

func main() {
tl := g.NewTrapListener()
tl.Params = &g.GoSNMP{}
tl.OnNewTrap = func(s *g.SnmpPacket, u *net.UDPAddr) {
log.Printf(“snmp trap from=%s trap=%+v”, u.IP.String(), s)
}
err := tl.Listen(“0.0.0.0:162”)
if err != nil {
log.Fatalln(err)
}

元記事を表示

GoにおけるGoogle Sheets APIのリトライ処理

## 要約
1. リトライ処理には、`github.com/hashicorp/go-retryablehttp`を使う
1. ただし、直接利用できないので、StandardClientからTransportを取得して、`NewTransport()`を使ってGoogle APIsで利用可能な状態に変換する
1. Sheetsサービスには、`WithHTTPClient()`でリトライ可能なクライアントを設定する

## 本文
Google Sheets APIには、当然ながら呼び出し回数の制限がある。1分毎に呼び出し可能回数が回復するので、適切にリトライを行うことで、処理の失敗を抑えることができる。

リトライ間隔の戦略としては、[Exponential backoffが挙げられていた](https://developers.google.com/sheets/api/limits#quota)。
有名なパッケージでは、`github.com/cenkalti/backoff/v4`を使うことで、Exponential backoffを使ったリトライ処理を書くことができる。
今回

元記事を表示

VSCodeでGoのデバッグができない Failed to launch: could not launch process: unsupported architecture of windows/i386 – only windows/amd64 windows/arm64 are supported

# はじめに
VSCodeでGoのデバッグが出来ないものかと色んな方々の記事を参考に試していました。

↓参考にした記事
https://qiita.com/momotaro98/items/7fbcad57a9d8488fe999

しかし記事のとおり準備をしてもデバッグができない…デバッグボタン押してもなんかへんなエラーポップアップが出る…?🤔

なんてことになりましたので備忘録残しました。

※原因はほんとしょうもなかったです笑

# 環境
Windows10

# 問題
冒頭でも書きましたが、上記記事などを参考にVSCodeでGoのデバッグをするための拡張機能、必要ライブラリ、launch.jsonの設定をしていざデバッグクリック!!!

……と進めたら以下VSCodeのエラーポップアップが出てきました😇

“`
Failed to launch: could not launch process: unsupported architecture of windows/i386 – only windows/amd64 windows/arm64 are supported

元記事を表示

【すぐにテスト環境構築】超簡易なJSONファイルを使ったMockサーバーを作った

## 概要
`/responses`配下にJSONファイル(`*.json`)を置くだけで、JSONを返すMockサーバーを作成しました。(自分用)

### 対象者
小規模なアプリケーションのテストをしたい方、テスト環境構築にとにかく時間をかけたくない方
### 制限事項
とってもシンプルな構成のため、以下のケースには現状対応していません。
`JSON-server`や`postman`を検討してください。または、ソースコードを自由に改変していただいて構いません。

– `200`以外のステータスコード
– BodyやHeaderに応じたレスポンスの条件分岐
– JSON以外のレスポンス

### ソースコード
“`bash
git clone https://github.com/RyutaSato/mock-api.git
“`

## 使い方
リポジトリをクローンし、以下のコマンドでDockerを起動します。

`${PORT}`はListenしたいポート番号に置き換えるか、環境変数で指定します。
“`bash
# cd mock-api
# PORT=8080

元記事を表示

OTHERカテゴリの最新記事