Go関連のことを調べてみた2023年08月17日

Go関連のことを調べてみた2023年08月17日

Go言語向けNCMB SDKの使い方(プッシュ通知のCRUD操作)

NCMBはモバイル向けのBaaS(mobile Backend as a Service)ですが、サーバー側のデータとNCMB上のデータを連係させたいというニーズは良くあります。

そんなときには各言語向けのSDKがあると便利です。サーバー向けにはRuby、Python、PHP、Java、C#のSDKがあります(すべて公式サポート対象外の、コミュニティSDKという位置づけです)。

新しくGo言語向けのSDK開発をはじめたので、その使い方を紹介します。今回はプッシュ通知のCRUD操作について解説します。

## ソースコード

ソースコードはGitHubにて公開しています。ライセンスはMIT Licenseになります。

[NCMBMania/ncmb\_go](https://github.com/NCMBMania/ncmb_go)

## インストール

SDKのインストールは下記コマンドで行います。

“`bash
go get -u github.com/NCMBMania/ncmb_go
“`

## インポート

続けてSDKをインポートします。

“`go
imp

元記事を表示

【Go】ログイン機能でウェブアプリを作ってみる(11)

こんにちは。

Part 11は「ユーザー情報の取得 /restricted/user/me」です。

# 今回の目標
– ユーザー情報の取得処理を実装する!
– auth_middlewareの実装

前回まででログインはできるようになりました。
今回は本当にログインできているのか?確認するためのエンドポイントを作成します。

# 全体の流れの確認
– 仮登録 /auth/register/initial
– クライアントからemail, passwordを受け取る
– email宛に本人確認トークンを送信する
– 本登録 /auth/register/complete
– クライアントからemailと本人確認トークンを受け取る
– ユーザーの本登録を行う
– ログイン /auth/login
– クライアントからemail, passwordを受け取る
– 認証トークンとしてJWTを返す
– ユーザー情報の取得 /restricted/user/me
– クライアントからJWTを受け取る
– ユーザー情報を返す

#

元記事を表示

【Docker】Dockerのbest practicesをGo言語で

# はじめに

これは[Dockerのbest practices](https://docs.docker.com/develop/)をGo言語のイメージを例にやってみた、という内容の記事です。

Dockerの使い方は覚えたけれど、どのようなDockerfileにすれば良いのかわからない。という方に1つの例を提供することを目的としています。

## 環境

– Docker: Docker version 20.10.23, build v20.10.23

# Dockerfileサンプル

Dockerのbest practicesを参考に作成したDockerfileがこちらになります。

“`docker:Dockerfile
FROM golang:1.21.0-bullseye AS base
WORKDIR /app
COPY go.mod go.sum ./
RUN –mount=type=cache,target=/go/pkg/mod/ \
go mod download

FROM base AS dev
RUN go install github.

元記事を表示

structや定義した内容のjson:”id”などはどのような意味を持つのか

## structとは
構造体を決定するのに用いる。今回の場合だと、ユーザー情報の構造体を定義するのに用いている。

### 上記の内容からユーザーの情報を定義してみる
“` user.go
package model

import “time”

// ユーザーの構造体を定義
type User struct {
ID uint `json:”id” gorm:”primaryKey”`
Email string `json:”email” gorm:”unique”`
Password string `json:”password”`
CreatedAt time.Time `json:”created_at”`
UpdatedAt time.Time `json:”updated_at”`
}
“`

[こちら](https://qiita.com/NaoyukiSato/items/6dcd26725d01d0b6b2fa)の記事によると
>投げ入れられるjson名をそのままGoの世界で扱いたくないということはよくあ

元記事を表示

[Go]ポインタ

# 概要

* [前回](https://qiita.com/hasesiu/items/e488c1e8d9c73f2c7c44)の続き
* 今回はポインタについて以下を学習
* 変数からポインタの参照方法や、ポインタから値の参照法について
* ポインタとミュータブルの関係について
* マップやスライスが値渡しでない理由

参考

https://www.oreilly.co.jp/books/9784814400041/

# ポインタについて

* ポインタは参照先のアドレス値のこと。
* リテラル値とは別のメモリ空間で管理されている
* C言語とは異なり、ポインタの操作はデフォルトでは許可されていない

# ポインタ値の参照、逆参照

* ポインタ値は、`&変数`で取得する
* ポインタ値が参照している実際の値は、`*ポインタ変数`で取得する
* ポインタ型の変数をvarで宣言するには`*型`で行う
* ポインタの参照先がnilの場合、値は設定できない。そのため、ゼロ値と値なしを区別する際に利用することもある。(MapのカンマOkイディオムを使うほうがよ

元記事を表示

Azure Container Apps (ACA) に Go Gin カスタムコンテナイメージをデプロイする

# Azure Container Apps (ACA) に Go Gin カスタムコンテナイメージをデプロイする

こんにちは、株式会社船井総研デジタルの @fsdg-adachi_h です。今回は、Azure Container Apps 環境で、Go Gin Web アプリケーションをコンテナとして起動する方法を紹介します。
![gin_on_azure-container-apps.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/dbc0e1c7-1c10-e210-d0d3-3fea6d812b13.png)

## 目的

Windows 11 の Linux でクラウド開発します。

こちらから記事の一覧がご覧いただけます。

https://qiita.com/fsdg-adachi_h/items/6119ab05d8b13527efd8

## 実現すること

Microsoft Azure Container Apps (ACA) に Go Gin Web アプリケ

元記事を表示

[Go]関数

# 概要

* [前回](https://qiita.com/hasesiu/items/5773d13bf9710c448922)の続き
* 今回は関数について学習。
* 関数の宣言方法や、値渡しである点、クロージャやdefer等について

参考

https://www.oreilly.co.jp/books/9784814400041/

# 関数の宣言方法

* `func 関数名(引数) 戻り値`で宣言する

“`go
func div(a int, j int) int {
return a / j
}

// 引数の型はまとめて宣言できる
func div2(a ,j int) int {
return a / j
}

// …可変長引数(スライス)も可能
func addTo(base int, vals …int) []int {
out := make([]int, 0,len(vals))
for _, v := range vals {
out = append(out, base+v)
}
return out
}
“`

# 戻

元記事を表示

【Go】ログイン機能でウェブアプリを作ってみる(10)

こんにちは。

Part 10は「ログイン /auth/login」です。

# 今回の目標
– ユーザーのログイン処理を実装する!

前回はJWTの作成をできるようにしました。
今回は実際のログイン処理を実装したいと思います。

# 全体の流れの確認
– 仮登録 /auth/register/initial
– クライアントからemail, passwordを受け取る
– email宛に本人確認トークンを送信する
– 本登録 /auth/register/complete
– クライアントからemailと本人確認トークンを受け取る
– ユーザーの本登録を行う
– ログイン /auth/login
– クライアントからemail, passwordを受け取る
– 認証トークンとしてJWTを返す
– ユーザー情報の取得 /restricted/user/me
– クライアントからJWTを受け取る
– ユーザー情報を返す

全体としてこんな感じでした。
ログインにはどんな機能が必要でしょうか

# 必要な機能を考えよう!

元記事を表示

Docker 環境で Go Gin Webサービスを起動する

# Docker 環境で Go Gin Webサービスを起動する

こんにちは、株式会社船井総研デジタルの @fsdg-adachi_h です。今回は、WSL Ubuntu の Docker 環境で、Go Gin Web アプリケーションをコンテナとして起動する方法を紹介します。
![gin_on_docker.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/0d3c0acf-0e9d-8880-eae8-6b9a943ce0ff.png)

## 目的

Windows 11 の Linux でクラウド開発します。

こちらから記事の一覧がご覧いただけます。

https://qiita.com/fsdg-adachi_h/items/6119ab05d8b13527efd8

## 実現すること

ローカル環境の WSL Ubuntu の Docker 環境で、Dockerfile からビルドした Go Gin Web サービスのカスタムコンテナイメージを起動します。

**ネイティブ

元記事を表示

go mod tidy go.sumファイル

`go mod tidy`は、Goプログラミング言語で使用されるモジュール管理ツールである”Go Modules”のコマンドの一つです。このコマンドを実行すると、プロジェクトのモジュール依存関係ファイルである`go.mod`と`go.sum`が、プロジェクト内で実際に使用されているパッケージとそのバージョンに基づいて最適化されます。つまり、不要な依存関係が削除され、正確な依存関係が保持されます。これにより、プロジェクトのモジュール依存性がクリーンになり、管理が容易になります。

————

`go.sum`ファイルは、Goプログラミング言語で使用されるモジュール管理ツールである”Go Modules”によって生成されるファイルの一つです。このファイルは、プロジェクトのモジュール依存関係におけるパッケージのバージョンと、そのバージョンのハッシュ値(Checksum)の一覧を含んでいます。

`go.sum`ファイルは、プロジェクトが特定のバージョンのパッケージを使用していることを確認し、安全で信頼性の高い依存性管理を提供します。これにより、他の開発者が同じバージョンの依存

元記事を表示

Go言語向けNCMB SDKの使い方(ファイルストアの使い方)

NCMBはモバイル向けのBaaS(mobile Backend as a Service)ですが、サーバー側のデータとNCMB上のデータを連係させたいというニーズは良くあります。

そんなときには各言語向けのSDKがあると便利です。サーバー向けにはRuby、Python、PHP、Java、C#のSDKがあります(すべて公式サポート対象外の、コミュニティSDKという位置づけです)。

今回はGo言語向けのSDK開発をはじめたので、その使い方を紹介します。この記事ではファイルストアの使い方を解説します。

## ソースコード

ソースコードはGitHubにて公開しています。ライセンスはMIT Licenseになります。

[NCMBMania/ncmb\_go](https://github.com/NCMBMania/ncmb_go)

## インストール

SDKのインストールは下記コマンドで行います。

“`bash
go get -u github.com/NCMBMania/ncmb_go
“`

## インポート

続けてSDKをインポートします。

“`go
impor

元記事を表示

Go言語向けNCMB SDKの使い方(ACLの使い方)

NCMBはモバイル向けのBaaS(mobile Backend as a Service)ですが、サーバー側のデータとNCMB上のデータを連係させたいというニーズは良くあります。

そんなときには各言語向けのSDKがあると便利です。サーバー向けにはRuby、Python、PHP、Java、C#のSDKがあります(すべて公式サポート対象外の、コミュニティSDKという位置づけです)。

今回はGo言語向けのSDK開発をはじめたので、その使い方を紹介します。この記事ではACL(アクセス権限)の使い方を解説します。

## ソースコード

ソースコードはGitHubにて公開しています。ライセンスはMIT Licenseになります。

[NCMBMania/ncmb\_go](https://github.com/NCMBMania/ncmb_go)

## インストール

SDKのインストールは下記コマンドで行います。

“`bash
go get -u github.com/NCMBMania/ncmb_go
“`

## インポート

続けてSDKをインポートします。

“`go
i

元記事を表示

Goの標準ライブラリだけでJWTをデコードしてみたら意外と簡単だったwww

# はじめに
jwtをデコードしユーザー情報を取得する処理を書く機会があったのですが、Goではサードパーティ製のライブラリを使わずとも意外と簡単に実装できたので、コピペするだけで簡単に使用できるサンプルをここで共有したいと思います。
# サンプル
“`go
func decode(token string) ([]byte, error) {
// jwtはピリオド区切りで3つのパーツに分かれている
// [0]はヘッダー, [1]はペイロード, [2]はシグネチャー
// 今回必要なユーザー情報などはペイロードに含まれているため[1]を取得している
splitToken := strings.Split(token, “.”)
if len(splitToken) != 3 {
panic(err)
}
payload := splitToken[1]

// base64は文字数が4の倍数でないとデコードできないため末尾に”=”を挿入することでパディングする
paddingLength := ((4 – len(payload)%4) % 4)
paddi

元記事を表示

SQLを含めたユニットテストにgo-mysql-serverが便利

go-mysql-serverは、ピュアGoで書かれたMySQL互換のインメモリDBです。 READMEにあるようにサーバとして起動することもできますが、 database/sql/driverのDriverも用意されているので、プロセス内で完結することもできます。

このインメモリDBをいろいろなORMと組み合わせてユニットテストで使う方法を紹介します。

http://makiuchi-d.github.io/2023/08/12/go-mysql-server.ja.html

元記事を表示

Go Conference登壇、そしてGoにジェネリクスが必要だと思う理由

4/23に開催されたGo Conference 2022 Springで 「型パラメータが使えるようになったのでLINQを実装してみた」という発表をしました。

http://makiuchi-d.github.io/2022/05/04/gocon-2022-spring.ja.html

元記事を表示

【初学者】Goの関数を学び始めた時に、超役に立ったQiitaの記事

# Goについて勉強し始めたとき

これまでにreactやvue関連、pythonなどしかしてこなかった自分が仕事でGoを使うことになり勉強し始めた時にめちゃくちゃ役立った記事です。今回は関数周りでどうすればいいんだろう?と疑問に思った時に、大体が解決するようにまとめておいたものをそのまま記事用に落とし込んだものです。

誰かしらの何かしらの役に立てば嬉しく。
(あと自分用)

### 目次
1. [Goの関数の基本](#Goの関数の基本)
2. [関数の引数や戻り値](#関数の引数や戻り値)
3. [構造体との紐付け](#構造体との紐付け)
4. [エラーハンドリング](#エラーハンドリング)

↑この分類は適当です(笑)????????

# Goの関数の基本

– [Golang入門(関数)](https://qiita.com/gorilla0513/items/7e734c4e0680b5ea341d)

https://qiita.com/gorilla0513/items/7e734c4e0680b5ea341d

– [Golangの変数とか関数とか[基礎]](h

元記事を表示

[Go]シャドーイング、制御構文

# 概要

* [前回のつづき](https://qiita.com/hasesiu/items/ec3db4576ba94f17a0b6)
* 今回は、変数のシャドーイング(隠蔽)や、制御構文、関数についての学習
* 今回もJavaやts(typeScript)と比較しつつ、進める。

インプット資料

https://www.oreilly.co.jp/books/9784814400041/

# シャドーイング

* ブロックの外と内で同じ変数を宣言した場合の動作
* 内では、外の変数はシャドーイング(隠蔽)される。そのため、外の変数はアクセスできなくなる
* 内を抜けたら、外の変数が参照される
* バグの温床になるので、シャドーイングはしない。

“`go
x := 10
{
fmt.Println(x) //10
x := 5
fmt.Println(x) //5 -> x:=10のシャドーイング発生
}
fmt.Println(x) // 10 → x:=10のシャドーイング解除
“`

* (補足)Javaの場合
* ブロ

元記事を表示

golangでmap関数っぽいもの

何度も同じコードを書くので備忘録として。

“`
// mapArray T型配列をR型配列に変換する
func mapArray[T any, R any](values []T, conv func(t T) R) []R {
results := make([]R, len(values))
for i, v := range values {
results[i] = conv(v)
}
return results
}
“`

使い方
“`
intValues := []int{1, 2, 3, 4}
strValues = mapArray(intValues, func(v int) string {
return strconv.FormatInt(int64(v), 10)
})
“`

元記事を表示

PPAを使ってGoのバージョンを上げる方法

## はじめに

WSLのUbuntuにインストールしているGoのバージョンを上げる時に、PPAを利用した手順をよく忘れるので忘備録的な記事です。

## 上げ方

やり方自体はGoリポジトリのWikiにあります。

https://github.com/golang/go/wiki/Ubuntu

まず、各種パッケージの取得・更新をサクッとしましょう。

“`sh
sudo apt update && sudo apt upgrade -y
“`

次にPPAを利用して、Ubuntuの公式リポジトリからダウンロードできないGoのバージョンを取得します。
(普通に `sudo apt install golang`すると結構前のGoがインストールされてしまうので)

“`sh
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt update
sudo apt install golang-go
“`

あとはGoのバージョンを確認してください。

“`sh
go version
>>> go v

元記事を表示

SQLBoiler事始め

GoのORMライブラリSQLBoilerを使った簡単なサンプルを作ってみます。

DBはSQLite3を使用します。

– Go: v1.18
– SQLBoiler: v4.14.2

## プロジェクトの作成

“`
cd ~/go/src/github.com/TatsuNet
“`

“`
mkdir sql-boiler-sample
“`

“`
cd sql-boiler-sample
“`

“`
go mod init github.com/TatsuNet/sql-boiler-sample
“`

## SQLBoilerをまだインストールしていない場合はインストール

“`
go install github.com/volatiletech/sqlboiler/v4@latest
“`

“`
go install github.com/volatiletech/sqlboiler/v4/drivers/sqlboiler-sqlite3@latest
“`

“`
sqlboiler –version
“`

“`:出力
SQ

元記事を表示

OTHERカテゴリの最新記事