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

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

Render.comを使ってGo&PostgreSQLを爆速でデプロイしてみた

こんにちは!
Go&PostgreSQLを思ったより簡単にデプロイできたので参考になれば幸いです

## こんな方におすすめ
– より手軽にGoとPostgreSQLをデプロイしてDBから取得、保存等ができるようになりたい

### この記事で扱わないこと
– Goの文法に関して
– 各種サイトやツールのインストール方法

## 今回使用するGoファイル
こちらの記事で実装したGoファイルを使います

https://qiita.com/miumi/items/6a70d5b9a1a61cc39dc8

リポジトリは下記になります

https://github.com/mikaijun/go-postgre-onboarding/

## render.comのアカウント作成
下記サイトにアクセスします。

https://render.com/

アカウント作成の流れは下記の記事が参考になると思います

https://zenn.dev/protoout/articles/54-howto-render-setup

## デプロイ用のPostgreSQL作成
https://

元記事を表示

Go言語の環境構築~HelloWorld出力(Windows)

## はじめに
WindowsでGo言語の開発環境を構築し、`HelloWorld`を出力する方法を説明する

## Goのインストール
1. https://go.dev/dl/ にアクセスして`go1.21.4.windows-amd64.msi`をダウンロードする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/a36570e9-0a89-74c1-2eaa-f82746f0b532.png)

1. ダウンロードが完了したら、`go1.21.4.windows-amd64.msi`をダブルクリック
1. `Next`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/5f5ae292-b661-eb49-d36a-0e2b4feac0f2.png)
1. `Next`をクリック
![image.png](https://qiita-image-s

元記事を表示

KubernetesOperator に入門してみた

## はじめに

本記事は [ラクスパートナーズアドベントカレンダー 2023 2日目](https://qiita.com/advent-calendar/2023/rakus-partners) の投稿です。

数年前から話題だったようですが、私は最近プロジェクトで触れる機会があり、遅ればせながら KubernetesOperator に入門したので個人的な備忘もかねて投稿します。
私はバリバリインフラ系のため、Go については完全素人でしたが後述の operator-sdk があったおかげで何とか作り上げることができました。ありがたや。。

## そもそも KubernetesOperator とは
ざっくり簡単に言うと
「Kubernetes リソースの作成を自動化してくれるプログラム」です。

CustomResource をアプライすることで Cluster 内に起動した KubernetesOperator がそれを検知し
KubernetesOperator 内で定義してある Deployment や NameSpace 等のリソースを自動でクラスターに起動してくれます

元記事を表示

変数宣言とスコープの取り扱いに気をつけよう

# はじめに

こんにちは。Nubです。

研究や個人開発でオレオレ開発を行っていた私ですが、遂にコードレビューをしていただくことになりました。年貢の納め時です。

今回は、Go言語での変数やプログラムのスコープについて絞って書いていこうと思います。

## 要約

– 変数はlowerCamelCaseで宣言しましょう
– 変数はなるべく使う直前で宣言しましょう
– スコープ内ですべてを完結させるのは、逆に可読性を落とす可能性があるので気をつけましょう

# 変数の命名方法

![名称未設定のデザイン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477712/e4a4360a-51bd-8879-6460-b4722bc0da1c.png)
問 : これな〜んだ?
解 : 命名規則

プログラム内で変数や定数を宣言する上で、命名方法には様々な種類があります。

– `UpperCamelCa

元記事を表示

client-goでCustom ResourceのオブジェクトをGETする

::: note info
これは [ZOZO Advent Calendar 2023](https://qiita.com/advent-calendar/2023/zozo) カレンダー Vol.5 の 2日目の記事です。
:::

本記事ではclient-goを利用してKubernetesのCustom ResourceのオブジェクトをGETする方法について紹介します。

[client-go](https://github.com/kubernetes/client-go)でDeploymentやPodといったKubernetesのデフォルトリソースを取得する場合、次のようにclientsetの初期化を行うと思います。

“`main.go
package main

import (
“context”
“flag”
“fmt”
metav1 “k8s.io/apimachinery/pkg/apis/meta/v1”
“k8s.io/client-go/kubernetes”
“k8s.io/client-go/tools/clientcmd”
)

var

元記事を表示

VercelでNode.js以外のランタイムを動かしてみる(Go, Python, Ruby)

Vercel といえば Next.js なので、 Node.js を動かすものというイメージがあります。

ですが、Vercel では Node.js 以外のアプリケーションもデプロイすることができます。

想像以上に簡単にデプロイできて、すごかったです :hushed:

## 公式が対応しているランタイム

Vercel は以下のランタイムに対応しています。

– Node.js
– Edge
– Go
– Python
– Ruby

## コミュニティ・ランタイム

公式がサポートしているランタイムとは別に、ユーザが作成したコミュニティ・ランタイムも存在します。コミュニティ・ランタイムには、以下のランタイムがあります。

– Bash
– Deno
– PHP
– Rust
– Bun

コミュニティ・ランタイムは、GitHub の [Vercel Community](https://github.com/vercel-community) リポジトリで管理されているようです。

## ランタイムの比較

基本的に、サーバレスなアプリケーションを構築をする場合には No

元記事を表示

GoでExcelを作成する

## はじめに
アドベントカレンダーの2日目を担当する[HITOTSU株式会社](https://hitotsu.co.jp/)の河村康治です!!!

今回はGoでExcelを生成できるExcelizeの話をしたいと思います。

業務でも利用したのでその紹介から入りたいと思います。

![スクリーンショット 2023-12-01 21.29.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/2f5b79bc-b9dc-52df-fd84-b42584aef5c5.png)

## 作成機能
HITOTSUは病院向けに医療機器管理システムを提供しております。
機器情報や点検情報がExcel出力できれば、監査対応に対応できて便利だよねという声から開発が始まりました。実際に作成した機能は下記イメージです。

## 実際の機能
 1. フロントからリクエスト情報を確定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazo

元記事を表示

Goで学ぶGraphQLサーバーサイド(8)ーN+1問題の回避 – dataloaderの導入

こんにちは。

今回はN+1問題の回避 – dataloaderの導入について説明いたします。

# この章について

この章では、前章のようにリゾルバを分割したことによって生まれる「N+1」問題を紹介した上で、その解決法としてdataloaderを導入しようと思います。

# N+1問題とは

実際にN+1問題が起きてしまっている様子をまずはお見せします。

ここから先は、GraphQLのスキーマに定義されていたオブジェクトのうちRepository・Issueのリゾルバが分割されており、中身の実装も完了していることを前提としています。

“`gqlgen.yml
# 必要部分のみを抜粋
models:
Repository:
fields:
issues:
resolver: true
Issue:
fields:
author:
resolver: true

“`
## 問題が起こるリクエストクエリ

今回は以下のようなコードを実行してみようと思います。

“`graphql
query {

元記事を表示

Goで開発する環境を整える

# 前置き
少し前から実務でGoを使って開発を行っているのですが、エディタや生成AIのお陰であまり理解を指定なくても仕事ができています。
そこで、自分の脳みそを使ってGoと向き合うために記事をたくさん書くことにしました。
はじめは環境構築からです。

## 環境
`Dcoker`と`docker-compose`が使えれば良いでしょう。

“`bash
$ docker -v
Docker version 20.10.12, build e91ed57
$ docker-compose -v
docker-compose version 1.29.2, build 5becea4c
“`

## ディレクトリ・ファイルの作成
“`bash
mkdir learn-go && cd learn-go
mkdir -p app/day1
touch app/day1/main.go
touch Dockerfile
touch docker-compose.yml
“`

## Dockerfile編集
“`Dockerfile
FROM golang:latest # バージョ

元記事を表示

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](https:/

元記事を表示

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に関する認証部分、投稿部分で詰まったことや悩んだことを整理しておいて、今後また作るときに確認するチートシートにしておきたいと思います。

元記事を表示

Docker Desktop for WindowsでGo(Air)のホットリロードできないからwatchexecにした

# はじめに
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/
|

元記事を表示

OTHERカテゴリの最新記事