- 1. Go で New Relic を試してみた
- 2. func (u *User) GetTodosByUser() (todos []Todo, err error) {} スキャンとは
- 3. 【Go】デコード、エンコードの実装例(marshal、unmarshal)
- 4. 【Go】簡単なGetAPIの作成
- 5. Go言語で外部APIを呼び出しとJSONの取り扱いについて
- 6. Next.js+Goでキャリアの意思決定を投稿できるサービスをつくりました
- 7. 【Go】ログイン機能でウェブアプリを作ってみる(5)
- 8. Go言語で SQL query に(可変長な)複数のパラメータを渡したい
- 9. Go+Echo+GORM(mysql)+DockerでSession,JWT付きログインWebアプリ
- 10. GoでリクエストのJSONの一部をソートしたりエンコードしたり
- 11. Go言語でHTTPSサーバーを作成する
- 12. 【Go入門】Ubuntuでの環境構築から基礎まで【備忘録】
- 13. defer文の中でエラーハンドリングするときにエラーを握りつぶさないようにする
- 14. 【Go】ログイン機能でウェブアプリを作ってみる(4)
- 15. 【Go】config.iniファイルの読み込み
- 16. Goで始めるGraphQL Federation
- 17. [GCP] BigQueryの機能調査x実装
- 18. GolangでNCMBにリクエストを送る
- 19. Golang 空インターフェイスと型アサーション
- 20. 自動作曲アプリを書く
Go で New Relic を試してみた
作成:2023年7月30日
お試しで New Relic を触ってみました。# ライセンスキーの確認
[このリンク先](https://docs.newrelic.com/jp/docs/apm/agents/go-agent/installation/install-new-relic-go/#get-new-relic)にあるリンク「[アカウントのライセンスキー](https://one.newrelic.com/api-keys)」でライセンスキーを確認します。
# エージェントのインストール
import するためにインストールします。
“`:MacBook Terminal
go get github.com/newrelic/go-agent/v3/newrelic
“`# main.go を作
func (u *User) GetTodosByUser() (todos []Todo, err error) {} スキャンとは
“`
// GetTodosByUser は特定のユーザーに関連するTodoリストを取得します。
func (u *User) GetTodosByUser() (todos []Todo, err error) {
// SQLコマンドを定義します。?はプレースホルダーで、後で実際の値に置き換えます。
cmd := `select id, content, user_id, created_at from todos where user_id = ?`// データベースから結果セットを取得します。
rows, err := Db.Query(cmd, u.ID)
if err != nil {
// エラーが発生した場合はログに記録して、エラーを返します。
log.Fatalln(err)
return nil, err
}
defer rows.Close()// 結果セットからTodoを取得します。
for rows.Next() {
// 新しいTodoオブジェクトを作成します。
var todo Todo// 現在の行
【Go】デコード、エンコードの実装例(marshal、unmarshal)
# はじめに
GoでAPIを作成する際などに、marshal、unmarshalがよく登場するので、使用例を簡単にまとめておきます。# 使用例
“`go:main.go
package mainimport (
“encoding/json”
“fmt”
)// structの定義
type Person struct {
Name string `json:”name”`
Age int `json:”age”`
Email string `json:”email”`
}func main() {
// エンコードするデータ(Person型の変数)
person := Person{
Name: “John”,
Age: 25,
Email: “john@example.com”,
}// データをJSON形式にエンコード(marshal)
jsonData, err := json.Marshal(person)
if err != nil {
fmt.Println(“Error encoding JS
【Go】簡単なGetAPIの作成
# 実装
“`go:main.go
package mainimport (
“encoding/json”
“fmt”
“net/http”
)// データの構造体 (仮のデータ)
type Data struct {
ID int `json:”id”`
Name string `json:”name”`
}func main() {
// APIエンドポイントのハンドラを登録
http.HandleFunc(“/api/data”, getData)// サーバーを起動 (ポート: 8080)
fmt.Println(“サーバーを起動します…”)
go func() {
err := http.ListenAndServe(“:8080”, nil)
if err != nil {
fmt.Println(“サーバーの起動に失敗しました:”, err)
}
}()
fmt.Println(“サーバーは起動しています。”)// サーバーが起動している間、メインの処理をブロックする
select {}
Go言語で外部APIを呼び出しとJSONの取り扱いについて
# はじめに
今日はGo言語を用いて外部APIを呼び出し、その結果をJSON形式で取り扱う方法について記載します。
これはWebサービスを開発する際によく用いられる技術で、非常に役立つスキルです。# 必要なパッケージのインストール
まずはじめに、`net/http`と`encoding/json`という2つのパッケージが必要となります。これらはGo言語の標準ライブラリに含まれているので、追加でインストールする必要はありません。
# 外部APIの呼び出し
まず、`net/http`パッケージを使って外部APIを呼び出します。`http.Get`関数を使うと、HTTPのGETリクエストを送ることができます。
以下に簡単な例を示します。
“`go
package mainimport (
“fmt”
“net/http”
)func main() {
// http.Getを用いて外部APIを呼び出す
resp, err := http.Get(“https://api.example.com/data”)
// エラーハンドリング
if err !=
Next.js+Goでキャリアの意思決定を投稿できるサービスをつくりました
# つくったもの
キャリアの意思決定があつまるサービス「Wellbi(ウェルビ)」をつくりました。
意思決定、入社・退職エントリ、ジョブチェンジ、転職体験談などキャリアに関するものならなんでも投稿できます。よかったら投稿してみてください〜〜>< https://wellbi.vercel.app # かかった期間 5ヶ月。 (企画〜デザイン〜開発〜リリース) # つくってみてどうだった? スポットでエンジニア友達に手伝ってもらったりはしたものの、ベース1人でサービスをつくりきるのは結構大変でした(もはや手伝ってもらった時点で個人開発ではないのかもしれない...)。つけたい機能があったり、UIをリッチにしたいなあと思ったりすることが多々ありますが、持ってるアセット・リソースとの相談なのでミニマムでリリースできるようにすることを心がけました。 # どこが大変だった? フロント・バックエンドを1人で開発していくと自分の足りない技術が見えてくるので、そこのキャッチアップが大変でした。大変ですが「どうやって実装しよう?」と考え、自身の技術力と相談して形にしていくのは実際やってみると結構楽
【Go】ログイン機能でウェブアプリを作ってみる(5)
こんにちは。
Part 5は仮登録 /auth/register/initial (1)の解説についてです。
# 目標
– ユーザーの仮登録を実装する今回から仮登録処理を行なっていきます。
## 全体の流れの確認
– 仮登録 /auth/register/initial
– クライアントからemail, passwordを受け取る
– email宛に本人確認トークンを送信する
– 本登録 /auth/register/complete
– クライアントからemailと本人確認トークンを受け取る
– ユーザーの本登録を行う
– ログイン /auth/login
– クライアントからemail, passwordを受け取る
– 認証トークンとしてJWTを返す
– ユーザー情報の取得 /restricted/user/me
– クライアントからJWTを受け取る
– ユーザー情報を返すこんな感じでした。
では、仮登録にはどんな機能が必要になるでしょうか。
## 必要な機能を考えよう!
箇条書きしてみます。
Go言語で SQL query に(可変長な)複数のパラメータを渡したい
# 初めに
Go言語においてSQLのqueryに(可変長な)複数のパラメータの渡したかったのですが、いい記事が見つからなかったのでまとめてみました!同じことで困っている人の一助になれれば幸いです!!# 環境
Hard: **Inter Mac**
OS: **Monterey 12.0.1**
Golang: **go version go1.20.5 darwin/amd64**# 事前に知っていたこと
Go言語ではsymbol(手元の環境では ‘?’ )を SQL query に指定することで変数を受け取り可能です。
一つの例を示します。“`ex1.go
rows, _ := db.Query(“SELECT * FROM テーブル名 WHERE address LIKE ‘%?'”,変数)
“`
([参考資料](https://graff-it-i.com/2021/06/24/golang-mysql-like/)より引用)# やりたいこと
上記の query で指定している**変数**が状況に応じて要素数が変化するような**配列データ**だった場合に、Go
Go+Echo+GORM(mysql)+DockerでSession,JWT付きログインWebアプリ
# はじめに
どうも、Shakkuです。
都内某高専情報科の3年生です。(2023/7/27時点)
Go言語をお勉強し始めてから何ヶ月か経過したある日、そろそろちゃんとしたものを作ってアウトプットしたいなーと思ったので、作成,投稿してみました。
作成したものは、GitHubにもあげています。(https://github.com/Shakkuuu/echo-login-app)どんなコードかだけ見たい方は上のGitHubを、ざっくりとした構成や使用技術の概要も見たい方は、下の「概要」「構成」を、コードの中身の説明も見たい方は、最後まで読んでいただければと思います。
# 概要
Signup、Login、ログイン後のメモ登録機能があるWebアプリ。
メモには、作成したユーザーのユーザーIDが紐づけられているため、そのユーザーだけに表示され、ユーザーが削除されると連動してそのユーザーが作成したメモも削除される。Docker、DockerComposeを使用して、バックエンド・API・DBのサーバーを同一ネットワークでたてている。
フロントエンド?をHTML、
GoでリクエストのJSONの一部をソートしたりエンコードしたり
# 概要
Goがまだ扱い慣れてないので、色々触ってみようということで色々触ってみました?
リクエストボディの一部をソートしてからBase64でエンコードしてみただけですが、色々ということにしといてください。# 準備
要件的な何かを準備して、どういう思考プロセスで進めたか残しておきます。– ユーザーは名前と年齢とタスクを持つ
– ユーザーはタスクを複数持つ
– タスクはタイトルと締切を持つ
– タスクは締切の昇順でソートする
– リクエストはユーザー情報にユーザーが持つタスクを含んだJSON形式(`application/json`)で送る(例:`example.json`)
– ソートした内容のJSONをBase64でエンコードする“`json:example.json
{
“name”: “taro”,
“age”: 20,
“tasks”: [
{
“task”: “task2”,
“deadline”: “2023/01/31”
},
{
“task”: “task1”,
“dea
Go言語でHTTPSサーバーを作成する
## はじめに
Go言語はシンプルさと効率性を重視して設計されており、その強力な標準ライブラリのおかげで、HTTP/HTTPSサーバーを短時間で立ち上げることができます。
今回は、Goの `net/http` パッケージを使って、HTTPSサーバーを作成します。## 必要なもの
– Go言語の開発環境
– SSL/TLS証明書と秘密鍵SSL/TLS証明書は、通信の安全性を保証するためにHTTPS接続で必要となります。証明書は信頼された認証局から購入することも、自己署名証明書を作成することも可能です。今回は、証明書と鍵のファイル名をそれぞれ `cert.pem` と `key.pem` とします。
## コード
以下が、基本的なHTTPSサーバーのコードです。
“`go
// mainパッケージを宣言します
package main// 必要なパッケージをインポートします
import (
“fmt”
“log”
“net/http”
)// handler関数はHTTPリクエストを処理し、”Hello, HTTPS!”というレスポンスを返します
fun
【Go入門】Ubuntuでの環境構築から基礎まで【備忘録】
# はじめに
この記事はGoについて何も知らなかった時の自分へ向けた備忘録です。
まずはGoの環境構築を行い、最小限のGoプログラムの実行からエラー制御、構造体などについてをまとめています。
## 環境
– Ubuntu 22.04.2 LTS
– go version go1.20.5 linux/amd64# Go環境構築
## Goのインストール
以下はUbuntu環境の場合の手順です。その他のプラットフォームをお使いの場合は、[Download and install – The Go Programming Language](https://go.dev/doc/install)でインストール手順を確認し、[All releases – The Go Programming Language](https://go.dev/dl/)から必要なファイルをダウンロードしてください。
“`bash
$ rm -rf /usr/local/go && tar -C /usr/local -xzf go1.20.5.linux-amd64.tar.gz
“`
defer文の中でエラーハンドリングするときにエラーを握りつぶさないようにする
このミスを2回やらかしたので備忘録として書いておきます。
# やらかしたコード
– defer文の中で何らかの処理を行いたい。そこでエラーが発生したら、それをもちろんハンドリングしたい。その際に、以下のように書くと元々存在していたエラーを上書きしてしまう。“`go
func hoge() error {
// 何らかの処理defer func() {
err = cleanUp()
}// 何らかの処理
return err
}
“`# 修正例
例えば以下のようにすれば、元の関数で発生したエラーと、defer文内で発生したエラーを両方とも検知できる。“`go
import (
“go.uber.org/multierr”
)func hoge() error {
// 何らかの処理defer func() {
err = multierr.Append(err, cleanUp())
}// 何らかの処理
re
【Go】ログイン機能でウェブアプリを作ってみる(4)
こんにちは。
Part 4はdocker-compose.ymlの解説についてです。
# 今回の目標
– docker-compose.ymlをなんとなく理解しよう!
– docker compose コマンドの使い方を覚えよう!## なんでdockerを使うの?
前回 docker-compose.yml を作成し、MySQLコンテナを起動しました。しかし
なんでわざわざこんなことをするのでしょうか?
理由の一つとして 「ローカル(自分のPC)からの影響を排除したい」 と言うのがあります。
例えばコンテナを起動せずにもともとPCに入っているMySQLアプリを使ったとします。
自分のPCのMySQLは日本語対応が済んでいる、とします。
開発中は日本語でも問題ありません。すでに日本語対応したMySQLを使っているからです。
しかし、実際のサーバーにMySQLを入れる時に日本語対応ができておらず、アプリを実行するとエラー。
だったら「初めから」の状態のもの、実際のサーバーとできるだけ近いものを準備し、そこから始めた方が後々の問題を回避できます。だから「自分のPCからの影響
【Go】config.iniファイルの読み込み
# はじめに
Go言語の勉強メモです。
config.iniで指定してあるAPIキーを読み込ませる部分の実装になります。# フォルダ階層
config/
├ main.go
├ config.ini
├ go.mod
├ config/
| └ config.go# パッケージのインストール
config.goファイル内の、”gopkg.in/ini.v1″パッケージを以下の手順でインストールする。・go mod init sample(任意の名前)
→ go.modの作成(go関連のパッケージをインストールするのに必要)
・go get gopkg.in/ini.v1# 実装
“`ini:config.ini
; セクションヘッダー
[api_info]
api_key = XXXXXXXXXX
api_secret = YYYYYYYYY
“`“`go:config.go
package config//必要なパッケージのインポート
import (
“log”
“os”
“gopkg.in/ini.v1”
)type Co
Goで始めるGraphQL Federation
この抜粋の内容は次のとおりです。
– Subgraph Server の実装
– Gateway Server の実装
– Subgraph を通す
– Gateway を通す“`mermaid
flowchart LR
Gateway[“Gateway
Bramble”]
Subgraph[“Subgraph
gqlgen”]
Client –> Gateway –> Subgraph
“`さらに詳しく知りたい方は読み続けてください。
—
2023年7月4回目です。
GraphQL Fedetaion についてです。
弊社のモバイルアプリの1つは、ユーザーのネットワーク帯域幅による影響を避けるため、GraphQL を BFF として使っています。
単一ドメイン業務においては、1つの GraghQL で問題ないと思います。
しかし、複数のドメイン業務を扱う場合、各チームは独立して自分たちの GraphQL サービスを開発するため、Supergraph(GraghQL Federation)[^1] にしていく必要が
[GCP] BigQueryの機能調査x実装
# GCPのBigQueryの概要と機能
## 概要
Google Cloud Platform(GCP)のBigQueryは、大規模なデータセットを効率的に保存し、クエリを実行するためのデータウェアハウスサービス。BigQueryは、高速でスケーラブルなデータ分析を実現し、ビジネスインテリジェンス(BI)や機械学習などの応用に利用される。また、クエリの実行結果のリアルタイムダッシュボードの作成や、ストリーミングデータの分析もサポートしている。## 主な機能
### 1. ペタバイト規模のデータセットの格納
BigQueryは非常に大容量のデータセットを処理できる。データは、自動的に分散され、複数のサーバーで並列に処理されるため、スループットとパフォーマンスが最適化される。データの格納や管理についても、ユーザーが意識する必要はない。### 2. スキーマレスなデータベース
BigQueryは、スキーマレスなデータベースとして機能する。データを格納する際、スキーマを事前に定義する必要はない。そのため、異様な形式のデータでも簡単に格納でき、また、JSONやAvro、Parquet
GolangでNCMBにリクエストを送る
NCMBでは各種言語向けにSDKを提供しています。公式ではない、コミュニティSDKを入れると10以上あるかと思います。
今回はGo言語でNCMBへのリクエストを送信してみました。問題になるのは署名生成プロセスなので、そこを関数化したことで、今後のSDK化も考えられそうです。
## 必要なライブラリ
今回利用したライブラリは以下の通りです。
“`go
import (
“fmt”
“crypto/hmac”
“crypto/sha256”
“encoding/base64”
“net/url”
“sort”
“time”
“encoding/json”
“github.com/go-resty/resty/v2”
“github.com/tidwall/gjson”
)
“`## 定数の定義
利用した、基本となる定数です。
“`go
// 定数の定義
const (
ApplicationKey = “YOUR_APPLICATION_KEY”
SignatureMethod = “HmacSHA256”
SignatureV
Golang 空インターフェイスと型アサーション
# 空のインターフェイス
go言語は全ての型と互換性のある空インターフェイス型を宣言できる。“`golang
var kara interface{}kara = 100
fmt.Println(kara)
fmt.println(&kara)kara = “Empty”
fmt.Println(kara)kara = [4]string{“K”, “A”, “R” “A”}
fmt.Println(kara)
“`##### 実行結果
“`
100
0xc000080ec0
Empty
[K A R A]
“`## 型アサーション
どんな型でも受け取れる空インターフェイスですが、逆に引数で受け渡された値は元の型の情報が欠落しています。
そのためGo言語では型アサーションを提供しており、型アサーションによりその受け取った型が何であるかを以下のように動的にチェックすることができます。##### 構文
“`
t, ok := i.(T)“`
i が T(型名) を保持していれば、 t は基になる値になり、 ok は真(true)になります。
自動作曲アプリを書く
# はじめに
卒業研究で自動作曲システムを作ったので、応用してブラウザで動くアプリを作ろうと思いました。# 目次
1. [アプリの概要](#Chapter1)
1. [フロントエンド](#Chapter2)
1. [バックエンド](#Chapter3)
1. [ソースコード](#Chapter4)
1. [今後の課題](#Chapter5)
# アプリの概要
キーを選択し、ダウンロードボタンをクリックすると、MIDIファイルが入ったZIPファイルがダウンロードされます。
![スクリーンショット 2023-07-24 181911.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733784/72a82c9b-ae9d-3497-d0a2-8d622515df59.png)
![image.png](https://qiita-image-s