Go関連のことを調べてみた2021年09月03日

Go関連のことを調べてみた2021年09月03日

Go のパスワードバリデーションの正規表現で肯定的先読みができない場合の対処法

# 概要
Go のパスワードバリデーションを実装中に正規表現で肯定的先読みがサポートされておらず目的のバリデーション正規表現が1行ではかけませんでした。

ここでは、Go のパスワードバリデーションの実装サンプルとして解決方法の1つを残しておきます。

# 動作環境
– Go v1.16
– [go-playground/validator v10.6.1](https://github.com/go-playground/validator)
– [gin v1.7.2](https://github.com/gin-gonic/gin)

# やりたいこと
パスワードバリデーションで**「大文字小文字英字」「数字」「特殊記号」を少なくとも1つずつ含んだ**パスワードかつ利用可能文字も**「大文字小文字英字」「数字」「特殊記号」**のみ許可するバリデーションを Go と [go-playground/validator](https://github.com/go-playground/validator) を利用して実装したい。

# javascript の場合
肯定的先読み

元記事を表示

【Golang】BLAKE3 for Go の使い方【FNV1 より 2 倍以上速いってマ?ッハ?】

> SHA-3 のコンペで最終選考まで残って [Keccak](https://ja.wikipedia.org/wiki/SHA-3) に負けた [BLAKE2](https://ja.wikipedia.org/wiki/BLAKE)。その後継である「[BLAKE3](https://en.wikipedia.org/wiki/BLAKE_(hash_function)#BLAKE3) が爆速らしい」と聞いているので試してみたい。

でも公式は Rust と C 言語での実装なのです。どちらも、話せません … 最近勉強している ​Go 言語(以下 Golang)で試してみたかったのです。

– [BLAKE3](https://github.com/BLAKE3-team/BLAKE3) | BLAKE3-team @ GitHub
– BLAKE3 の仕様書: [BLAKE3 Specs](https://github.com/BLAKE3-team/BLAKE3-specs/blob/master/blake3.pdf) @ GitHub
– 関連記事:

元記事を表示

IAMをゼロから設定し、Code Buildのビルドプロジェクトを作成・ビルド実行までやってみた(Management Console版)

## はじめに
GitHub Actions、CircleCiを使ったCIは構築した事があったが、Code BuildでのCIはやった事がなかったのでやってみた
その際の備忘録を残す

※前提条件として既にCode Commitにbuild対象のソースコードがある状態からスタートした
※ビルドするものはGoのLambda関数

buildspec.ymlや、GitHub Actionsでのビルドは以下のリポジトリを参照

https://github.com/yuta-katayama-23/Go

## Code Buildのビルドプロジェクトを作成する
### Management Consoleからビルドプロジェクトを作成する
以下の画像のように設定できる

| 1 | 2 | 3 | 4 |
|:-:|:-:|:-:|:-:|
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372684/93f0af98-6363-6d0d-68f9-17d44940727c.png) |

元記事を表示

GCPのFunctionsを使って、サーバレスに定期的に天気情報をSlack通知してみよう。

今回はGCPのscheduler、Functions、VPC、CloudNATを使って、Slackに天気を通知する機能を実装してみようと思います。
GCPのCloudFunctionsを使ってKCCS APIサービスから取得した天気予報を定期的にSlackに通知する記事の第3弾です。

#構成イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1525729/349a7681-ea42-4e68-1403-786c01502610.png)

#各サービスの役割
各サービスの役割は以下とします。

|サービス|役割|
|:—|:—|
|IAM|Cloud Functionの認証用サービスアカウント|
|Cloud Scheduler|処理の起動トリガ 毎朝10:00に起動する|
|Cloud Functions|コントローラ、KCCS APIから気象情報を取得し、Slackに通知する|
|VPC ネットワーク|CloudNATの所属するネットワーク|
|サーバーレスVPCア

元記事を表示

Go言語で年度を取得する

日本だけだと思いますが、年度という概念を使わないといけない状況に陥ったので書いてみました。
`nend_getter`に「年」と「月」を渡せば、年度が返ってくるっていうだけのものです。

コードの全文です。

“`golang
package main

import (
“fmt”
“time”
)

func nend_getter(year int, month int) int {
var set_year int
if month <= 3 { // 3月以前ならば、西暦から1年引く set_year = year - 1 } else { set_year = year } return set_year } func main() { // Timezoneの設定 time.Local = time.FixedZone("JST", 9*60*60) time.LoadLocation("JST") // 本日の表示操作 fmt.Println("Year:", time.Now().Year()) fmt.Println("M

元記事を表示

【備忘】Go 言語のビルドと実行(3パターン)

Go 言語(Golang)の[ビルド(コンパイル)](https://wa3.i-3-i.info/diff502programming.html)から実行までの手順です。
次の3パターンにつき、メモとして残しておきます。

[1. ファイル1つで実行](#1-ファイル1つで実行)
[2. ファイル2つで実行(同一パッケージ)](#2-ファイル2つで実行同一パッケージ)
[3. 複数のパッケージで実行](#3-複数のパッケージで実行)

● 実行した環境
Go version : 1.17
OS : Windows10

## 1. ファイル1つで実行

まず、単純に一つの main ファイルから実行する場合です。

### 1-1. フォルダとファイルの作成

まず、「フォルダ」と「Go のファイル」を1つ作ります。
フォルダの場所やファイル名は何でも構いません。
ここでは `C:\golang\sample` というディレクトリに、`foo.go` というファイルを作ります。

“`
sample
└──foo.go
“`

### 1-2. ソースコードの記載

`foo.g

元記事を表示

GoでWeb APIをCallする BacklogのAPIを例に

## はじめに
GoのLambdaで[構成](#構成)に図示したような形でBacklogの課題情報を取ってきたり、課題情報を更新する実装を行ったのでその備忘録を残す。
※[Lambda関数(Go)でSlack通知](https://qiita.com/yuta-katayama-23/items/1e58d630410c7dd22d8e)や[AWS ChatbotでSlackからLambda関数(Go)を呼び出す](https://qiita.com/yuta-katayama-23/items/da16e8760bec47d7fd26)の記事の続きの関連で、DevOps導入に関係して行った事。

## 構成
Code BuildのBuildを実行するLambda(Go)を呼び出した時に、Backlogの課題のステータスを確認してあるステータスならそのままBuildを続行しそうでないなら中断。
また、Build完了時にBacklogの課題のステータスをあるステータスに更新する。
![image.png](https://qiita-image-store.s3.ap-northeast

元記事を表示

Golang の開発環境を一から構築してみる

こちらは エンジニア歴の浅く開発環境構築がとても嫌いな僕による環境構築時のメモとしての記事になります。
参考になればうれしいですが、ならなくてもご了承ください。
また、当方まだまだ若輩の域を出ないため、手順や認識に誤りがあるかもしれませんが、その場合指摘いただけるととてもうれしいです!!

ということで早速構築していきたいと思います。
皆様ご存じの「みんなのGO言語」を参考書籍といたします。
ちなみに僕の使用している環境はWindows10になります。
どこから始めるの?といいますと、PCにローカルユーザを作成したというものすごい初期からになります。
(Win10でユーザ新規作成すると、タッチパッドのダブルクリックからの範囲選択が初期設定オフになってるの忘れてちょっと焦りました。余談です。)

#①Goをインストールする前に
GOをインストールする前に、いろいろと入れておいたほうがいいツール等をインストールしていきたいと思います。
記事執筆時にインストールしていくものは以下になります。
・VSCode
・Git

そのうち増やしたら追記します。

(1)VSCodeのインストール
こち

元記事を表示

[備忘] error strings should not be capitalized 対応

“`golang
fmt.Errorf(“This method is not implemented”)
“`

って書いたら`error strings should not be capitalized (ST1005)go-staticcheck`っておこられた。

問題は**最初の一文字目が大文字**のところらしい。

“`golang
fmt.Errorf(“this method is not implemented”)
“`

これでなおった。

元記事を表示

わんたす 初めてのポートフォリオ[GO,PYTHON,GRPC,DOCKER]

# [wantas](https://www.wantas.net/search)

### **_ユーザーの”すぐ欲しい”実現アプリ_**

ユーザーが商品を検索し、位置情報から近くのコンビニを特定、商品を表示する。コンビニの商品は地域で差異があるためその点も考慮し、そのコンビニで販売されている商品のみを表示する。
横にグーグルマップも付けているのですぐ行くことができます。

### [github](https://github.com/biki-cloud/wantas)

# 使用技術

### プログラミング言語: バックエンド
* Python
* Go
* Shell

### プログラミング言語: フロントエンド
* Html
* Css
* Javascript

### データベース
* Sqlite

### CircleCI,GithubActions その他技術
* AWS
* Docker
* GRPC
* Jenkins
* Git
* Pytest

# 技術の選定理由
コンビニの位置情報や商品情報のスクレイピングをするためにPythonを選択しまし

元記事を表示

並列実行できるlocateコマンドの実装

並列実行できる [locate](https://en.wikipedia.org/wiki/Locate_(Unix)) コマンドを実装しました。

[github/u1and0/gocate](https://github.com/u1and0/gocate)

locate コマンドはファイル・ディレクトリを高速に検索します。
updatedbコマンドでデータベースファイルをあらかじめ作成しておく必要があります。

gocateはGo言語のgoroutineでlocateコマンドを並列に実行している…ただそれだけです。
locateコマンドは古くからあってか、未だにシングルスレッド実行なので、マルチスレッド実行できるようにGoでラップしました。

# 基本的な使い方

## インストール

“`shell-session
$ go get github.com/u1and0/gocate
“`

## db作成

“`shell-session
# $ gocate -init /var/lib/mlocate
まだ実装していません。updatedbに相当するものを実

元記事を表示

Go + MySQL + Docker で簡単なWebAPIを作ってみた

この記事は富士通株式会社FSWebユニット(旧株式会社富士通システムズウェブテクノロジー)が企画する[いのべこ夏休みアドベントカレンダー 2021](https://qiita.com/jugemsan/items/6c8b7324b9390a557774)の11日目の記事です。
本記事の掲載内容は私自身の見解であり、所属する組織を代表するものではありません。

# 概要

比較的最近に登場したネイティブコードコンパイラということで以前から興味をもっていたGO言語(GoLang)を少し勉強してみようと思い、GO言語で簡単なWebAPIを作ってみました。
マスコット・キャラクターはGopher(ホリネズミ)です。ゆるふわ系かな・・・??マスコットキャラクターの可愛さはDenoに軍配が上がりますね。

Gopher.pngGoを初めて触る人向けにGo Modulesとは何かを解説する

## はじめに
この記事ではGoを初めて触る人向けに「Go Modules」の全体像・使い方を[公式ブログ](https://blog.golang.org/using-go-modules)を元にhands-on的な感じで掻い摘んで解説していきます。(※この記事は元々2年くらい前に個人ブログに上げていた内容なのですが、一旦Qiita側に移動させます。)

## Go Modulesとは
Go Modulesは外部パッケージを管理するシステムのことを指します。

> Go modules in a nutshell is a built-in dependency versioning and dependency management feature for Go.

引用:「[Getting started with Go modules](https://medium.com/@fonseka.live/getting-started-with-go-modules-b3dac652066d)」

### moduleについて
moduleはpackageのコレクションです。(コ

元記事を表示

[golang]Excelの列アルファベットを計算する

皆さんもBtoB系のWebサービスを作っている時に「golangで何かしらの帳票をExcelで出力したい」みたいな要望もあると思いますが、そんな時に大体の人が使用するgolang主要なLibraryである`qax-os/excelize`は列情報をありがた迷惑にも**A-Zの文字列**で扱ってくれています。

https://github.com/qax-os/excelize

列情報が固定で変更の余地がほぼない!という状況ならまあソースにアルファベットベタ書きでも問題ないかもしれません(実際にはそんな事はままないと思いますが…)
しかし、列を可変で出力したい場合はIndex値で扱ってほしいところです。

と、前置きが長くなりましたが今回は 

**Index値 -> Excelの列アルファベット**

の変換処理が欲しかったので書きました。
列アルファベットの算出ロジックはMicrosoftの公式サイトにVBのコードですが載っています。
今回はそれをgolang用に書き直しています。
https://docs.microsoft.com/ja-JP/office/troublesh

元記事を表示

Go の testing つかってみた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244948/33861726-5e11-ea12-40b9-56bb55084939.png)

## TDD
[エアテスト駆動飲み会](https://tddrinking.connpass.com/)で Golang をはじめて触ったので記録のこします

* 同イベントでは過去に [bash も TDD が簡単に出来る](/kfjt/items/eaf5e2749802a950dd76) を書きました

## 環境
* [Replit](https://replit.com/) を使うことで、実行環境を作る時間を省略し、ブラウザ越しに参加者同士でコードを共有します
* Golang を普段さわってる人はゼロ

## 分かった事
* `xxx_test.go` というファイル名にする
* `go test` で実行できる
* `package main` だと何か不都合らしい
* 関数 `Testxxx` を用意する
* `t *test

元記事を表示

FBXファイルをちょっとだけ理解した

備忘録を兼ねたメモです.

面倒くさそうな構造のファイルだなと思って今まであまり関わらないようにしてましたが,ファイル自体は頻繁に目にするので中身を読んでみました.雰囲気から推測したことも多く含まれるので注意.間違っている箇所もあるかもしれないので,ツッコミは歓迎です.

# FBXとは

Autodesk製品で使われるファイルフォーマットです.3Dモデルデータをやりとりにデファクトスタンダードに近い形で使われているフォーマットの割には,仕様が不明瞭だったり,ツールごとの対応に差があって困るのは有名な話のようです(要出典)

Wikipedia: https://ja.wikipedia.org/wiki/FBX

# 参考にした情報へのリンク

断片的な情報はあちこちにありますが,ボーンやブレンドシェイプでモデルを動かすところまで実装するために,色々見る必要がありました.

– https://help.autodesk.com/view/FBX/2017/ENU/
– フォーマット自体の情報は乏しいけど,どんな値をどう扱えばよいかはFBX SDKのドキュメントが参考にな

元記事を表示

Go言語 のpanic を正しくrecover する

# Go言語 のpanic とrecover について

## panic について
Go言語には、例外処理のために一般に使われるerrors に加えて、panic という処理が存在する。
基本的には回復不能と判断された実行時エラーを発生させる機構。

## recover について
panic を取得し、エラー処理を実装できる機構。これがないとプログラムはクラッシュしてしまう。

## 使用上の注意点
言語仕様なのでドキュメントを読めば書いてあるが、慣れた人ほど注意した方が良いこと

### recover() は関数内部で実行されることで初めてpanicを受け取ってくれる
下記のコードを実行すると、panic が回収されず、そのままプログラムが終了する

https://play.golang.org/p/K3wxb3EDLjT

“`
package main

func main() {
recover()
panic(“パニックが回収されませんでした”)
}
“`

一方で次のコードのように、関数内部で受け取ってやることでちゃんとpanicが回収されて、プログラムが

元記事を表示

Goに関する参考記事

## GORM

### [GORM](https://gorm.io/docs/index.html)
– golangでよく使われるORM
– Docsは英語だと検索が使えるのが良い。作者は中国杭州の方。

### [GORM で 1:N で Join したカラムの値を取得する](https://qiita.com/zaneli@github/items/f22d57862d780a2a6ca9)
– joinなどを書く時
– Preload(“<構造体の名前を書く>“)を書く、これを見逃し随分ハマった

## Time

### [Go1.15改訂版、Go言語アプリのDockerイメージをscratchから作る](https://qiita.com/nejinejio/items/1bd5a07fe4060f98cc33)

– コンテナ内のLogの時間がJSTにならない時
– usr/share/zoneinfoがない場合
– time.Now().In(JST)で”unknown time zone”がでる
– 解決はgo build する時にオプションで”-tags ti

元記事を表示

Go言語で構造体データをファイルに書き出し/読み込みをする方法メモ

# はじめに
## やりたいこと
Goのプログラム内で作成した構造体のデータをバイナリにシリアライズし、ファイルに保存します。
そしてプログラムを次回実行したときには、そのファイルを読み込んでデシリアライズし、構造体のデータをメモリに乗せます。

丁度、Pythonであれば[pickle](https://docs.python.org/3/library/pickle.html)で出来るようなことを、Goで実行する方法のメモです。
# コード
## 概要
Goの標準ライブラリである[gob](https://pkg.go.dev/encoding/gob)を用います。
`Encoder`というクラスで構造体データをバイナリにシリアライズし、`Decoder`というクラスでそれをデシリアライズします。

※サンプルコードからは、例外処理を省いています。
## 書き込み
“`go
import (
“encoding/gob”
)

// 今回保存したいデータ
var stageTiles [screenLength][screenLength]tileInfo
type tileI

元記事を表示

S3にオブジェクトをアップロードして引数をlambdaに送りたいとき

今まではS3をトリガーにLambdaを発火させていたのですが、これだと追加の変数を設定することができず、どうすればいいか悩んでいたときに、InvokeInputに渡せばいいことを知りました。

## 参考

https://qiita.com/yukpiz/items/269277a97053237a6980

## go server側

S3にアップロードしたあとに、invokeして変数を渡すようにしました。

“`main.go
package main

import (
“encoding/json”
“fmt”

“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/lambda”
)

// これはLambda関数の完了で返すための構造体定義
type Response struct {
Message string `json:”message”`
Ok bool `json:”ok

元記事を表示

OTHERカテゴリの最新記事