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

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

【Go】xormの使い方 その②

# はじめに
前回に続いて、xorm使い方その②です。
前回の続きですので、xormの導入などは終わっている程で話を進めます。
今回はいろんなメソッドを解説しようと思います。
今回解説するのは、以下の通りです。

# 目次

– Table
– Select
– Sum, SumInt
– Where, And, Or
– OrderBy, Asc, Desc
– SQL, Query

# 環境

go 1.15
github.com/go-sql-driver/mysql v1.6.0
xorm.io/xorm v1.2.3

# DBのデータ

今回はこちらのデータを使用します。
![スクリーンショット 2021-09-05 23.36.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/986475/0b372c59-e6d4-3766-5d0e-e951fe604a68.png)

# enginの用意

“`go
package main

import (
“fmt”
“log”

元記事を表示

【Go】xormの使い方 その①(CRUD)

# はじめに

業務でxormを使ったのですが、参考にする記事が少なかった印象なので、
初学者への参考になればと記事にしてみました。
今回は基本的なCRUDのみです。

xormとは
Go言語で使えるORMです。
Go 1.6以降で利用可能です。

# 環境

go 1.15
github.com/go-sql-driver/mysql v1.6.0
xorm.io/xorm v1.2.3

# xormで出来ること

DBのテーブルと、Goの構造体のマッピングが出来ます。

このテーブルと
![スクリーンショット 2021-08-29 20.26.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/986475/08b732d7-3fc7-4f8d-2e79-362fbf7bb8a5.png)
この構造体

“`go
type User struct {
Id int64
Name string
Age int
Password string `xorm:

元記事を表示

Golang の構造体の初期値をnil にしたいときはポインタ型でフィールド変数で定義する

# Golangの初期値
Golangはプリミティブ型にそれぞれ初期値を持っている。
string型 なら`””`
int型 なら`0`

など、ゼロ値という名前でそれぞれのプリミティブ型を定義した時になんの値が入っているかが既に決まっている。

しかし、フィールド変数の型をユーザ定義型にしている構造体を扱う場合、単純に構造体のインスタンスを生成してしまうと、ユーザ定義型を遡ってプリミティブ型のゼロ値を代入された構造体が生成され、特定のフィールドだけnil にすることができません。

こうしてしまうと、他のAPIからjson を読み込みたい時などに全てのフィールドに空文字が入ってしまったり、0 が入ってしまったりしてしまうため、あまり良いとは言えません。

# 解決策
フィールド定義を行う時にユーザ定義型のポインタ型にしましょう。
ポインタ型のゼロ値はnil なので、代入されていないフィールドが自動的にnil になって返却されます。

# 参考元
https://pon3-blog.com/?p=137

元記事を表示

Express React Ruby Go

Express React Ruby Go

Node.js

“`
su –
yum install -y https://rpm.nodesource.com/pub_12.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm
yum install -y nodejs
node -v
“`

元記事を表示

Azure SDK for Goの管理ライブラリーセットがリニューアル

Microsoft AzureをGoでプログラミングして管理/制御する「[Azure/azure-sdk-for-go: Microsoft Azure SDK for Go](https://github.com/Azure/azure-sdk-for-go)」の管理ライブラリーセットが、v56.0.0から通称「Track 2」と呼ばれていた Azure SDK デザイン ガイド に準拠したものになりました。

– [Go Guidelines: Introduction | Azure SDKs](https://azure.github.io/azure-sdk/golang_introduction.html)

新セットのパッケージは `sdk/` ディレクトリーに置かれています。

v55.8.0までの旧セットのパッケージは `services/` ディレクトリーに置かれています。

パブリックプレビューのパッケージは `services/preview/` ディレクトリーに置かれています。メジャーバージョンに昇格するまでは破壊的な変更が入る可能性がありますので、その点に注

元記事を表示

Cloud SQLの自動起動停止

# 概要
Cloud SQLは、インスタンスを継続的に実行するとコストが非常に高い。
そのため、開発環境など24時間稼働する必要のないインスタンスは、必要な時以外インスタンスを停止していくことがベストである。
しかし、「起動停止を毎回しないといけない」+「起動に時間がかかる」で効率が悪い。
したがって、以下のGoogleの公式ブログを参考にCloud SQLの起動停止を自動化してみた。

https://cloud.google.com/blog/ja/topics/developers-practitioners/lower-development-costs-schedule-cloud-sql-instances-start-and-stop

# 全体像
スケジューリングの役割をなすのが、**Cloud Scheduler**
Cloud SQLインスタンスを起動停止させるのが、**Cloud Functions**
Cloud SchedulerからCloud Functionsへの通知の役割をするのが、**Cloud Pub/Sub**

![Screen Shot 20

元記事を表示

A Tour of GoのExerciseをやってみた(Concurrencyの手前まで)

A Tour of GoのExerciseをConcurrencyの手前まで一通りやってみたので、
自分の書いたコードと詰まったポイントなどを補足しながら記事を書いてみました。

同じくGo初学者の参考になれば幸いです!
Concurrencyも後ほど実施予定です。。

## Exercise: Loops and Functions

問題は以下。

https://go-tour-jp.appspot.com/flowcontrol/8

ニュートン法を用いた近似の問題です。
問題文のここが難解ですが、`z -= (z*z – x) / (2*z)`
これは放物線に対して接線を引いて近似をしています。

[ニュートン法のwikipedia](https://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%88%E3%83%B3%E6%B3%95)の図が分かりやすいかと思います。

最初はニュートン法で10回近似するプログラムを書きます。
`for i:=0; i<10; i++` みたいな感じで10回ループを書いてあげ

元記事を表示

Goの開発環境構築(mac)

最近PCを入替えたので備忘を兼ねてメモ

# やりたいこと
1. Go が動かせるようになること
2. バージョンの切替が簡単にできること

# 環境情報
“`
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.7
BuildVersion: 19H1323

% zsh –version
zsh 5.7.1 (x86_64-apple-darwin19.0)
“`

# やったこと
1. homebrew のインストール
2. homebrew で goenv をインストール
3. goenv で go をインストール


## 1. homebrew のインストール
公式サイトからインストール用のコマンドを取得してきます。

https://brew.sh/index_ja

取得してきたコマンド

“`
% /bin/bash -c “$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`

元記事を表示

不変(readOnly)が存在しないGo言語で、どうやって構造体の持つ値を不変にするか?

# Go言語には不変(readOnly) を示すことができない
広く知られていることですが、Go言語は指定した変数などを不変にするための機能を持っていません。

プログラムを書く点においては割と重要で、実際にコミュニティでも議論されているようです。
https://github.com/golang/go/issues/32245

では現行のGo言語で不変な構造体を作成するにはどうすればいいのでしょうか?簡単に作成してみました。

# 別パッケージに定義し、外部から参照できないようにする

Go言語では構造体を定義する時に、頭文字を大文字にするか小文字にするかで外部のパッケージからその値が参照できるかどうかを決定します。
そこで、今回の主題である構造体自体を別パッケージに定義し、閉じ込めることで実現してみました。

“`main.go
package main

import “fmt”
import “~/money”

func main() {
Money := money.NewMoney(100, “doll”)
fmt.Println(Money)
}

“`

元記事を表示

【Golang】”go install” でアプリのバージョン情報に自動対応させる【Go 1.16+】

# Go アプリのバージョン表示 in `go install`

:::note warn
この記事は Go 1.16 と 1.17 以上向けです。
:::

> Go 言語(以下 Golang)の俺様アプリで、**アプリのバージョン情報表示に対応**させたい。しかも、`go install` でインストールされてもアプリのバージョン情報が `git tag` に追随するようにしたい。

## TL; DR (今北産業)

1. サンプル
このサンプルは、`git tag` などでバージョンをタグ付けしておけば、アプリを `go install` されてもリポジトリのバージョンに追随します。(`go build` 除く)

“`go:main.go
package main

import (
“flag”
“fmt”
“runtime/debug”
)

var Version string

func main() {
var versionFlag = f

元記事を表示

go で構造体を比較したい時に、気軽に== を使って比較する前に、ポインタ型か、そうでないかをちゃんと確認しようね。

# golang における 「==」 の特性
golang における「==」 は、基本的には対象の同一性をみてtrue/false の判断をする。

ただ、比較する対象がポインタ型でない場合は同値性で判断してくれることもある

例えば
https://play.golang.org/p/E1Fty3pkKYI

“`go
package main

import (
“fmt”
)

func main() {
nameA := FullName{“ヤマダ”, “太郎”}
nameB := FullName{“ヤマダ”, “太郎”}
nameC := FullName{“吉田”, “太郎”}

fmt.Println(nameA == nameB)  // true
fmt.Println(nameA == nameC) // false
}

type FullName struct {
FirstName string
LastName string
}

“`

このように、nameA, B, C にはFullName 型が入っており、その中に入れられたfi

元記事を表示

GolangでRiot.jsを試してみました

少しずつUIのところを試して行くと思ってます。

時間がありましたら、感想を書きます。

今はとりあえず[ソースコード](https://github.com/TokyoWolFrog/go-riot)!

元記事を表示

gRPC × Golangでマイクロサービス間通信をやってみる

# はじめに
マイクロサービス構成のWebサービスを開発する際に選択される技術としてgRPCが採用される事例が増えているようです。
今回は、近年注目が集まっているgRPCの基本的な扱い方を学んだので、記事にまとめようと思います。

# gRPCとは
簡単にまとめると、マイクロサービス化されたWebサービスにおいて、マイクロサービス間通信を行う際に利用されるようです。
基本的に `proto` ファイルに諸々の設定を定義して所定のコマンドを打つと、通信に必要なソースコードを自動生成してくれるそうです。
`proto` ファイルに記述された内容が、ある種のドキュメントの役割も担ってくれるようですね。

※ gRPCの基本事項についての参考記事
https://qiita.com/oohira/items/63b5ccb2bf1a913659d6
https://qiita.com/gold-kou/items/a1cc2be6045723e242eb

# 事前準備
protoコマンドを実行するためのパッケージをローカル環境にインストールする必要がああります。

## 1. パッケージをイ

元記事を表示

GoでS3の署名付きURLを作成

意外と見つけるまで時間がかかってしまったのでメモです。

## 参考

公式ドキュメントです。

https://aws.github.io/aws-sdk-go-v2/docs/code-examples/s3/generatepresignedurl/

https://aws.github.io/aws-sdk-go-v2/docs/configuring-sdk/

## 前提

– AWSの認証情報が環境変数として登録されている

“`
export AWS_ACCESS_KEY_ID=yyyyy
export AWS_REGION=ap-northeast-1
export AWS_SECRET_ACCESS_KEY=xxxxxx
“`

## コード

“`main.go
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX – License – Identifier: Apache – 2.0
package main

import (
“context”

元記事を表示

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) が爆速らしい。しかも FNV1a より数倍。」と聞いたので試してみたい。

でも公式は 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

元記事を表示

OTHERカテゴリの最新記事