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

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

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

元記事を表示

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のコレクションです。(コ

元記事を表示

OTHERカテゴリの最新記事