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

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

Goでfirebaseのstorageに画像保存する処理を作った

## はじめに
タイトルの通り、画像をアップロードする処理を作ったので、忘れないように残します。

## 環境
– Go: 1.20.4
– echo: v4.10.2(あんまり関係ないですが一応)
– firebase: v4.13.0
– storage: v1.30.1

## 前提
firebaseのプロジェクトは作成できている前提で進めます。
以下の公式の記事を参考に導入しました。

https://firebase.google.com/docs/admin/migrate-go-v4?hl=ja

https://firebase.google.com/docs/storage/admin/start?hl=ja

また、今回の紹介でgormも登場自体はするのですが、今のアプリケーション内で使ってはいるものの、今回のケースには関係ないので無視してください。

## ディレクトリ構成
以下の構成で実装しました。

“`
– sdk
– firebase
– storage.go // 画像処理周りのメインロジック
– firebas

元記事を表示

Go&React(Next.js)環境をDockerで作る

## 目的
GoとReactの環境をdockerで作成
調べてみると、reactコンテナフォルダの中にReactプロジェクトフォルダが作成されて、そこにインストールされるという情報が多い。
しかし、プロジェクトフォルダが作成される場合、1階層深く潜らないといけないので、コンテナフォルダ直下にReactをインストールしたい。

## Reactプロジェクト作成コマンド

“`sh
npx create-react-app my-app
“`

my-appというフォルダが作成される。
このフォルダを作成したくない。

:::note warn
※create-react-appは非推奨となっているそうです。
現在はフレームワークを利用してインストールすることが推奨されているようです。
:::

※Reactはフレームワークではなく、JavaScriptライブラリー。

### Reactフレームワーク
https://ja.react.dev/learn/start-a-new-react-project

よく目にするのは、Next.js でしょうか。

“`sh
npx cr

元記事を表示

Go REST API を作ってみる

GoでREST APIを作成する :baby_tone2:

下準備
“`bash
mkdir todo-go
cd todo-go
“`

プロジェクト作成
“`bash
go mod init example/todo-go
“`

パッケージ追加
“`bash
go get github.com/gin-gonic/gin
“`

実行
“`bash
go run .
“`

postmanの結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482880/e48231e6-4d54-8190-b5c6-cd4c1603d18c.png)

## ソースコード
“`go
package main

import (
“net/http”

“github.com/gin-gonic/gin”
)

type todo struct {
ID string `json:”id”`
Item string `json:”title”`

元記事を表示

Go でパッケージを自作して API を作ってみる:個人開発メモ

更新:2024年2月13日
Go でパッケージを自作して API を作ってみます。

# パッケージを自作して API を作成

フォルダ tmp20240213 を作って、その下に main フォルダ作ります。そして main.go を作って、 go mod init と go mod tidy します。

“`:Macbook Terminal
% pwd
/***/tmp20240213/main
% go mod init tmp20230213/main
go: creating new go.mod: module tmp20230213/main
go: to add module requirements and sums:
go mod tidy
% go mod tidy
% ls
go.mod main.go
“`

“`:test20240202/main/main.go
package main

import (
“net/http”
“tmp20240213/handler”
)

func main() {
http.HandleFunc(

元記事を表示

Goに入門

サーバー作りたいので`Go`で書いてみる:grinning:
まずは`Go`の基本的な書き方を確認:star:

## 実行
`.go`のあるフォルダでコマンド実行
“`
go run .
“`

## エントリーポイント
`main`関数が`Go`のエントリーポイントとなる
“`go
package main

import “fmt”

func main() {
fmt.Println(“hello world”)
}
“`
## パッケージ
標準ライブラリをパッケージとして読み込んで使う(多分:baby_tone2:)
[Standard library](https://pkg.go.dev/std)に色々載ってる
“`go
import “fmt”
“`

複数を読み込むときの書き方
“`go
// 一つずつ宣言しても良い
import “fmt”
import “reflect”

import (
“fmt”
“reflect”
)
“`

## 数値型
“`go
var num int
num = 1
num1 := 1

n

元記事を表示

Go 1.22 で面白いと思ったアップデート

# 概要

フューチャーのブログを読んでGo 1.22 についてのアップデートを読んでいて面白かった、すぐに利用できる部分のピックアップです。基本的にフューチャーのブログを参考にしていますので興味有る方は元記事読んでみてください!

追記:🚩 2024/02/07 リリースされました
https://go.dev/blog/go1.22

# slice を連結する `Concat()` API が追加になった

refs: https://future-architect.github.io/articles/20240130a/
更新PR: ([#56353](https://github.com/golang/go/issues/56353))

“` go
result := append(n1, append(n2, n3…)…)
“`

“` go
result := slices.Concat(n1, n2, n3)
“`

で書けるようになった!:+1:

## 空スライスやnil のときはどうなる?
Golang ではスライスは参照型であり n

元記事を表示

サポーターズ主催の技育CAMPに参加しての感想(企業賞受賞!) ③


サポーターズ主催の技育CAMPに参加しての感想 ③

**ダース・ベイダーサイド**

正直スターウォーズは見たことがない。

見ようとは思っているが時間がない。

だがダース・ベイダーは知っている。

なんか黒いやつだ。

多分、ラスボスだ。

なんとなくデータベースと語感が似ている。

多分なんか保管してくれるんだろう。

あとアース・ネイチャーにも似ている。

多分蚊を亡きモノにしてくれるんだろう。

あとナイスネイチャにも似ている。

多分可愛いんだろう。

まとめると

ダース・ベイダーは
黒くて、なんか保管する、蚊をやっつける可愛いラスボスなのです。多分。

**目次**
– [1. ハードサイド](#1-ハードサイド)
– [2. データベースサイド](#2-データベースサイド)
– [3. おわりに](#3-おわりに)

## 1. ハードサイド

**ラズベリーパイを使用した傾斜検知システムの開発**

[GCP, Go]Spanenr公式ライブラリのまとめ

ざっくり思い出すときの自分用メモ。詳細はリファレンスを参照。

# 1. DBのCREATE, DROP, LIST, DBスキーマの更新
– `google-cloud-go.spanner.admin.database.apiv1` パッケージ の `DatabaseAdminClient` を使う

DBを作成後、テーブルも即座に作成する[公式のサンプルコード](https://cloud.google.com/spanner/docs/getting-started/go?hl=ja#create_a_database) 。
コメント付与してみた。
“`sample.go
import (
“context”
“fmt”
“io”
“regexp”

database “cloud.google.com/go/spanner/admin/database/apiv1”
adminpb “google.golang.org/genproto/googleapis/spanner/ad

Next.jsのBFFから画像を送信したら届きそうで届かなかった話

![Screenshot 2024-02-13 at 17.59.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2373655/a15bd053-4fb8-1914-8c5d-bd3b5fd9fdeb.png)

# この記事を読んだ方がいい人

Javascriptに不慣れな人。

HTMLで当たり前のように遅れていた画像がBFFを通したら送れなくて困っている人

# この記事を読まない方がいい人

コーディングとネットワーク領域の両方に自信があるひと

# やりたかったこと

Next.jsで作ったフロントアプリケーションにて画像登録のフォームを作成した。

バックエンドAPIはGoで作ってある

# はまったポイント

BFFで画像をハンドリングする処理がうまくいかない。

## そもそもフォームデータって

フォームって一言で言っても画面UIとしての入力フォーム的なこととも言えるし、もう少し物理層チックなことを言ってそうな気もしますが、今回はHTTP通信においてのテキストとしてのフォームの

Go言語における環境変数使い方: osパッケージ

環境変数は、オペレーティングシステムにおける動作環境を定義するキーと値の組み合わせです。Go言語を用いたアプリケーション開発では、環境変数を活用することで、デプロイメントの柔軟性を向上させ、設定値を外部から注入することが可能になります。

Go言語の標準ライブラリであるosパッケージは、環境変数を操作するための関数群を提供しています。

### Getenvで環境変数の取得

`os.Getenv()` 関数を使用して、特定の環境変数の値を取得します。

“`go
package main

import (
“fmt”
“os”
)

func main() {
// “HOME” 環境変数の値を取得
home := os.Getenv(“HOME”)
fmt.Println(“Home directory:”, home)
}
“`
このコードスニペットは、ユーザーのホームディレクトリパスを表すHOME環境変数の値を取得し、出力します。

### LookupEnvで環境変数の取得

`os.LookupEnv()`関数は、`os.Get

About Composition as Code

CaC (Composition as Code) について。

https://www.infoq.com/jp/articles/cloud-computing-post-serverless-trends/?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global

> Infrastructure as CodeからComposition as Codeへと移行する大きなトレンドがあり、開発者は使い慣れたプログラミング言語を使用して、より直感的なクラウドサービスの設定ができる。

アプリケーションとインフラの責任の境界が曖昧になる中で CaC は次の paradigm になるかもしれない。

Cloud Development Kit for Terraform (CDKTF)[^1] について unlearn する。

## Environment
– Devcontainer で構築。

https://github.com/danny-yamamoto/cdktf-gke/blo

docker initでDocker環境構築

`docker init`で`Go`の`dockerfikle`を作って、中身を確認してみよう:eyes:

## docker init
対話形式で設定を決めていくスタイルなので、オプションを覚えなくても使えそう
“`bash
PS C:\Users\xxx\Documents\go-app> docker init

Welcome to the Docker Init CLI!

This utility will walk you through creating the following files with sensible defaults for your project:
– .dockerignore
– Dockerfile
– compose.yaml
– README.Docker.md

Let’s get started!

? What application platform does your project use? [Use arrows to move, type to filter]
? What application

SQLBuilderの仕様を考える INSERT仕様検討編

# 目的
GolangのSQLBuilerを作ってみたくて、仕様を考える。
今回はINSERT文の仕様を考えるが、SELECT+INSERTまで考えると複雑になるので
一旦保留にする

# 目指す形
ここではusersというTableに対応したUserというTableモデル構造体がある場合とする。
宣言としては、
“`
CREATE TABLE users (
id int,
name varchar(10)
)

CREATE TABLE tokens (
id int,
user_id int REFERENCES users.id,
token varchar(10)
)
“`
を想定する

## Insert

パッケージ名は仮でpkとして

“`go
pk.Insert().Into(pk.Table(“users”)).Value(1, “test”)

// INSERT INTO users VALUES(1, ‘test’)
“`

とすることを考えている。

カラムを限定する場合は

“`go
pk.Insert(“id”).Into(

GCPインスタンスでのheyインストール方法

## 概要
– GCPのインスタンスにheyをインストールする方法です。
– heyとは
– heyは、Go言語で書かれたHTTP負荷テストツールです。

## 参考URL
– [hey](https://github.com/rakyll/hey)
– [Goの最新バージョン](https://go.dev/dl/)
– 2024年2月時点での最新バージョンは、go1.22.0です。

## 環境
– GCPのComputeEngineなどのVMインスタンス。
– OSはDebian系(Ubuntu, Debian, etc)を想定。

## 事前準備
– 事前にGCPのインスタンスを作成しておく。
– インスタンスにSSHでログインしておく。
– マネジメントコンソール > ComputeEngine > VMインスタンス > SSHをクリックすると、SSHでログインできます。

## インストール手順
– SSHで接続したターミナルで以下のコマンドを実行します。
– Goのインストール
“`bash
wget https://dl.goo

サポーターズ主催の技育CAMPに参加しての感想(企業賞受賞!) ②


サポーターズ主催の技育CAMPに参加しての感想 ②

**博多華丸・大吉**

_スピーチとスカートは短い方が良い_

などと言われますが

_スライドとフライドも短い方が良い_

と私は思います。

スライドは短くシンプルに、フライドは軽くサクッと。

今回のハッカソンと、その後の打ち上げのソーセージフライドを食べて、そう感じたんですよね。

ま、私は発表の時、あがっていたんですけどね。

フライドだけに。

**目次**
– [1. 実装内容](#1-実装内容)
– [2. 背景・経緯](#2-背景経緯)
– [3. サーバーサイド](#3-サーバーサイド)
– [4. おわりに](#4-おわりに)

## 1. 実装内容

 [前回](https://qiita.com/come/items/40f778f59081118cd6f0)の続きです。

 私たちが今回実装したのは『鍵の観測者(オブザーバー)』というサービスです。

 これは「家などの鍵の締め忘れをすぐに通知し、戸締りを見張ってくれる

SQLBuilderの仕様を考える SELECT仕様検討編

## 目的

GolangのSQLBuilerを作ってみたくて、仕様を考える。
今回はSELECT文の仕様を考えるが、サブクエリまで考えると複雑になるので
一旦保留にする

## 目指す形

ここではusersというTableに対応したUserというTableモデル構造体がある場合とする。
宣言としては、

“`sql
CREATE TABLE users (
id int,
name varchar(10)
)

CREATE TABLE tokens (
id int,
user_id int REFERENCES users.id,
token varchar(10)
)
“`

を想定する

## Select

パッケージ名は仮でpkとして

“`go
pk.Select().From(pk.Table(“users”))

// SELECT * FROM users;
“`

とすることを考えている。

カラムを限定する場合は

“`go
pk.Select(“id”).From(pk.Table(“users”))

// SELECT i

依存性逆転の原則(DIP)と依存性注入(DI)についての理解

正しく理解できていなかったと思うので、ちゃんと言語化してみたいと思い書きます。

## 依存性逆転の原則(DIP)とは
> 依存性逆転の原則または依存関係逆転の原則(dependency inversion principle)とは[1]、オブジェクト指向設計の用語であり、ソフトウェアモジュールの疎結合を確立する特別な形態を表現したコンセプトである。SOLIDの五原則の一つとして知られる。
オブジェクト指向における従来の依存関係とは、上位モジュールから下位モジュールへの方向性であり、仕様定義を担う上位モジュールを、詳細実装を担う下位モジュールから独立させて、各下位モジュールを別個保存するというものだったが、それに対して依存性逆転原則は以下二点を提唱している[2]。

> 1.上位モジュールはいかなるものも下位モジュールから持ち込んではならない。双方とも抽象(例としてインターフェース)に依存するべきである。
2.抽象は詳細に依存してはならない。詳細(具象的な実装内容)が抽象に依存するべきである。
> wikipediaより

すごいざっくりですが、要は重要なプログラ

【Go初学者向け】Goの構造体を他言語のオブジェクトの感覚で操作したらハマった

# 注意点

– ポインタ型の話について詳しくは触れません。構造体+ポインタの話は他の記事を参照ください。
– 値渡し、参照渡しという単語を使わずに内容を記述します。

# この記事で伝えたいこと

– 構造体について
– オブジェクトに似ているのは見た目だけ!
– 変数としての動きは参照型ではなく値型!そのため、int や bool 等のいわゆるプリミティブな型と同じ動きをする!
– 構造体をポインタ型に変換しない状態で、引数に渡したり range の for で扱う際の動きに注意!

# この記事の対象読者

– Java や Ruby 等の他のオブジェクト指向言語の知識をベースに Go の学習に取り組み始めた方
– 構造体という、Go におけるオブジェクトのようなもの操作にまだ慣れていない方
– Go のコードの中で構造体を扱って、「不思議な動きするな…」と感じている方

# Go の構造体の操作でハマった

– 筆者は今まで Java や Ruby でコードを書いておりました。Go に関しては最近勉強を始めたばかりの初学者です。Go の勉強を進める中で、「構造体」とい

Go言語のGinフレームワークで静的ファイルを表示してみた


Go言語のGinフレームワークで静的ファイルを表示してみた

**現実味がありすぎると良くないことありますよね**

 いやー。空想は空想でいいんですよ?

 でも現実を謳っていて、現実味が欠けていると、ちょっとなあ、て思う時があります。

 
 まあいいんですけどね。

結局は変わらないものが良いんですよね。

**目次**
– [1. Ginフレームワークとは](#1-ginフレームワークとは)
– [2. コード例](#2-コード例)
– [3. おわりに](#3-おわりに)

## 1. Ginフレームワークとは

 `Gin`は、`Golang`で書かれたWebフレームワークです。

 `martini`に似た`API`を持ちながら、非常に優れたパフォーマンスを発揮し、最大で40倍高速であることが特徴です。

 `martini`(マティーニ)は`Go`言語で書かれたWebフレームワークで、モジュラー設計と使いやすさが特徴ですが、パフォーマン

Goを利用し、API経由で自分の草の情報を取得したい

# はじめに

GitHubのコントリビューション、俗にいう「草」の情報をGitHub APIを利用して取得する方法を紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/486da189-dab6-89be-4607-9d848451852f.png)

なお取得するのは自分のコントリビューション情報です。また言語としてはGoを利用します。

“`
$ go version
go version go1.20.3 linux/amd64
“`

# 事前準備

事前準備として、アクセストークンの作成を行います。

① アクセストークンの作成ページへ移動します。

https://github.com/settings/tokens

② Generate new token を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/5b43c