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

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

空いてる時間を気軽に共有出来るサービスを作ってみた

この記事は[CA21 Advent Calendar 2020](https://adventar.org/calendars/5308)に投稿する予定の記事です。

## 初めに
来年からインフラエンジニア(SRE)として働く予定のしがない学生です > [Twitter](https://twitter.com/_tetsuya28)
アドカレ3日目担当ということで今日はとあるサービスを勉強がてら作ってみたお話をしようと思います
あんまり1つずつの技術の深堀りはしないのでよろしくお願いします

## 空き時間共有サービス
という訳で早速今回作ってみたサービスの紹介から
題名の通りなんですが、ミーティングや遊びなどの色々な場面で日程調整をすることがあると思うんですが、僕はその時間を列挙すると言う作業へのだるさを感じていて以前はGoogleカレンダーと連携して空き時間をリスト化出来るサービスを使っていたのですがどうしてもちゃんとしているサービスが故に僕の目的を果たすのにはToo muchな部分や、逆に足りないなと思う部分がありました
具体的には

– 文字だけでは視認性が悪い

元記事を表示

[Go][Twilio] Go + gin + Twilio で留守電システムを構築

本記事は [Go3 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/go3) 3日目の記事になります。

Advent Calendarに初めて寄稿(参加?)したのですが、いつも通りのギリギリ体質のせいでコードの準備と炎上案件が重なって睡眠時間がえらいことになりました。
はい、私の話は良いので、早速本題です。

# はじめに
5年ほど前に、[PHPを用いてTwilioで留守電システムを構築する話](https://qiita.com/okkn/items/19e4eeb5a6bca36bd51a)を書きました。
私の自作アプリの中で、PHPを本運用稼動させているシステム最後の生き残りとなっていました。
正直、このアプリのためだけにPHP-FPM環境を運用するのも面倒になってきていたので、更改しようかな、と。

そこで白羽の矢が立ったのがGo言語です。
私は昔からPyhtonが好きなのですが、Pyhtonと似たような気軽さで書けること、型推論付き静的型付け言語、それなりのスピードが出るところが気に入っています。

元記事を表示

Golangの正規表現でbool値のみを返す

# 概要
タイトルのままですが、goの正規表現でbool値のみを返す方法です。

##コードと解説
goの正規表現でまず思いつくのが`regexp.MatchString`と思いますが、これは2つの返却を行います。
一つはマッチしているかどうかのbool値、もう一つはエラーです。

“`main.go
package main

import “fmt”
import “regexp”

func main() {
str := “abc”
b, err := IsMatch(str)
if err != nil {
fmt.Println(err)
}
fmt.Println(b)
}

func IsMatch(str string) (bool, error){
return regexp.MatchString(`^[0-9]+$`, str)
}
“`
例えるならこんな感じでしょうか?
めんどくさいのでエラーを`_`にしたいな…と思うところです。
が、コーデイング規約等によって、errは握りつぶしてはダメ。という開発現場も多いと思います。(実際`_`して握

元記事を表示

Go: Typeにかっこで優先度をつける

## はじめに

本記事は[Go 2 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/go2)の3日目の記事です。

以前Goの仕様を眺めていたところ、型はかっこをつけることでパースの優先度をつけることができることに気付きました。

“`
Type = TypeName | TypeLit | “(” Type “)” .
~~~~~~~~~~~~
“`
https://golang.org/ref/spec#Types

確かにいつも型を書いているところにかっこをつけても、普通にコンパイルできました。(`go fmt`をかけるとかっこは1ペアになります。)

“`go
package main

import (
“fmt”
)

func main() {
var a ((((((((((((((((((((string)))))))))))))))))))) = “マカンコウサッポウ(写真)みたいだな”
fmt.Println(a)
}

元記事を表示

【Goland】 自作静的解析ツールをファイル保存時にフックさせる

この記事は[Wanoグループ Advent Calendar 2020](https://qiita.com/advent-calendar/2020/wano-group) の3日目の記事になります。??

## 何をするのか
Golandでは、 `gofmt` や `goimport` のような静的解析のコマンドは少しの設定でファイル保存時に実行することができます。
今回は自作の静的解析ツールを上と同じように保存時にフックさせてみようと思います。

プロジェクト特有のコマンドをCIで実行しているような場合、それをローカルでも通してからpushしたい! みたいなケースで使えそうです

## 使うライブラリ
今回は、 `TODO` コメントが一つでもあったら怒られるというスパルタコマンドを **checom** という名前で作成 -> Golandに設定 してみます。
ちなみにTODOコメントに他意はありません

### 静的解析
コメントを抜き出すだけなら標準のライブラリで十分です。
* https://golang.org/pkg/go/parser/
* https://go

元記事を表示

会社が大規模だと逆に改善し易かったりする世界線の車窓から

# 大規模ですよねー(ですよねー)

 世界の連結従業員数**約14万人**くらいらしいです。
で、社内の特定認証部分(一部?)が以下プレスの通りActiveDirectory(実体はAzure AD?詳細は知らん)で動いてます。

[デジタルグローバルコミュニケーションサービス](https://www.fujitsu.com/jp/services/application-services/application-development-integration/global-communication/digital-global-communication-service/)
[大規模向けコミュニケーション基盤の導入技術](https://www.fujitsu.com/jp/group/fst/imagesgig5/fst_tech_collaborative_1.pdf)

 これにある程度の社員情報が格納されているようで認証だけに使うのでは非常に勿体ない基盤です。**認可の観点でこんなの作れそうだよ!**と改善提案のモックを組んだ時のアウトプットをお披露目したいと思います。

元記事を表示

Go言語 素数判定アルゴリズムを使ってみる

# **なぜ人は素数を追い求めるのか**

2018年12月7日、[GIMPSによって最大の素数が更新](https://www.mersenne.org/primes/?press=M82589933)されました。
発見された素数は $2^{82589933} – 1 $ 、2400万桁を超える巨大な数です。

そんなに計算したところで何の意味が…と思われるかもしれませんが、実は巨大な素数は国家機密として扱われている(らしいです)。
なぜなら、素数はRSA暗号の鍵として使われているからです。RSA暗号は桁数が大きな合成数の素因数分解が困難であるという前提のもと、成り立っている暗号です。
簡単に説明すると、2つの大きな素数が暗号化・復号化の鍵になり、暗号化が行われます。暗号を解読するには数百桁の合成数を素因数分解する必要があり、現在のコンピュータでは有限時間で解読不可能であるため、今のところ安全とされています。
つまり、素数の大きさがそのまま暗号の強さに相当するため、巨大な素数をどんどん見つけて、より強固な鍵を手に入れようということです。
(最近では楕円曲線暗号(ECC)に主流が移

元記事を表示

vscodeでサブディレクトリにgo.modを管理している場合はexperimentalWorkspaceModuleを有効化する必要がある

以下のようなディレクトリ構成でgoprojectディレクトリから開くとvscodeがサブディレクトリのgo.modを認識してくれず、`can not import`エラーが発生し困っていました。

“`
goproject
|- test1
| |- mani.go
| |- go.mod
| |- go.sum
|- test2
|- mani.go
|- go.mod
|- go.sum
“`

調べたところLanguage Serverのgoplsのデフォルト設定だとルートディレクトリにgo.modファイルが無いとダメなようで、**experimentalWorkspaceModule**の有効化で上記が解決しました。

# 環境
– macOS Catalina v10.15.7
– vscode v1.51.1
– go version go1.15 darwin/amd64

# 有効化
## 拡張機能
vscodeの拡張機能でGoをインストールします。
![拡張機能__Go_—_tipstar-ops.png](https://qiita-im

元記事を表示

パラダイムシフト

[Coming Soon – EC2 C6gn Instances – 100 Gbps Networking with AWS Graviton2 Processors](https://aws.amazon.com/jp/blogs/aws/coming-soon-ec2-c6gn-instances-100-gbps-networking-with-aws-graviton2-processors/) / [Graviton](https://aws.amazon.com/jp/blogs/aws/category/compute/graviton/)
この発表を見て、今後 IaaS では x86_64 ではなく arm64/aarch64 を選択することにした。
私が好んで使う Google Cloud や Azure は未対応なので AWS 一択ということになる。

使用する言語も、もう Java は使わず、Go/C++(ひょっとすると Rust)を使用することにしている。
x86_64 から arm64 へ、Java から Go へ。

私はこれまで書いてきたすべての Ja

元記事を表示

LeetCodeに毎日挑戦してみた 66. Plus One(Python、Go)

## はじめに

無料英単語サイト[E-tan](https://your-e-tan.com/)を運営中の@ishishowです。

プログラマとしての能力を上げるために毎日leetcodeに取り組み、自分なりの解き方を挙げていきたいと思います。

#### Leetcodeとは

[leetcode.com](https://leetcode.com/)
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。

golang入門+アルゴリズム脳の強化のためにgoとPythonで解いていこうと思います。(Pythonは弱弱だが経験あり)

#### 14問目(問題66)

#### 66. Plus One

#### 問題内容

> Given a **non-empty** array of decimal digits representing a non-negative integer, increment one to the integ

元記事を表示

OpenAPI GeneratorでGoのAPIサーバー/クライアントコードを自動生成する

この記事は[Go 4 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/go4) 2日目の記事です。

# この記事について
OpenAPIのyamlファイルから、APIサーバーやクライアントコードを生成するopen-generatorというツールが存在します。
今回は、これを用いてGoのAPIサーバー/クライアントのコードを自動生成させ、それに手を加えて実際に使えるようにするまでの過程を紹介します。

## 使用する環境・バージョン
– go version go1.14 darwin/amd64
– openapi 3.0.1
– openapi-generator 4.3.1

# OpenAPIとは?
OpenAPIとは、REST APIを記述するためのフォーマット規格です。決められた記法でAPI仕様を記述すると、その内容をSwagger UIというきれいな形式にして確認することができるようになります。
![スクリーンショット 2020-11-23 16.13.26.png](https://qiita-i

元記事を表示

don’t use underscores in Go names;の簡易的な対処法(初学者向け)

#はじめに
Goを最近勉強していて変数宣言で”don’t use underscores in Go names”が出たのでメモ書きしておきます。
初学者の方の参考になれば幸いです。

#事象
bool型の変数を定義して、結果と型を出力させるという簡単なコードです。

“`Go
package main

import (
“fmt”
“reflect”
)

func main() {
a := 1
b := 5
var num_bool bool = a > b //ここに ”don’t use underscores in Go names;”が出てる

fmt.Println(num_bool)
fmt.Println(reflect.TypeOf(num_bool))
}
“`
そのままでも以下のようにビルドは通りますが何か気持ちが悪いので対処します。

“`
PS C:\pg\Go\study> go build main.go
PS C:\pg\Go\study> ./main
false
bool
“`

#対処
don’t use unders

元記事を表示

Railsしか使ったことない駆け出しエンジニアが、Goの環境構築してみた!

## なぜGoを入れるの?
2020/12/1 現在、本気でいきたい企業がGoを開発環境としているから!面接受けるからには、少しでも勉強しとかなきゃと息込んでやってみました!

なお、私の環境は
macOS Catalina ver.10.15.7です。

## 公式HPにGo!
git cloneとかで入れる方法もあるそうですが、せっかくだからGoの公式HPを参考にすることを決意!
### 1. [https://golang.org/doc/install](https://golang.org/doc/install)にGo!
### 2. Download Go for Macをクリックしてダウンロード
![627ee2cbc04080088f50a8c01127552d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696002/15a4cc89-7aa7-ddcb-fa7f-3a322b94de0e.png)
あら、かわいい…

### 3. インストールされているか確認
“The pack

元記事を表示

AtCoder Regular Contest 108のメモ

# 前置き

Atcoderをやってみたので、自分用のメモです。
あとから加筆・修正する予定です。

# 問題

https://atcoder.jp/contests/arc108

# A

“`Q_A.go
package main

import (
“fmt”
)

func main() {
var S, P int64
fmt.Scanf(“%d %d”, &S, &P)

var ans string = “No”
var N int64
for N=1; N*N<=P; N++{ M := S - N if P == N * M{ ans = "Yes" } } fmt.Printf("%s\n", ans) } ``` # B ```Q_B.go package main import ( "fmt" "strings" ) func check(queue []string) []string{ if

元記事を表示

完全個人用のURL管理サービスをReact×Firebase×Go×Herokuで作った話

# はじめに
こんにちはRIN1208です。

この記事はタイトルに書いてある通り、完全に個人で使う用に作成したのでそれについて書いていきたいと思います。
今回作ったものは[こちら](https://github.com/rin1208/link-note)

この記事は[ITRCアドベントカレンダー](https://adventar.org/calendars/5535)の1日目の記事になります。

# 今回の構成
![スクリーンショット 2020-11-25 14.17.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329144/baf9e69f-b692-f375-624e-e4479579a34e.png)

今回は上記のような構成で作成しています。サーバーサイドはHeroku、フロントエンドはFirebase Hosingにデプロイしています。
またJWTが無効な値だった場合は6, 7の部分の処理はせずにエラーを返すようにしました。

## できたもの
以下のようなURLを貼り付

元記事を表示

daprでつくるマイクロサービス

## はじめに

この記事は、 [富士通クラウドテクノロジーズ Advent Calendar 2020](https://qiita.com/advent-calendar/2020/fjct) の**2日目**の記事です。

1日目は @miyuush さんの **[ニフクラがTerraformに対応したので使ってみた【基礎編】](https://blog.pfs.nifcloud.com/20201201_terraform_provider_nifcloud)** でした!
昨日リリースされたばかりで生まれたてホヤホヤ感のある [nifcloud/terraform-provider-nifcloud](https://github.com/nifcloud/terraform-provider-nifcloud) v1.0.0 ですがこれからの機能エンハンスが楽しみですね!どんどんIaCにしていきたい:yum:

改めましてこんにちは!NIFCLOUDのいくつかのサービスのAPIを開発している @kzmake と申します。
入社しサービスを開発してはや4年目になりました。こ

元記事を表示

c++のstd::set::lower_boundとupper_boundをGoで作ってみました

#はじめに
零細企業の事務をやっているおじさんです。Go歴は半年です。

螺旋本のpart3 第16章の16.13線分交差問題[AOJ CGL6_J](https://onlinejudge.u-aizu.ac.jp/courses/library/4/CGL/6/CGL_6_A)をGoで解こうとしたところ、そこに載っているサンプルコードでc++のlower_boundとupper_boundが、Goにはないようだったので、自作しました。

注意
・二分探索木で作っています
・イテレータではなく、Nodeを返します
・sliceには使えません
・初心者なので、ここで紹介しているものが不完全である可能性は十分あります
・四角い車輪の再発明の可能性大

#Go版lower_boundのコード
“`go

func lowerBoundNode(n *Node, x interface{}) *Node {
if n.key < x.(int) { if n.right != nil { n = lowerBoundNode(n.right, x) } } else i

元記事を表示

LeetCodeに毎日挑戦してみた 58. Search Insert Position(Python、Go)

## はじめに

無料英単語サイト[E-tan](https://your-e-tan.com/)を運営中の@ishishowです。

プログラマとしての能力を上げるために毎日leetcodeに取り組み、自分なりの解き方を挙げていきたいと思います。

#### Leetcodeとは

[leetcode.com](https://leetcode.com/)
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。

golang入門+アルゴリズム脳の強化のためにgoとPythonで解いていこうと思います。(Pythonは弱弱だが経験あり)

#### 13問目(問題58)

#### 58. Length of Last Word

#### 問題内容

> Given a string `s` consists of some words separated by spaces, return *the length of the last word

元記事を表示

2020年,Go言語でお世話になったライブラリ/検討したけど導入しなかったライブラリ

この記事は[Wanoグループ Advent Calendar 2020](https://qiita.com/advent-calendar/2020/wano-group)1日目の記事になります。一年早いですね。コロナやリモートワークもあってテンション的に埋まるかどうなのかー。

~~いきなりネタもないので転用できそうなフォーマットで雑多に記事を書きます。~~

本記事では年末っぽく,2020年に自分が使ったGo言語ライブラリ関連のよかったものを一括で振り返えろうかと思います。

* お世話になったライブラリ
* あんまり使わなくなった/検討したけど落ちたライブラリ

この2つの観点で、あまりまとめずつらつら書きました。
単なるライブラリの話題でも、**選定がわかれば問題意識や施策が振り返えれるって気もする**ので、いい機会かなーと思います。

# 1.2020年、お世話になったライブラリ

## Go Generate系
愚直な筋肉の使いどころは考えようってのが2020の施策として多かったので、めんどくさいものをなんとかしてくれるgo generate周りはお世話になりまし

元記事を表示

なんでGo?

書くことが思い浮かばず、「Qiitaだしポエムでもいいか」と開き直ったらこんな内容になってました。

# 「なぜGoを使うのか?」
3年ほど前、私は「新しい言語に触れてみたい」という単純な理由からGoを書き始めました。私の周りには優秀な人が多く、そういった人々がRustやHaskellといった言語にのめり込んでいく中で私は一人Goの沼へと足を踏み入れました。実際に書き始めてみると周囲から「なんでGo?」と聞かれる機会がそれなりにありました。そして私はその質問に満足な回答を持ち合わせていませんでした。

# Goは面白い言語ではない
Goについて話をする上で避けて通れない話題が仕様の小ささです。Goが採用している言語機能の数は非常に少ないです。このことはGoの[言語仕様](https://golang.org/ref/spec)がペライチのWebページに収まっていることからも明らかです。印刷してもA4 110ページに収まります。比較対象として[C++17のWorking Draft](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2

元記事を表示

OTHERカテゴリの最新記事