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

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

GolangのTestでブレークポイントを貼りデバッグする(VSCode編)

## はじめに
表題通り、GolangのTestでブレークポイントを貼りデバッグします。

### 成果物
![go_test.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/82acd8bd-c61f-1dd6-c20f-0754e44433f8.gif)

### ソースコード

“`shell:ディレクトリ構成
~/go/src/go_test_delve$ tree
.
├── go.mod
├── main.go
└── main_test.go

1 directory, 3 files
“`

“`go:main.go(プロダクトコード)
package main

import “fmt”

func add(a, b int) int {
return a + b
}

func main() {
result := add(2, 3)
fmt.Println(“2 + 3 =”, result)
}
“`

“`go:main_test.

元記事を表示

Go + ドローンで最高の世界へ飛び立つ その2 操作&映像編

本記事は [オルトプラス Advent Calendar 2023](https://qiita.com/advent-calendar/2023/altplus2023) の12/16の記事です。

# はじめに
こんにちは!オルトプラスの中村です!
本記事は[Go + ドローンで最高の世界へ飛び立つ その1 導入編](https://qiita.com/ka_nakamu/private/8feb27cecd63bdc93124)の続編となります。
プログラミング対応のドローンに興味ある方や、Goに興味あって何かしら手を動かす目的が欲しかった方や、IT関係ないワクワクしたいおじさんみたいな方は是非その1からご覧いただけたら嬉しいです。

# 概要
Mac PCでDJI TelloのドローンをGoフレームワークGobotで操作していきます。
前回は導入からドローンの一連のアクションを命令形式で記述し、それを実行して飛ばしました。
今回は大きく分けて以下の2つをやっていきたいと思います。
– ドローンそれぞれのアクションをキーボードの入力から行えるようにする
– Telloのカメラを利

元記事を表示

Go x Google Calendar API x Copilot 、簡易なチーム日程調整を作ってみる

この記事は [Wano Group Advent Calendar 2023](https://qiita.com/advent-calendar/2023/wano-group) の16日目の記事です。

## 概要

最近Copilotの使い方を学び始めました。
ちょうどチームメンバーの日程調整機能を作りたいので、Google Calendar APIとCopilotを使って作ってみました。

## 先ずはgolangでGoogle Calendar APIを使う

https://developers.google.com/calendar/api/quickstart/go?hl=ja

google提供のクイックスタートを通りにやっていくだけで、個別のカレンダー情報を取得できます。さらに、[calendar/v3/freeBusy](https://developers.google.com/calendar/api/v3/reference/freebusy/query?hl=ja) API は複数メンバーのカレンダーの予定時間情報を返します:

“`go

jst,

元記事を表示

VSCode×GoでGOROOT or GOPATHが見つからない大量エラーの解消。

こんにちは。

フロントエンドエンジニアでバックエンドも頑張りたいみつです:relaxed:

GoをVS Codeで書いているのですが、直接的な問題もなく見て見ぬふりをしていた下記のエラー。

“`
could not import XXX (cannot find package “XXX” in GOROOT or GOPATH)
“`

赤い線が多すぎてついに、VS Codeでエラータブでエラー数が10kに到達したのでそろそろやばいでしょ…という焦りと何が起きていたんだろうを記事にしたものです。

ちなみに、自分の場合は、Goのインストールも出来ているのと、ターミナルでGoを認識もしていたので、go.modファイルがあるディレクトリでワークスペースを開くだけでエラーの文言は消えました。

## 最近起きてた嫌なこと:frowning2:
terminalで`go version`コマンドを叩くと、Goを認識する。

ただ、エディタ画面や問題のタブにはBrokenImportの大量エラーが発生している。

[terminal画面]
![image.png](https:/

元記事を表示

TrivyのWebAssembly拡張機能、Modulesがすごい

## はじめに

この記事は、[Go 言語 Advent Calendar 2023 シリーズ2](https://qiita.com/advent-calendar/2023/go)の16日目の記事です。

こんにちは。[reo](https://twitter.com/_uhzz_) です。
今年も気づけばアドベントカレンダーの時期ですね。

社のカレンダーにも参加したので、こちらも宣伝させていただきます。

https://qiita.com/uh-zz/items/575232437f885cc4730a

今回はTrivyのWebAssembly拡張について紹介させていただきます。

## 前提

– 以下は詳しく触れません。
– WebAssembly の概要
– WebAssemblyランタイム(wazero)について
– Trivyの全体像について

掲載内容は私自身の見解であり、必ずしも所属する企業や組織の立場、戦略、意見を代表するものではありません。[^1]

## Trivy とは

公式の README にもあるとおり、コンテナイメージか

元記事を表示

Goで作るAPIサーバーと大規模言語モデル

[Go 言語 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/go) の16日目の記事です。

## tl;dr

SQLのクエリを大規模言語モデルに書かせて、sqlcでGoのコードを生成すると、APIサーバーの実装が楽になるかもしれません

## はじめに

Goを用いてAPIサーバーを実装することがあります。それが(十分大きな)エンジニア組織である場合、内部向けにAPIサーバー用のテンプレートが用意されていたり、内部基盤によって簡単にデプロイできるようになっていることもあります。しかし、そうでない場合はフルスクラッチあるいはそれに近しい形で実装することになります。

この記事では、特に後者の場合や個人開発において、GoのAPIサーバー[^1]をどのように実装するかについて考えてみます。特に、実装のための時間も人的リソースも限られている状況下で、昨今話題になっている大規模言語モデルをうまく利活用できないか考えてみます。

[^1]: この記事では、スキーマに沿ってJSON over HTTP(s)通信を行うサー

元記事を表示

Goでコンソールを出さない実行ファイルを作成

“`
go build -ldflags “-H=windowsgui” -o app.exe app.go
“`

元記事を表示

【Go】golang-migrate × sqlboiler で migrateしたmysqlのtableを自動でmodel化する

# はじめに
本記事ではgolang-migrateとsqlboilerを使ってmysqlのtableを自動でmodel化する方法についてまとめます。

:::note warn
dockerの扱い方については解説しません
:::

# 環境
– go 1.21.5
– golang-migrate v4.16.2
– sqlboiler v4.15.0

# 最終的なディレクトリ構成
“`zsh
.
├── app
│ └── domain
│ └── models // この中にmodelが生成されています
│ ├── boil_queries.go
│ ├── boil_table_names.go
│ ├── boil_types.go
│ ├── boil_view_names.go
│ ├── mysql_upsert.go
│ ├── schema_migrations.go
│ └── users.go
├──

元記事を表示

Goでスクレイピングするのって…

# Goのスクレイピングとの相性
Goはスクレイピングと相性が良い側面と良くない側面があると思います。

## 良い側面
並行処理がとても得意な言語ですので、大量にHTTPリクエストを送る必要がある場合などでとても約に立つでしょう。しかし、単一ドメインに限られた時間内で大量のリクエストを送る行為は、DOS攻撃そのものですので、
意外とこういったユースケースは無いのかもしれません。

## 良くない側面
相性が良くない側面としては、言語として堅すぎるということです。
スクレイピングにおいてはある程度のゆるさも許容すべきだと思います。
自らの都合とは関係なく、取得先の都合で構造が変わるので、都度堅を定義するのは骨が折れます。
必要な値の`nil`チェックをするぐらいで十分な気がしますし、そうなるとPythonではなく、Goを使う理由が思いつかないのです…

元記事を表示

Goプログラムがビルドされるまで (コンパイラーの仕組みを探る)

Goを使っているプログラマの中でコンパイラについて聞いたことある人もいるかも知れませんが、実際に何をしているか分からないかもしれません。
心配はGO無用。この記事で解説いたします。

# コンパイルとは

ただGoプログラムを書くだけでは実行はできません。
実行可能にするまでに手を加える必要があります。コンパイラがソースコードをコンピューターが理解できる形式に変換します。

コンパイルをするプログラムの名前が**コンパイラ**です。

GCCやLLVMとか聞いたことありますか?これらもコンパイラです。
これらのコンパイラは長期に渡って、たくさんの貢献者によって開発されて来ました。

`> go build main.go`

もちろん、Goでもコンパイルします。
このコマンドのように、Goプログラムをビルドするたびにコンパイルしているんです。

### Goコンパイラについて
– Goは独自のコンパイラを開発しています。 (GCCやLLVMを使っていません。)
– Goプロジェクトはオープンソースなので、公式サイトでソースコードを読むことができます。
– ソースコードには標準ライブラリ

元記事を表示

iOS定期購読サーバ実装 verifyReceiptとApp Store Server APIの使い方

# はじめに
こんばんは
この記事は[and factory.inc Advent Calendar 2023](https://qiita.com/advent-calendar/2023/andfactory)の15日目の記事です。

みなさん、iOSの課金処理で使用される[verifyReceipt](https://developer.apple.com/documentation/appstorereceipts/verifyreceipt)はご存知でしょうか?
もちろん知ってますよね。みんな大好きverifyReceiptは、iOSアプリから受け取ったレシートの購入情報をサーバ側で検証する為に使用されることで国民的な知名度があります。

もしも、ある日突然verifyReceiptがDeprecatedになったらどうしますか?
大丈夫、そんな日はまず来ません。まさか俺たちのAppleがそんなことをするはずがありません。
でも備えあれば憂いなし、ということで今日はもしもに備えての妄想をしていきます。

これは妄想の話ですが、verifyReceiptがDeprecatedにな

元記事を表示

Goで実装する基本ソートアルゴリズム

## アルゴリズムとは

アルゴリズムはある目的を達成するための決まった操作のことです。

例えば目的を任意の3つの整数の中で最大のものを取得するとした場合、以下の操作で目的が達成できます。

1. 各整数を任意の順に並べる
1. 1つ目と2つ目の整数の大小を比較して大きい方を取り出す
1. 取り出した整数と3つ目の整数の第上を比較して大きい方を取り出す

これも立派なアルゴリズムです。

上記の整数の個数が10でも100でも3の操作を整数の個数分繰り返して行くと最大が得られます。

## ソートアルゴリズム

アルゴリズムの中でデータを一定の規則に従って並べるアルゴリズムです。

複数の整数がランダムに並んだ状態からある順番に並べ直す

先ほど紹介した最大を取得するを少し発展させて昇順に並べ替えることを目的としてGoのコードを見ていきます。

## ソートアルゴリズムの種類

今回はすべて昇順になるように並べます

### バブルソート

最も基本的なソートアルゴリズムで、隣接する要素を比較して順序が間違っていれば交換するという操作をします。これを繰り返すことで、最大の要素がリストの

元記事を表示

自作のコンテナもどきをGO言語で作成する

こんにちは。Supership株式会社インフラ基盤統括室のhym17です。

:::note warn
この記事は、[Supershipグループ Advent Calendar 2023](https://qiita.com/advent-calendar/2023/supership)のxx日目の記事になります。
:::
# TL;DR
簡単な自作コンテナもどきについて、紹介したいと思います

もっと発展して色々やりたい!簡単すぎるって方はもっと複雑化したのがあるので[GitHub](https://github.com/hayama17/go_container)を参照してみて下さい!

## コンテナとは

Linuxの機能であるnamespaceとcgroupsによってプロセスのisolationを高めたものです。そのため、コンテナはVMと違ってプロセスであり軽量な実行可能になっています。

この記事では、このnamespaceを使って分離されたプロセスを作る事を目的とします。

### Namespace
Linuxが利用するリソースに一意なnamespaceを割り当てるこ

元記事を表示

Goで実践モックテスト

# モックテストとは

メタップスアドベントカレンダー15日目の記事です。
この記事で扱うモックテストとは、ユニットテストを行う際、テスト対象が依存している処理の振る舞いを他のものに置き換えてしまう手法のことです。例えば、データベースに依存したビジネスロジックをテストするときに、データベース処理部分についてはテストを行うのに都合のよいものに置き換えます。このようなことをすることで、何をテストするかに集中でき、ユニットテストを効率よく行うことができます。
私は業務ではGoを扱っていますので、Goにおけるモックテスト手法の紹介したいと思います。

# モックテスト手法

モックテスト手法の説明のために、下記のように外部のAPIを利用して自サーバのIPアドレスを取得し、それをデータベースに保存する処理をテストすることにします。

“`go:service/service.go
package service

type IPAddressService struct {
fetcher IPAddressFetcher
repository Repository
}

func

元記事を表示

[Go] Slice 長さと容量って何?

## はじめに
 こちらは、[RetailAI Adventurers Advent Calendar 2023](https://qiita.com/advent-calendar/2023/rai-adventurers)の15日目の記事です。

https://qiita.com/advent-calendar/2023/rai-adventurers

 昨日は[tanabe_shogo](https://qiita.com/tanabe_shogo)さんの『[GCPでDuet AI使ってみた](https://qiita.com/tanabe_shogo/items/243729c1657f0db67385)』でした。

 この記事では、Goでよく使われる[Slice](https://go.dev/tour/moretypes/7)の仕組みについてご紹介しようと思います。ここで書く内容は、『[100 Go Mistakes and How to Avoid Them](https://www.manning.com/books/100-go-mistakes-and-h

元記事を表示

Goにおけるインターフェースとは

## インターフェースとは
RubyやPythonには明示的に登場する概念ではないため、この場で確認しておきます。
Goにおけるインターフェースとは、メソッドの集合体のこと。他の言語では抽象クラスと呼ばれることもある概念です。

## インターフェースの例
“`golang
type Shape interface {
Area() float64 // 面積
Perimeter() float64 // 周囲
}
“`

`Shape`というインターフェースは`Area()`と`Perimeter()`という浮動小数点を返すメソッドを持っています。
このインターフェースはメソッドの詳細を知りません。

次に、このインターフェースを実装した`Rectangle`という構造体を定義します。
“`go
type Rectangle struct {
Width, Height float64
}

func (r Rectangle) Area() float64 {
return r.Width * r.Height
}

func (
r Rect

元記事を表示

チーム開発参加の記録【2023-10~2024-03】(2) Go言語からTursoを使ってみた

# 本シリーズのリンク

– [チーム開発参加の記録【2023-10~2024-03】(1) Go言語用ORM「Bun」をDBファーストで使う試み(SQLite使用)](https://qiita.com/kanedaq/items/97ca682602b626d5d717)
– チーム開発参加の記録【2023-10~2024-03】(2) Go言語からTursoを使ってみた

# 本記事で行うこと

[前回の記事]((https://qiita.com/kanedaq/items/97ca682602b626d5d717))ではSQLiteでORM「Bun」を使ってみました。
本記事では、前回作ったGoプログラムを[Turso](https://turso.tech/)で動かしてみます。

# Tursoチュートリアルに沿ってDBを用意する

[チュートリアル](https://docs.turso.tech/tutorials/)を見ながら、CLIをインストールするところから始めて、テーブル作成&テストデータINSERTまで行います。

## [CLIインストール](https:/

元記事を表示

Go と TinyGo の cgo 呼び出しオーバーヘッドの比較

cgo はビルドも遅くなるし、クロスコンパイルに問題が出ることもあるし、呼び出しオーバーヘッドも大きいです。
ただ、それでも既存の C 言語資産を使いたい場合など、使いどころは多数あります。

以下の記事では、 cgo 使用に対して次のように書かれています。

cgo is not Go

* Slower build times
* Complicated builds
* You lose access to all your tools
* Performance will always be an issue
* C calls the shots, not your code
* Deployment gets more complicated

Go では散々な言われようですが、 TinyGo ではどうでしょうか?

なお、、、 TinyGo については以下の書籍や記事などを参照してください。

https://qiita.c

元記事を表示

goroutine のユニットテスト(モックの実行を待機)

## はじめに

goroutine のユニットテストで、期待した関数が呼ばれる前にテストが終了する問題に遭遇しました。
今回は、その対策を紹介します。Go のユニットテストやモックについては、[こちら](https://qiita.com/hiroyky/items/4a9be463e752d5c0c41c)の記事がわかりやすいです。

## テスト対象コードの作成

goroutine のテストを書くために簡易的なコードを作成しました。
無限ループで、channel からメッセージを取得して、ログに出力するコードです。

main では、`handler.HandleMessage()` を実行します。

“`go: main.go
package main

import (
“github.com/articles/goroutine_test/handler”
)

func main() {
messageHandler := handler.NewHandler()

var forever chan string

go messageHandler.Hand

元記事を表示

AtCoder Beginners SelectionをGoで解いてみた(後半)

[**前半記事**](https://qiita.com/rapirapi/items/75ff6d4ff5fd9a6a8d4b)の続きから解いていく

### ABC085B Kagami Mochi
https://atcoder.jp/contests/abs/tasks/abc085_b

ソートした後に前から要素を見て今まで見たどの要素より大きい値が取れたら、カウントする

#### ACコード
“`go
package main

import (
“fmt”
“sort”
)

func main() {
var n int
fmt.Scan(&n)
d := make([]int, n)
for i := 0; i < n; i++ { fmt.Scan(&d[i]) } sort.Ints(d) ans := 0 work := 0 for _, num := range d { if num > work {
work = num
ans += 1
}
}
fmt.Println(ans)
}

“`

##

元記事を表示

OTHERカテゴリの最新記事