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

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

【Go言語】リテラル・変数宣言

## リテラル
Goのプリミティブなリテラルでよく使われるもの
* 整数
* 浮動小数点数
* ブール型
* 文字列
* nil
> `nil`は無効な参照先を表す値で、初期化されていない状態を表すのに利用される

“`go
// 整数
1
// 浮動小数点数
1.5
// 文字列
“あいう”
`Hello
World`
// プール値
true
false
// nil
nil
“`

## 変数宣言
`var`の後に`変数名`、`型`で宣言する
初期値を代入する場合は、`=`の後に`初期値`を記述する
初期値の値から型が明らかな場合は、`型`を省略できる

“`go
// 整数型の宣言
var num1 int = 10

// 右辺から型が決まるので型の記述を省力できる
var num2 = 20
“`

変数名と初期値の代入を`:=`演算子で行うことができる
ただし、関数の中でしか使えない

“`go
package main

import “fmt”

// コンパイルエラーになる
num1 := 10

func main() {
// num2に整数を

元記事を表示

GoでAPIサーバーを立てよう!(Ruby on Railsと比較しながら)

# 概要
Ruby on Railsしかバックエンド触ったことがない筆者がはじめてGoでAPIサーバーを立てた時、「Railsと比較しながら理解すれば理解しやすいのでは・・・!」と思いせっかくなら記事にしようと思い立って記事にした。

# まず最初に、RailsでAPIサーバーを動かすイメージを・・・
まず、RailsでAPIサーバーを動かす時、どうやって実装してサーバーを動かしていたかイメージします。
文字にするとこんな感じでしょうか。
1. rails sするとlocalhost:3000にサーバーが立ち上がる
2. routes.rbにルーティング(エンドポイントと対応するコントローラー, アクション)を定義する
3. コントローラーのアクションの中身を書く(DBの読み込み、書き込み、レスポンスの返却…etc)

GoでAPIサーバーを立てるときも基本的にやることは変わらず、この通り進めていけば問題ないです。

# じゃあ実際にGoでAPIサーバーを立ててみようか
んじゃ、実際にやってみましょう。

## 1. Goの環境を立ち上げる
railsでいうところのrails ne

元記事を表示

YAML形式のKubernetesマニフェストをGo言語のオブジェクトにデシリアライズする

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

本記事ではYAML形式のKubernetesマニフェストを読み込み、対応する型を持ったGo言語のオブジェクトにデシリアライズする方法を説明します。

`k8s.io/apimachinery`モジュールが提供する`yaml`パッケージの機能を利用することでこれを実現できます。

# 実装例と解説
以下は、YAML形式で書かれたPodのマニフェストファイルを読み取り、`core/v1`の`Pod`型を持つオブジェクトにデシリアライズし、[`client-go`](https://github.com/kubernetes/client-go/tree/master)を使ってGo言語のオブジェクトからKubernetesのPodオブジェクトを作成する例になります。この例で作成するPodは次の2種類になります。

1. 元々のマニフェストのフィールド値

元記事を表示

Goで簡易WEBサーバを作成

# 記事概要
簡易WEBサーバを作成。

# スクリプト
“`go
package main

import (
“log”
“net/http”
“net/http/httputil”
“net/url”
“os”
)

func main() {
port := “8080” // デフォルトのポート番号
ip := “0.0.0.0” // IP

// コマンドライン引数からポート番号を取得
if len(os.Args) > 1 {
port = os.Args[1]
}

// / へのアクセスが来た時に dist フォルダ内のコンテンツを表示するハンドラを設定
http.Handle(“/”, http.FileServer(http.Dir(“./dist”)))

// /hoge へのアクセスが来た時にリダイレクトするハンドラを設定
http.HandleFunc(“/hoge”, func(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, “http:

元記事を表示

宮廷プロファイラの紹介

# 宮廷プロファイラの紹介

## リポジトリ

devcontainerを用意しているので、

1. VSCodeで「コンテナーでフォルダを開く」
2. .env.templateの中身を変更して.envにリネーム
3. “`go run cmd/main/main.go“`

で動きます。
DiscordBotなので、

で、TOKENを発行する必要があります。
権限はCommandとAdministratorを渡しておけば大丈夫です。

## 概要

ISUCON用に作成したpprofのプロファイル結果をS3にアップロードするDiscordBotです。
ISUCON当初はプロファイルの画像をDiscord上にあげていましたが、
将来的にもっと詳細なプロファイルを取得したいのと、Webページでいろいろ見れるようにしたいのでS3にアップする方針にしました。

(イメージは以下のサイト。ISUCO

元記事を表示

echoで作るGo製Webサーバー

## echo
アドベントカレンダー2日目です。1日目は[こちら](https://qiita.com/shuyaeer/items/8b9f44c3f72615cb0548)
`echo`でwebサーバーを作ります。

https://github.com/labstack/echo

`echo`の特徴
“`
ルートを賢く優先する最適化されたHTTPルーター
堅牢でスケーラブルなRESTful APIを構築
APIのグループ化
拡張可能なミドルウェアフレームワーク
ルート、グループ、またはルートレベルでのミドルウェアの定義
JSON、XML、フォームペイロード用のデータバインディング
様々なHTTPレスポンスを送信するための便利な機能
集中化されたHTTPエラー処理
任意のテンプレートエンジンでのテンプレートレンダリング
ロガーのフォーマットを自由に定義
高度にカスタマイズ可能
Let’s Encrypt経由での自動TLS
HTTP/2サポート
“`

## echoのインストール
“`bash
docker-compose exec golang /bin/bash
“`

元記事を表示

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:/

元記事を表示

OTHERカテゴリの最新記事