- 1. Go言語のバージョンを切り替えるためのgoenvをインストールする方法
- 2. Go の context
- 3. 奉行クラウドのタイムレコーダー打刻を自動化するためのツールを作った
- 4. 【Go】mongo-go-driverのFindで特定フィールドのみ取得
- 5. Go: JWT のペイロード部をデコード
- 6. Go とシグナルの検出
- 7. Golang の標準ライブラリのみで、時間や配列、カスタム構造体(独自の型)を引数として受け取れるようにする
- 8. blackfriday/v2でlinkにrel=”noreferrer noopener”, target=”_blank”を付与する
- 9. Go: Firebase Auth のトークンの作成
- 10. AWS × Nuxt.js × Go で初めて自作 Web アプリ作ってみた
- 11. GoでJpegからWebpへの変換
- 12. Goの基礎知識(概念や、プログラミング言語共通の考え方)(自分リファレンス用)
- 13. CentOS 8(CentOS 8 Stream)にGoをインストールする
- 14. Go: JWT の実装
- 15. Golangでひらがな、カタカナ、漢字を判定する
- 16. Rで素数判定と効率化について(JavaScript,Python,Goを含む)
- 17. Go: 自作したモジュールの使い方
- 18. gin-jwt の使い方 (その2)
- 19. go-kintoneでのレコードの更新(PUT)のやり方
- 20. Go 1.16 ドラフトリリースノート 日本語訳
Go言語のバージョンを切り替えるためのgoenvをインストールする方法
“`
git clone https://github.com/syndbg/goenv.git ~/.goenv
“`
として`~/.goenv`を作成する。その後`.zshrc`に環境変数とgoenvの初期化を追加する。“`bash
export GOENV_ROOT=”$HOME/.goenv”
export PATH=”$GOENV_ROOT/bin:$PATH”
eval “$(goenv init -)”
“`記述したら、`source ~/.zsrhc`として設定を再読込する。この状態でgoenvが使えるようになる。
次にgo 1.14.14をインストールする。
“`
goenv install 1.14.14
“`詳細なgoenvのインストールは、[goenv/INSTALL.md at master · syndbg/goenv](https://github.com/syndbg/goenv/blob/master/INSTALL.md#installation) を参照すること。
Go の context
Go を書くときに何となく書いてしまっている `context` を運用可能に持っていく。
# お題
Context を使って、リクエストを投げている時に、一定の時間がたったらグレースフルにリクエストを停止するプログラムを書く。リクエストを処理する関数の方では、Context の Value を取得すること
上記のお題をさっと書けるように、いろいろ調べてみよう。
# Context とは
Go Lang のコンテキストは、デッドライン、キャンセレーションシグナル、他のリクエストスコープのバリューを伝播させるものである。 C# とかでいうところの、CancellationToken に近い雰囲気を持っている。これを理解していこう。
* [Go Context Package](https://golangdocs.com/golang-context-package#:~:text=GoLang%20context%20package%20defines%20the%20Context%20type,%20which,function%20calls%20between%20
奉行クラウドのタイムレコーダー打刻を自動化するためのツールを作った
# Motivation
弊社の出勤退勤では奉行クラウドを利用していますが、奉行クラウドは公式からデスクトップクライアントを提供していないのでタイムレコーダーの打刻のためにわざわざブラウザから奉行クラウドのページを開いて打刻のボタンを押す必要があります。
この作業が実に面倒くさいし外出/再入などは結構忘れる事が多いのでどうにかならんもんかなと思って自動化することにしました。# TL;TD
マルチプラットフォーム環境に対応したCLIで奉行クラウドで打刻できるClientを作成しました。
[bugyo-client-go](https://github.com/tomtwinkle/bugyo-client-go)
こんな感じで使えます。“`bash
# 出勤
bugyoclient punchmark –type in# 退出
bugyoclient punchmark –type out# 外出
bugyoclient punchmark –type go# 再入
bugyoclient punchmark –type return
“`Windo
【Go】mongo-go-driverのFindで特定フィールドのみ取得
## 概要
MongoDBでもRDBのSELECT分同様に、特定のフィールドのみ取得する機能が用意されています。[How to select fields in a document in MongoDB](https://learnwithparam.com/blog/how-to-select-fields-in-a-mongo-query/)の記事にある通り、findメソッドの引数で取得するフィールド名を指定します。
今回はこの操作をmongo-go-driverでどのように実装すれば良いかというのを書きます。## 対応
[remove a field from mongodb query result in golang](https://stackoverflow.com/questions/64145702/remove-a-field-from-mongodb-query-result-in-golang)の記事にある通り、`options.FindOne().SetProjection`のメソッド(複数行取得の場合は`Find()`)に取得フィールドを指定します。指
Go: JWT のペイロード部をデコード
こちらのプログラムを Go で書き換えました。
[Node.js: JWT のペイロード部をデコード](https://qiita.com/ekzemplaro/items/3e2c1e9cf9189a79b27c)
[Python3: JWT のペイロード部をデコード](https://qiita.com/ekzemplaro/items/e24d6af29ddc01683417)“`go:decode_jwt.go
// —————————————————————
//
// decode_jwt.go
//
// Feb/07/2021
// —————————————————————
package mainimport (
“fmt”
“os”
“strings”
“io/ioutil”
b64 “encoding/base64”
)// ——————-
Go とシグナルの検出
今日はとっても簡単なお題なのだけど、ちゃんと理解していないトピックとして、Go 言語でのシグナルのハンドリングについて書いてみたい。
# お題
タイマーと、go routine と、シグナルの割り込みのいづれか一番早く発生した内容表示して、プログラムを終了する。シグナルの場合はシグナルの内容を表示する。
# シグナルのハンドリング
次のサンプルがほぼすべてになります。
“`go
sig := make(chan os.Signal, 1)
signal.Notify(sig, syscall.SIGTERM, syscall.SIGINT)s := <-sig fmt.Printf("Signal received: %s \n", s.String()) ``` `os.Signal` のチャネルを作成します。その後、`signal.Notify`で監視すべきシグナルを列挙します。すると、そこに列挙されたシグナルが発生すると、作成したチャネルにメッセージが通知されます。`os.Signal` の Struct は `Value()` と、`String()` を持
Golang の標準ライブラリのみで、時間や配列、カスタム構造体(独自の型)を引数として受け取れるようにする
## 想定読者
– **Go で CLI 作成時の引数処理に困っている人**
– 特に、コンマ区切りの配列や特定のjsonを受け取りたいケース
– Go の標準ライブラリに慣れ親しみたい人
– 特に flag を使ったフラグ付きの引数処理## 要約
Go の標準ライブラリ(標準パッケージ) [flag](https://golang.org/pkg/flag/) を用いて `Value` インターフェースを実装することで、**時間や配列、カスタム構造体を引数として受け取る**実装を**シンプルに**実現できます。
日本語読むより、[こちらのレポジトリ](https://github.com/nrnrk/go-flag-example)を見ていただくのが早いかもしれません。
## flag パッケージ
[flag パッケージ](https://golang.org/pkg/flag/)とは、Go の標準ライブラリでコマンドラインのフラグをパースするツールです。 [viper](https://github.com/spf13/viper) という有名パッケー
blackfriday/v2でlinkにrel=”noreferrer noopener”, target=”_blank”を付与する
# 説明
WordPressからオレオレブログ開発&移行しているのですが、blackflidayをv2にして表題の件を試みました。問題はほぼ無いのですが、特定状況下でハマったので合わせてメモしておきます。# 環境
– Windows10
– Visual Studio Code
– go version go1.15.5 windows/amd64# Code
“`go
package mainimport (
// …省略
“github.com/russross/blackfriday/v2”
)func main() {
// …省略htmlFlag := blackfriday.NoopenerLinks | blackfriday.NoreferrerLinks | blackfriday.HrefTargetBlank
renderer := blackfriday.NewHTMLRenderer(blackfriday.HTMLRendererParameters{Flags: htmlFlag})
html := b
Go: Firebase Auth のトークンの作成
“`go:get_token.go
// —————————————————————
//
// get_token.go
//
// Feb/06/2021
// —————————————————————
package mainimport (
“fmt”
“os”
“io/ioutil”
“net/http”
“net/url”
“encoding/json”
“github.com/joho/godotenv”
)// —————————————————————
func main() {fmt.Fprintf (os.Stderr,”*** 開始 ***\n”)
email := os.Args[1]
password := os.Args[2]
fmt.Fprintf (os.S
AWS × Nuxt.js × Go で初めて自作 Web アプリ作ってみた
## はじめに
業務では普段Javaの独自フレームワークやSVN、Db2といったあまり汎用性のない技術スタックで開発をしているため、新しい技術を自分で追っかけていたりするのですが、今回初めて使ってみたい技術を詰め込んで Web アプリを作ってみました。記事を書くことにも不慣れなため、お見苦しい部分が多々あるかと思いますが、間違い等あればコメントいただけると泣いて喜びます。
## 使用した技術
### 言語
– バックエンド(Go, Gin-Gonic)
– フロントエンド(Nuxt.js)### インフラ
– AWS(VPC, Route53, ALB, ACM, EKS, S3, CloudFront, CloudWatch)
– コンテナ(Docker, docker-compose)
– データベース(MySQL)
– Kubernetes
– Terraform
– CI/CD(GitHub Actions)ソースコードは[こちら](https://github.com/nigoroku/amb-front)
※詳細は README.md にも載せています##
GoでJpegからWebpへの変換
# 開発環境
– Windows10
– Visual Studio Code
– go version go1.15.5 windows/amd64# Code
“`go:main.go
package mainimport (
“log”
“os”“github.com/chai2010/webp”
“github.com/disintegration/imaging”
)func main() {
img, err := imaging.Open(“haruchan.jpg”, imaging.AutoOrientation(true))
if err != nil {
log.Fatal(err)
}
file, err := os.Create(“haruchan30.webp”)
if err != nil {
log.Fatal(err)
}
defer file.Close()
options := webp.Options{Lossless: false, Quality: 30}
if err := webp.E
Goの基礎知識(概念や、プログラミング言語共通の考え方)(自分リファレンス用)
## Goのインストール
[Golang](https://golang.org/)より、ファイルをダウンロードし、手順に従いインストール
(mac, windows, linux全てに対応)## Goを始める
(Mac)
ターミナルで、絶対パスを利用し“`terminal
cd /usr/local/go
“`
へ移動、goディレクトリで“`ターミナル
go version
“`と入力し、goのバージョンを確認できたら、インストールが完了している。
## 実際のコード
公式チュートリアルを参照
https://golang.org/doc/tutorial/getting-started1. ホームディレクトリに移動し
“`terminal
mkdir hello
“`
と入力し、helloディレクトリを作成し、“`
cd hello
“`で、helloディレクトリへ移動
2.利用しているテキストエディター(vscodeやvimなど、ほとんどのテキストエディターに対応しているらしい)で、hello.goファイルを作成し、以下のコードを
CentOS 8(CentOS 8 Stream)にGoをインストールする
# What’s?
CentOS 8に、Goを`dnf`でインストールしたい、ということで。
結果的に、CentOS 8 Streamに変換することになりましたが。
# 環境
確認した環境は、こちらです。
“`shell
$ cat /etc/redhat-release
CentOS Linux release 8.3.2011$ uname -srvmpio
Linux 4.18.0-240.10.1.el8_3.x86_64 #1 SMP Mon Jan 18 17:05:51 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
“`# CentOS 8にインストールできるGoの情報
Goのダウンロードページには、Linux向けの`tar.gz`ファイルが取得できるようになっています。
[Download and install ](https://golang.org/doc/install)
一方で、GoのGitHubリポジトリのWikiには各プラットフォーム向けの情報があるのですが、ここにCentOSやRHELのも
Go: JWT の実装
こちらの記事の実装を Go で行ってみました。
[認証におけるJWTの利用](https://qiita.com/Naoto9282/items/8427918564400968bd2b#%E8%AA%8D%E8%A8%BC%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bjwt%E3%81%AE%E5%88%A9%E7%94%A8)次の3つの API を作成します。
|Method |URL |Parameter |Response |説明 |
|—|—|—|—|—|—|
|GET |/user |Authorization |ユーザ名を返す |ユーザ情報を返す ||Method |URL |Body |Response |説明 |
|—|—|—|—|—|—|
|POST |/register |name, password,firstname,lastname |Tokenを返す |ユーザ登録を行う |
|POST |/login |name, password |
Golangでひらがな、カタカナ、漢字を判定する
Golangで漢字を判定する必要があったので正規表現を使ってUnicodeの範囲を指定するみたいな事しないといけないのかなと思って調べていたんですが、[built inのunicode package](https://golang.org/pkg/unicode)に[Unicodeの範囲を示すRangeTable](https://github.com/golang/go/blob/master/src/unicode/tables.go#L3604)が既に用意されていたのでした。
というわけでunicode packageを利用してこんな感じで実装出来ます。
# ひらがなを判定する
“`go
import (
“unicode”
)func IsHiragana(r rune) bool {
return unicode.In(r, unicode.Hiragana)
}
“`# カタカナを判定する
“`go
import (
“unicode”
)func IsKatakana(r rune) bool {
return unicode.In(r,
Rで素数判定と効率化について(JavaScript,Python,Goを含む)
#はじめに
本記事は、学習途中の学生によって書かれております。
内容の正確性には十分に配慮いたしますが、誤りなどございましたら、ご連絡いただければ幸いでございます。
データ分析などでRを利用している方(特に他の学生さん)の手助けになれば嬉しいです。
はじめに、Rの文法で素数判定の仕方を学び、末尾にその他言語(JavaScript,Python,Go)での素数判定のコードを載せておきます。#学べること
・Rによる素数判定の書き方
・素数判定に出てくる基礎文法
・JavaScript,Python,Goによる素数判定#目次
1.素数判定とは
2.素数判定を作ってみよう
2-1.素数判定 ver.1.0
2-2.素数判定 ver.1.1
2-3.素数判定 ver.2.0
2-3.時間測定(効率化について)
3.発展系で遊んでみる
4.あとがき
5.その他言語による素数判定##素数判定とは
はじめに素数とは
正の約数の個数が2である自然数とされます。
(1は約数が1つであるため含まれません)
より簡単に説明するなら、1とその数自身でのみ剰余が0となる自然数です。素数判定とは、
Go: 自作したモジュールの使い方
次のページを参考にしました。
[ローカル環境のみでの Go Modules と自作パッケージ](https://qiita.com/tkj06/items/a5f79417935100045650)作業フォルダーの準備
“`bash
mkdir module_test && cd module_test
go mod init gin_work
go get -u github.com/gin-gonic/gin
“`次のようにプログラムを作成
“`text
$ tree
.
├── go.mod
├── go.sum
├── main.go
├── module01
│ └── module01.go
├── module02
│ └── module02.go
└── module03
└── module03.go
“`“`go:main.go
package mainimport “github.com/gin-gonic/gin”
import “module_test/module01”
import “module_test/
gin-jwt の使い方 (その2)
こちらのサンプルを改造しました。
[gin-jwt の使い方](https://qiita.com/ekzemplaro/items/65e63899c087fee4b102)次の3人のユーザーがアクセスできるようにしました。
|User |Passwrd |
|—|—|
|scott |secret01 |
|john |secret02 |
|mary |secret03 |“`go:server.go
// —————————————————————
//
// server.go
//
// Feb/03/2021
// —————————————————————
package mainimport (
“log”
“net/http”
“os”
“time”jwt “github.com/appleboy/gin-jwt/v2”
“github.com/gin-
go-kintoneでのレコードの更新(PUT)のやり方
[公式Doc](https://pkg.go.dev/github.com/kintone/go-kintone)
# やり方“`go
import (
“github.com/kintone/go-kintone”
)…
//アプリの初期化
app := &kintone.App{
“example.cybozu.com”,
“user1”,
“password”,
25, // AppID
}// 更新用のデータ ※更新したいフィールドのみで大丈夫。
dataMap := map[string]interface{}{“フィールド名”: kintone.SingleLineTextField(“更新したいテキスト”) /*, …その他も*/ }// 更新したいレコードのID
id := 1//レコードの初期化
editedRecord := kintone.NewRecordWithId(id, dataMap)//更新の実行
err := app.UpdateRecord(editedRecord, true)“`
# ハマ
Go 1.16 ドラフトリリースノート 日本語訳
この記事は https://tip.golang.org/doc/go1.16 を日本語訳したものです. 前のバージョンはこちら: [Go 1.15 リリースノート](https://qiita.com/c-yan/items/dad49c9dce27e77a94e7)
# ドラフトリリースノート – Go 1.16 の紹介
**Go 1.16 はまだリリースされていません. これらは書いている途中のリリースノートになります. Go 1.16 は2021年2月にリリースされる予定です.**
# 言語への変更
言語の変更はありません.
# ポート
## Darwin と iOS
Go 1.16 は `GOOS=darwin` と `GOARCH=arm64` で (Apple シリコンとして知られる) macOS の 64bit ARM アーキテクチャのサポートを追加します. `darwin/amd64` ポートのように、`darwin/arm64` ポートは cgo、内部及び外部リンク、`c-archive` や `c-shared` や `pie` ビルドモード、そして