- 1. Go でパッケージを自作して API を作ってみる:個人開発メモ
- 2. Goに入門
- 3. Go 1.22 で面白いと思ったアップデート
- 4. サポーターズ主催の技育CAMPに参加しての感想(企業賞受賞!) ③
- 5. [GCP, Go]Spanenr公式ライブラリのまとめ
- 6. Next.jsのBFFから画像を送信したら届きそうで届かなかった話
- 7. Go言語における環境変数使い方: osパッケージ
- 8. About Composition as Code
- 9. docker initでDocker環境構築
- 10. SQLBuilderの仕様を考える INSERT仕様検討編
- 11. GCPインスタンスでのheyインストール方法
- 12. サポーターズ主催の技育CAMPに参加しての感想(企業賞受賞!) ②
- 13. SQLBuilderの仕様を考える SELECT仕様検討編
- 14. 依存性逆転の原則(DIP)と依存性注入(DI)についての理解
- 15. 【Go初学者向け】Goの構造体を他言語のオブジェクトの感覚で操作したらハマった
- 16. Go言語のGinフレームワークで静的ファイルを表示してみた
- 17. Goを利用し、API経由で自分の草の情報を取得したい
- 18. [Go言語]LINE ログイン連携方法 メモ
- 19. 開発環境の整備のためのDelve設定
- 20. Go言語で与えられた入力文字列が有効なMACアドレスの形式を満たしているかどうかを判断するIsMacAddressを作ってみた
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 mainimport (
“net/http”
“tmp20240213/handler”
)func main() {
http.HandleFunc(
Goに入門
サーバー作りたいので`Go`で書いてみる:grinning:
まずは`Go`の基本的な書き方を確認:star:## 実行
`.go`のあるフォルダでコマンド実行
“`
go run .
“`## エントリーポイント
`main`関数が`Go`のエントリーポイントとなる
“`go
package mainimport “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 := 1n
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 mainimport (
“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 initWelcome 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.mdLet’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
[Go言語]LINE ログイン連携方法 メモ
## 概要
* Go言語でLINEログイン連携する方法についてメモする。
## LINEログイン シーケンス
* 以下のようなLINEログイン連携シーケンスをGo言語で実装する。
“`mermaid
sequenceDiagram
participant U/A as U/A
participant WebApp as テスト用Webアプリケーション
participant LINE as LINEログインサーバー
participant ProfileAPI as LINEプロファイルAPIU/A->>WebApp: LINEでログインをクリック
WebApp->>U/A: LINEログインサーバーの認可エンドポイントへリダイレクト
U/A->>LINE: 認可エンドポイントにアクセスし、ログイン情報を入力
LINE->>U/A: 認可コードとともにテスト用WebアプリケーションのリダイレクトURLへリダイレクト
U/A->>WebApp: 認可コード
WebApp->>LINE: 認可コー
開発環境の整備のためのDelve設定
## 概要
EchoのAPI開発環境の整備のためにDelveを導入する。
また、airが導入済みの環境なので共存を目指す。## Delveとは
Goのコードデバックできるようにするライブラリとなっている。
https://github.com/derekparker/delve
使い方に困惑するところがあるのだが、IDEと組み合わせることで実行処理を途中で止めれるようになりので、うまく動作しないときや実装の結果確認といった確認作業がリアルタイムできるようになる。確認のためのログ仕込みとかが不要になるのでGoの開発においては導入しておくと便利だと思っている。
イメージ的には、Railsのbyebugに近いものではある。
IDEと組み合わせないとコンソール上でブレークポイントの設置などをしなくてはならないです。## Delveの導入
利用しているDockerfileに以下のコマンドを追加する
“`
RUN go install github.com/go-delve/delve/cmd/dlv@latest
“`その後、`docker compose build`
Go言語で与えられた入力文字列が有効なMACアドレスの形式を満たしているかどうかを判断するIsMacAddressを作ってみた
—
Go言語で与えられた入力文字列が有効なMACアドレスの形式を満たしているかどうかを判断するIsMacAddressを作ってみた
—**Happy set**
「キェェェェェェアァァァァァァシャァベッタァァァァァァァ!!!」
「マタシャベッタァ!!!!」
「ハッピィィデェェウメツクシィィテェェエ!!!」
「レストインピィィィッッスマデイコウゼ!!」
「イツカミタァァァ??!ジゴクモイイトコロッッオォォゥ!!」
「アイォヲヲヲバラマイテェエィィィイエエ!!!!!」
**目次**
– [1. MACアドレスとは](#1-macアドレスとは)
– [2. コード例と実行例](#2-コード例と実行例)
– [3. おわりに](#3-おわりに)## 1. MACアドレスとは
MACアドレス(Media Access Control Address)とは、ネットワーク内のデバイスを一意に識別するために使用される固有の識別子です。
MACアドレスは通常、6つの2桁の16進数がコ