- 1. Goの実行時にimportエラーでハマった話。
- 2. A tour of goで”no required module provides package golang.org/x/tour/”が出て困った
- 3. [Go] Singletonパターン -Goで学ぶデザインパターン-
- 4. 【Go】xormの使い方 その②
- 5. 【Go】xormの使い方 その①(CRUD)
- 6. 【備忘】Go 言語のデータ型と型変換
- 7. Golang の構造体の初期値をnil にしたいときはポインタ型でフィールド変数で定義する
- 8. Express React Ruby Go
- 9. Azure SDK for Goの管理ライブラリーセットがリニューアル
- 10. Cloud SQLの自動起動停止
- 11. A Tour of GoのExerciseをやってみた(Concurrencyの手前まで)
- 12. Goの開発環境構築(mac)
- 13. 不変(readOnly)が存在しないGo言語で、どうやって構造体の持つ値を不変にするか?
- 14. 【Golang】”go install” でアプリのバージョン情報に自動対応させる【Go 1.16+】
- 15. go で構造体を比較したい時に、気軽に== を使って比較する前に、ポインタ型か、そうでないかをちゃんと確認しようね。
- 16. GolangでRiot.jsを試してみました
- 17. gRPC × Golangでマイクロサービス間通信をやってみる
- 18. GoでS3の署名付きURLを作成
- 19. Go のパスワードバリデーションの正規表現で肯定的先読みができない場合の対処法
- 20. 【Golang】BLAKE3 for Go の使い方【FNV1 より 2 倍以上速いってマ?ッハ?】
Goの実行時にimportエラーでハマった話。
## はじめに
Goの勉強中、実行するとimportエラーでハマったのでその時に調べた内容を記録しました。## エラー内容
ターミナルでmain.goファイルのある階層まで移動し、以下のコマンドで実行する。“`
$ go run main.go
“`
すると、以下のエラーが表示された。“`
main.go:5:2: package my_app/config is not in GOROOT (/usr/local/Cellar/go/1.16.5/libexec/src/my_app/config)
“`## エラーが発生したときの状況
main.goファイルにconfigディレクトリ内のconfig.coファイルをimportしようとしたところでエラーが発生。“`main.go
package main
import (
“fmt”
“my_app/config” //←ここの読み込みができずエラーが発生
)
func main() {
…
“`
main.goファイルと、configディレクトリの位置関係“`Go
$GOPA
A tour of goで”no required module provides package golang.org/x/tour/”が出て困った
めっちゃ初歩的で恥ずかしいんですが、めっちゃ詰まってました笑
## バージョン
“`zsh
go version
go version go1.17 darwin/arm64
“`## 事象
以下のように、`golang.org/x/tour/`の下のパッケージを`import`するようなファイルが実行できない。
https://go-tour-jp.appspot.com/moretypes/18
`go run ./exercise-images.go`で実行したときのエラーは以下。
exercise-images.go:7:5: no required module provides package golang.org/x/tour/pic: go.mod file not found in current directory or any parent directory; see ‘go help modules’## 解決
モジュール化したいルートディレクトリに遷移して以下コマンドを実行します。
“`zsh
go mod init <モジュー
[Go] Singletonパターン -Goで学ぶデザインパターン-
#Singletonパターンとは
###一言で言うと
インスタンスが1個しか存在しないことを保証するパターンのこと###どういうときに使うのか
次の条件を満たす
– 状態を持たないこと
– ポリモーフィズムが絡む (抽象クラスまたはインタフェースを実装している) こと「このクラスのインスタンスはたった一つしか作らないし、作りたくない」というときに使う。
#Goで実装してみる
“`go:config.go
package configimport “sync”
type Config interface {
PutString(key string, value string)
GetString(key string) (string, bool)
}type config struct {
stringValue map[string]string
}func newConfig() *config {
ret := new(config)
ret.stringValue = make(map[string]string)
return re
【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 mainimport (
“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:
【備忘】Go 言語のデータ型と型変換
備忘として、Go 言語の「データ型」と「型変換(キャスト)」についてまとめておきます。
# 1.Go 言語データ型一覧
|データ型|サイズ|説明|値の範囲|
|—|—|—|—|
|uint8|1byte|符号無し整数|0 ~ 255|
|uint16|2byte|符号無し整数|0 ~ 65535|
|uint32|4byte|符号無し整数|0 ~ 4294967295|
|uint64|8byte|符号無し整数|0 ~ 18446744073709551615|
|int8|1byte|符号付き整数|-128 ~ 127|
|int16|2byte|符号付き整数|-32768 ~ 32767|
|int32|4byte|符号付き整数|-2147483648 ~ 2147483647|
|int64|8byte|符号付き整数|-9223372036854775808 ~ 9223372036854775807|
|float32|4byte|単精度浮動小数点数|有効桁数6桁の実数|
|float64|8byte|倍精度浮動小数点数|有効桁数14桁の実数|
|compl
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 mainimport “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 mainimport (
“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 mainimport (
“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 mainimport (
“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