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

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

Golang(paho.mqtt.golang)でMQTT

![GolangでのMQTTの使用方法](https://assets.emqx.com/images/1b3ba43dd7990d1b0de21b5d6bc32e0e.png?imageMogr2/thumbnail/1520×684)

[Golang](https://golang.org/)はGoogleによって開発された静的かつ強く型付けされた、コンパイルされ、並行処理が可能なガベージコレクションを備えたプログラミング言語です。Goは表現豊かでクリーンで効率的です。その並行処理メカニズムは、マルチコアやネットワークマシンを最大限に活用するプログラムの作成を容易にし、革新的な型システムは柔軟かつモジュラーなプログラム構築を可能にします。Goは迅速にマシンコードにコンパイルされる一方、ガベージコレクションとランタイムリフレクションの利便性を備えています。これは動的型付けの解釈言語のような高速で静的型付けのコンパイル言語です。

[MQTT](https://www.emqx.com/en/blog/the-easiest-guide-to-getting-started-with

元記事を表示

GO メモ

## GOについて
### Go
– GoはGoogleでロブ・パイク、ケン・トンプソンによって設計されました。
– Goは、静的型付け、C言語の伝統に則ったコンパイル言語、メモリ安全性、ガベージコ レクション、構造的型付けなどの特徴を持ちます。
– [公式サイト](https://golang.org/)
– [GitHub](https://github.com/golang)

## GOフレームワークについて
### Gin
– 比較的軽量なフルスタックWebアプリケーションフレームワークです。
– MartiniのようなAPIを備えていますが、パフォーマンスはMartiniの最大40倍です。
– [公式サイト](https://gin-gonic.com/)

### Echo
– RESTAPI向けのため、RESTの原則に沿った形で設計されたAPIを持っています。
– [公式サイト](https://echo.labstack.com/)

### Revel
– JavaのPlay Frameworkを参考に設計されたフルスタックフレ

元記事を表示

私的Goで作るアプリのコード設計

## 前置き

– あくまで、個人でやっていてやりやすい私的の設計である。仕事においては、業務の内容/フェーズに合ったコード設計を採用するべし
– CleanArchitectureを意識してはいるが、あくまで意識しているだけであるため原理からは異なっている可能性がある (原理主義者様からの意見/指摘は大歓迎です)

## 対象コード

– Discord上から対象のホストに対してpprofをとって結果をS3に上げるBot
– 将来的にはDBをSQLiteではなく別サーバーにしたい
– 将来的にはWebAPIとしても提供したい

https://gitlab.com/RenonT1805/kyuuteiprofiler

## 前提に置く思想

– アプリケーションのビジネスロジックを副作用から守り、テストしやすい状態を維持する
– インフラ(DBや、DiscordBotの基盤そのもの)を置換可能な物とし、移植性を高める

CleanArchitectureに関する議論でよく「DBやフレームワークなんてそうそう変える物じゃないんだから、インフラの抽象化は過剰である」という話が上がるが、

元記事を表示

VS CodeでDevContainerを触ってみた

こんにちは!GxPの肥後です
この記事は[グロースエクスパートナーズ Advent Calendar 2023 1日目](https://qiita.com/advent-calendar/2023/gxp)です!
カレンダーの先頭は初めてです!
Dockerは勉強中で記録の意味でもかけるので一石二鳥ですね!

## 初めに
今回はDockerの勉強がてら触っていたので、その内容を記載しようと思います。
go言語の環境を作ってhello wolrdをするところまで書きます。
goを選んだ理由に意味はなくて、書籍買ったので触ってみようと思ったからです!!
また今回はローカル環境を汚さずに言語の環境構築をしたいため、Devcontainerというものを用います。
Dockerを使えるといろんな言語を迅速に使えたり物理サーバーを考慮することなく手軽にWebアプリの動作確認ができそうで気軽に何かを試すことが可能になるかと思いますので試していきましょう。
## Dockerとは
調べたらすぐに出てくるのですが簡単に言いますと、コンテナ技術を利用して、
仮想環境を素早く構築できるものです。

##

元記事を表示

Go言語とは

# Go言語とは
Googleが2009年に開発したオープンソースのプログラミング言語です。

# Go言語の特徴
* シンプルな構文で記述しやすい
* 高速処理が可能
* 複数の処理を並行できる

# Go言語でできること
* Webサーバー・Webサービスの開発
* スマートフォンアプリの開発
* IoT開発
* CLIアプリケーションの開発
* APIサーバー開発

# コード例
Hello, Worldを出力するプログラム
“`go
package main

import “fmt”

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

# 参考
– 公式サイト: [The Go Programming Language](https://golang.org/)
– 公式リファレンス: [Documentation – The Go Programming Language](https://golang.org/doc/)
– Wikipedia: [Go (プログラミング言語) – Wikipedia](http

元記事を表示

client-go・api・apimachineryの機能と関係性

::: note info
これは [ZOZO Advent Calendar 2023](https://qiita.com/advent-calendar/2023/zozo) カレンダー Vol.5 の 1日目の記事です。
:::
# はじめに
KubernetesはGo言語で開発されており、開発に利用されるモジュールとして[client-go](https://github.com/kubernetes/client-go)が利用されることは割とよく知られているかと思います。
またclient-goを触ると必ず登場するのが[`api`](https://github.com/kubernetes/api)・[`apimachinery`](https://github.com/kubernetes/apimachinery)というモジュールです。

自分がはじめてGo言語でKubernetes APIを操作するプログラムを書いた際には、これらのモジュールの機能・関係性がいまいちよく理解できずにいました。

本記事ではGo言語を使ってKubernetes APIを操作するプログ

元記事を表示

ISUCON13 参加記

# はじめに
どうもKizukuです.
今年初めてISUCONに参加したので,その記録をここに残します.
高スコアを取ったわけでもcoolな実装をしたわけでもないので,勉強のためにツヨツヨエンジニアのwriteupを漁ってる人はどうぞ別の記事をお読みください.
初心者がISUCONで苦しんだ記録を見たい方は,ぜひ見ていってください.

# ISUCONの全記録
## エントリー
ISUCONに出ようと思った私は大学の所属サークル(C3)で,ともに戦ってくれる仲間を探します.無事に2人集まって3人チームを結成することができました.ただ,チーム全員ISUCON初参加で,かつ,そのうち1人が何故か社会人だったため,私たちのチームは社会人枠での参加となりました.
エントリー(ISUCON0次予選)は,1次募集,2次募集ともに逃してしまい,3次募集でギリギリ滑り込みました.(ID 596)
あらかじめ必要な情報は用意しておいた方がいいですね.今後の教訓となりました.
## 過去問
全員初心者の私たちのチームはとりあえず経験値を積むため,ISUCON12の予選の過去問を解きました.(長くなるのでそ

元記事を表示

依存ライブラリはメンテナンスされていますか?dep-doctorによるメンテナンスチェクのススメ

# はじめに

最近のソフトウェア開発では、ほとんどの場合、外部のライブラリを利用しています。これにより、開発者は本来解決したい課題の解決に専念できます。

外部ライブラリを使用することには利点がありますが、同時に新たな運用リスクも発生します。たとえば、依存している外部ライブラリにセキュリティの問題がある場合、影響を受ける可能性があります。

一般的なセキュリティの対応手順では、まず、ソフトウェアの脆弱性情報がデータベースに登録されます。次に開発者はその情報を入手し、分析してから、対策済みのバージョンに更新するか、パッチを適用するなどの対応を行います。しかし、メンテナンスされていないライブラリの場合、問題があっても対応されないことが多いはずです。

![vuls_flow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36122/0caa98b0-3543-e821-e459-ddaea458ea2e.png)

また、言語のバージョンアップで破壊的な変更がある場合、依存しているライブラリが動作しなくな

元記事を表示

Lambdaでko!

## これは何?

これは [MEGAZONE 株式会社](https://www.megazonejapan.jp/) のテック陣「MEGAZONEのゆかいな仲間たち」がおくる、[Megazone Japan Advent Calendar 2023](https://qiita.com/advent-calendar/2023/megazonejapan) の一日目のエントリーです。

## はじめに

いやー、あっという間に12月ですね。今年は秋っぽい空気を楽しむチャンスがほとんどない天候のまま冬がやってきましたが、皆さんも「え?もう Advent Calendar の季節?どうしようエントリーしたけどまだ書いてないよ?まじやばいよー」なんて慌ててませんか?えぇ、私がまさにその状態です。

まともに Advent Calendar を書くなんて何年ぶりだろう?と記憶を掘り起してみると、実に6年ぶりぐらいのエントリーとなります。Private Cloud 界隈では 2012 年ごろから 2017 年ぐらいにかけて Advent Calendar が盛んでしたが、その後は Priva

元記事を表示

MisskeyやSpotifyのAPIで投稿を消したり投げたりする処理で詰まった部分のメモ

冬ですね。非常に寒くて足の指先が変な色しています。
最近APIを使って何らかの処理をしていくのにハマっています。

僕は当初PythonでTwitterのAPIを使って時報や投稿の一括消去を行ってみたりして楽しんでいたんですけど、残念なことに2022年の12月にすべてのアカウントが言われもない閉鎖処理に遭ってしまい、アカウントを作り直したのにもかかわらずAPI有料化騒動が出てしまい、流石にもげました。

しかし、APIの快楽を味わってしまったのでどこかで摂取したいという動機は収まらず(禁断症状)同じことをMisskeyでも出来ないかと思って挑戦してみました。

色々悩んだ結果11月の間に3つ出来たんですけど、その中の一つである「Misskeyで投稿したコンテンツを抹消するAPI」をテストしたら当たり前のように全部投稿が消えちゃったので、色々苦戦した記録が消し飛んでしまいました(苦笑)

今回はまだ記憶が残ってるうちにMisskeyやSpotifyのAPIに関する認証部分、投稿部分で詰まったことや悩んだことを整理しておいて、今後また作るときに確認するチートシートにしておきたいと思います。

元記事を表示

GoのホットリロードをAirでできなかったので、代わりに watchexec を使ったら快適開発環境が出来上がった(Docker for Windows環境下で)

# はじめに
Docker Desktop for Windowsでホットリローディング用ライブラリ「Air」を使ってGo言語の開発を行っていたところ、コードの変更がコンテナ内で自動的に反映されない問題に遭遇しました。WebやXで検索をかけても同様の問題で躓いている方が多いようだったので解決策の一つを共有したいと思い執筆しました。
(Mac用DockerDesktopではAirによるホットリロード可能)

# 結論

Airの代わりに`watchexec`を使うことで解決できました。

↓↓↓こちらのツールです。
https://github.com/watchexec/watchexec

ざっくり説明すると、「ファイルが更新されたときに任意のコマンドを実行するRust製のファイル監視ツール」らしい。

# 既存のコードと問題点

従来のセットアップでは以下の構成でした。(多少省略しています)

フォルダ構成

“`
current_directory
|
├── docker/
| └── app/
| └── Dockerfile
├── src/
|

元記事を表示

Re:Earthをハックしてみた

[インフォラウンジのアドベントカレンダ](https://qiita.com/advent-calendar/2023/info-lounge)ー1日目です。
やりたいと思ってアドベントカレンダー立てたので1日目を担当します!

## はじめに
Plateau View 2.0などに使われている注目の[Re:Earth](https://reearth.io/ja/)について、せっかくOSSなのでソースコードを覗いてみての知見を共有させて頂きます。
特に結論のない話ですが温かく見守っていただけるとありがたいです。
理解できてないことも多いのでアドバイスもいただけるとありがたいです。

## 背景
バルセロナにて行われた[Smart City Expo 2023](https://www.smartcityexpo.com/)でお隣にRe:Earthを開発されておられるユーカリヤさんがおられました。
OSSの方触ってる話をしたら喜んでいただき、許可をいただいて記事にさせて頂いています!
多分意図されてない使い方なんですが、こういうことしようとしてますと伝えたところ、OSSにしてるので意図

元記事を表示

goroutine、それでいつ使うのか

## 概要
ゴルチンは、Go言語で提供される並列実行のためのスレッドライブラリです。
Go言語の基本的な機能で、他の言語のスレッドに似た役割を果たします。
ゴルチンだけのいい点は

* 軽い
* 同じOSスレッドふくすう実行できる – 同じ環境でより多くの並列性を提供
* 便利なchannel機能
* ランタイムスケジューリング

要約すると、スケジューリングや並列処理後のデータ収集と関連して、
ユーザーが気を使わなければならない部分が少なく、
軽いうえに強力であることもあり、超便利だということです。
しかし、このような長所を享受するためには次が前提されなければなりません。

* ゴルチン間のデータ共有時にチャネルを使用して安全に実行します。
* ゴルチンを無分別に生成しないように注意します。
* pprofを使用して、ゴルチンのパフォーマンスを監視します。

上記の注意点を常に肝に銘じて使いましょう

## 使い方
“`go
package main

import (
“fmt”
“math/rand”
“time”
)

func main() {

//

元記事を表示

各言語のplaygroundまとめ

直近、golangの現場で2年近くやらせていただいてるのですが、Go Playgroundめっちゃ便利ですよね!
バージョンも選べて、なおかつコードもシェアできて、ちょっと書いて実行して確認して、結果や内容を共有できるの最高です

いくら実行環境を簡単に用意できるような時代になったとはいえ、「ちょっと試したい」みたいなときってあるじゃないですか。
ということで、今回はいろんな言語のPlayground事情の調査も込めて、まとめていこうと思います

# go
https://go.dev/play/

# javascript
vueやreactまで?!これはすごい!!

https://playcode.io/

![スクリーンショット 2023-11-21 8.30.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323088/afccef1f-da3c-649b-7afa-ed6b4118869f.png)

# TypeScript
@takubii 様情報提供ありがとうございます!

htt

元記事を表示

クリーンアーキテクチャついて考える

## 概要
サービスのアーキテクチャを考える上で、様々な手法が存在している。
今回はクリーンアーキテクチャを取り入れることを考えている。
考えを理解したうえでフォルダ構成についてまとめる。

## 前提
クリーンアーキテクチャを採用するが、少し簡易的な構成を選択する。
理由としては、チームではなく個人運用であるサービスの構成案のため
複雑にしすぎても運用しきれないと考えているためである。
決まっていることとしては
– 言語はGo言語
– DataBaseはMySQL
– O/RマッパーはSQLBoilerの予定している(未確定だが、何かしらは使うつもり)

## クリーンアーキテクチャって?
![CleanArchitecture.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688298/8442f1c5-af04-1f72-8e5a-4e1086d8f46f.jpeg)
引用 https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-arc

元記事を表示

プログラミング言語 Go Java C# で関数を介した整数カウントアップ実行時間を仲良く競う

# はじめに
プログラミング言語 Go ととJava C# とで関数呼び出しを介した整数カウントアップの反復実行時間を仲良く競い合わせてみます。いわゆるファンクションコールのオーバーヘッドとはどんなものなのかを切り分けます。

## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
go version go1.19.5 windows/amd64
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz

## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。

# お題のソースコード
#### Java
“`Java:main.java
import java.lang.System;
/**
* プログラム型
*/
class Program
{
/**
* メイン
*

元記事を表示

Go:分かりにくいContextを簡単なコードで解説

# Contextの基本
– **Contextの目的**:context.Contextは、ゴルーチンの実行に関連する設定やシグナルを伝達するためのものです。これには、処理のキャンセル、タイムアウトの設定などが含まれます。
– **キャンセルシグナルを送る**:あるゴルーチンが他のゴルーチンに「もう止めて」と伝えることができます。これは、不要な作業を止めてリソースを節約するのに役立ちます。
– **タイムアウトを設定する**:特定の時間が過ぎたら、自動的にいくつかの作業を止めるように設定できます。

# Contextの使い方
“`go
package main

import (
“context”
“fmt”
“time”
)

func main() {
// Contextを作って、3秒後に自動で止めるように設定
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()

// ここで5秒待ってからメッセージを出そうとする
select {

元記事を表示

いろんな言語比較してみた

# 軽く比較🍻
書いた見た目を比較するだけ。
実装内容は
– **文字列**の`配列(系のやつ)`の初期化、追加、末尾削除
– のディープコピー
– をフィルタするだけ
– をフィルタしつつ出力

を関数にして呼び出すものとします。まぁ準備運動ですね。👯‍♂️

言語は以下です。
筆者が扱える言語が少ないのでこれだけですが、おいおい増やしたいと思います。

– JavaScript
– Python
– Go
– Java
– Rust
– C++
– SQL
– zsh
– vimscript

# JavaScript
これがいちばんすき😎😎
“`js
/**
* test
*/
(() => {
// 配列
list = [“test”, “test”]
list.push(“add”)
list.pop(0)
// 配列を移す
_ = […list] // これは非破壊だがシャローコピー
_ = JSON.parse(JSON.stringify(list)) // これはディープコピー
_ = stru

元記事を表示

Web開発にAIを取り入れる 〜Golangの活用〜

# はじめに
AIの進化は、Web開発の新たな可能性を開いています。CloudflareのWorkers AIは、この進化を具現化し、Stable DiffusionとCode Llamaを通じてWebアプリケーションにAIの力を容易に組み込む機能を提供します。このブログでは、特にGolangを使用してこれらのAI機能を活用する方法を解説します。

## Cloudflare Workers AIについて
Cloudflare Workers AIは、Stable Diffusionによる画像生成とCode Llamaによるコード生成の2つの強力な機能を提供します。開発者は、テキストから画像を生成したり、多様なプログラミング言語でコードを生成したりすることができます。

## GolangによるWorkers AIの利用
Golangは高性能で効率的なWebサービス開発に適した言語です。ここでは、Golangを使用してCloudflareのWorkers AIにアクセスし、AI機能をWebアプリケーションに組み込む方法を紹介します。

### 1. 環境の設定
Golangの開発環境を

元記事を表示

プログラミング言語 Go Java C# で整数カウントアップ実行時間を仲良く競う

# はじめに
プログラミング言語 Go とJava C# とで整数カウントアップの反復実行時間を仲良く競い合わせてみます。コンソール出力は意外と重い処理なので、いったん素の処理でどんなものなのか検証します。

## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
go version go1.19.5 windows/amd64
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz

## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。

# お題のソースコード
#### Java
“`Java:main.java
import java.lang.System;
/**
* プログラム型
*/
class Program
{
/**
* メイン
* @param ar

元記事を表示

OTHERカテゴリの最新記事