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

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

AtCoder Regular Contest 105のメモ

# 前置き

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

# 問題

https://atcoder.jp/contests/arc105

# A

“`Q_A.go
package main

import (
“fmt”
)

func main() {
var a,b,c,d int
fmt.Scanf(“%d %d %d %d”, &a, &b, &c, &d)

flag := false

flag = (a == b+c+d || a+b == c+d || a+c == b+d || a+d == b+c || a+b+c == d || a+b+d == c || a+c+d == b )

var s string
if flag == true{
s = “Yes”
}else{
s = “No”
}
fmt.Printf(“%s\n”, s)
}
“`

# B
“`Q_B.go
package

元記事を表示

googleのsubcommandsでGCPのSecret Managerへの読み書きをラップ

# お題
GCPには[Secret Manager](https://cloud.google.com/secret-manager?hl=ja)というのがある。
Kubernetes知ってる人は「[Secrets](https://kubernetes.io/ja/docs/concepts/configuration/secret/)みたいなものか」思うかも。ただk8sのSecretsはBase64エンコードなので、(例えば元データの管理の名目としても)PublicなGitHubリポジトリにアップするわけにいかないけど、Secret Managerの方は暗号化されてるので(鍵を知らなければ)まさにSecret。

その他、ウリみたいなものについては以下参照。
https://cloud.google.com/blog/ja/products/identity-security/introducing-google-clouds-secret-manager

上記参考記事にも記載してあるけど、Secret Managerに限らずGCPのサービス群は[Cloud SDK](https

元記事を表示

[GoLand]コメントの先頭にスペースを設定する

# 1.はじめに
ググっても解決策(GoLandの公式ヘルプ)がなかなかヒットしなかったので書きました。
個人的にはGoLandを別のPCにインストールしたときという、たまにの機会に忘れていて結構困るためです。

## 1-1.この記事を読んだらどうなるのか
フォーマット時にコメントの先頭にスペースが自動的に入るようになって、楽になれる。

## 1-2.対象読者
GoLandでコメントの先頭にスペースを自動でいれられずに苦しんでいる人。

# 2.GoLandの設定
[こちら](https://pleiades.io/help/go/reformat-and-rearrange-code.html#configure-leading-spaces-in-comments)が公式のヘルプ
公式を引用させてもらいます。

> 1.設定ウィンドウ(ファイル | 設定)を開きます。
> 2.エディター | コード・スタイル | Goをクリックします。
> 3.その他タブをクリックします。
> 4.コメントに先行スペースを追加するチェックボックスを選択します。
> 5.コメントのスペースを除

元記事を表示

[Go]「…(ピリオド3つ)」の使い方

# 1.はじめに
これからGoを始める人のためになればと思って記事を書きました。
ソースコードで「…」を初めて見たときに、ググっても日本語で情報がまとまっているものがあまり無いので、私が業務でよく使っている「…」の使い方をまとめようとおもいました。

## 1-1.この記事を読んだらどうなるのか
「…」の使い方とポイントを理解できる

## 1-2.対象読者
Goの「…」がわからない人

# 2.「…」の使い方

## 2-1.関数のパラメータを可変長にしたいとき
関数のパラメータを可変長にすることができます。
たとえば、関数で複数のintを可変で受け取りたいときがあるとしたら、以下のように書くことができます。
ポイントは **…int** のように型の前に…を書くことです。

“`
// WriteInt はintを可変で受け取って出力する関数
func WriteInt(nums …int) {
for _, v := range nums {
fmt.Println(v)
}
}
“`

実行すると、以下の結果になります

“`
f

元記事を表示

QiitaのtagフィードをCLIで見るためのCLIツールをGo言語で書いた

[Zennのこちらの記事(フィードを取得する Go 言語パッケージ)](https://zenn.dev/spiegel/articles/20201003-feed-with-golang) を読んで、[gofeed](https://github.com/mmcdole/gofeed)という便利なツールがあることを知り、触ってみたくなったので、QiitaのtagフィードをCLI上で表示するだけの、シンプルなツールを作ってみました。

[qiita-tag-feed-reader-cli – CLI reader of Qiita tag feed.](https://github.com/shinshin86/qiita-tag-feed-reader-cli)

## qiita-tag-feed-reader-cliの使い方
上のリンク先にある[README](https://github.com/shinshin86/qiita-tag-feed-reader-cli/blob/main/README.md)のままの説明になりますが、下記のとおりです。

“`bash
#

元記事を表示

AtCoder HHKB プログラミングコンテスト 2020 参戦記

# AtCoder HHKB プログラミングコンテスト 2020 参戦記

## [HHKB2020A – Keyboard](https://atcoder.jp/contests/hhkb2020/tasks/hhkb2020_a)

2分で突破. 書くだけ.

“`python
S = input()
T = input()

if S == ‘Y’:
print(T.upper())
elif S == ‘N’:
print(T)
“`

## [HHKB2020B – Futon](https://atcoder.jp/contests/hhkb2020/tasks/hhkb2020_b)

3分で突破. 書くだけ.

“`python
H, W = map(int, input().split())
S = [input() for _ in range(H)]

result = 0
for h in range(H):
for w in range(W – 1):
if S[h][w] == ‘.’ and S[h][w +

元記事を表示

HHKB プログラミングコンテスト 2020のメモ

# 前置き

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

# 問題

https://atcoder.jp/contests/hhkb2020

# A

“`Q_A.go
package main

import (
“fmt”
)

func main() {
var s string
fmt.Scan(&s)

var t string
fmt.Scan(&t)

if s == “Y”{
if t == “a”{
t = “A”
} else if t == “b”{
t = “B”
} else if t == “c”{
t = “C”
}
}

fmt.Printf(“%s\n”, t)
}
“`

# B
“`Q_B.go
package main

import (
“fmt”
“strings”
)

func m

元記事を表示

DockerでのRailsアプリケーション構築

# 概要
Dockerの勉強会の際、作成したリポジトリがありそのまま埋めてるの勿体無いと思ったので記事にしました。
どなたかの参考になればいいなぁと思ってます。

https://github.com/yodev21/docker_tutorial_rails

# 作業手順

# ファイル作成
下記ファイルを作成

“`
Dockerfile
docker-compose.yml
Gemfile
Gemfile.lock
“`

“`Dockerfile
# イメージ名にRuby(Ver2.6.5)の実行環境のイメージを指定
FROM ruby:2.6.5

# パッケージのリストを更新しrailsの環境構築に必要なパッケージをインストール
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

# プロジェクト用のディレクトリを作成
RUN mkdir /myapp

# ワーキングディレクトリに設定
WORKDIR /myapp

# プロジェクトのディレクトリにコピー
C

元記事を表示

絶対に転職すると心に誓ったのでgolangで”hello word” してみた

自社開発web系企業へ転職したいSES、受託開発企業で働く20代男性です。
今のスキルが伸びにくい環境と給料に不満を覚えたので、文句ばかり言わないで行動に移そうと心に誓ったのでGo言語を勉強することにしました。
Qiitaへ記事を書くことの練習を兼ねております。

早速 hello word しましょう!

とりあえず準備

※エディター、homebrewはすでにインストールされていることを想定しております。
下記コマンドをターミナルに流す。

“`
# homebrewのアップデート
$ brew update

# goをインストール
$ brew install go
“`
以上でgoの準備は整いました。

コードを書いていこう

以下がコード

“`hello.go
package main

import (
“fmt”
)

func main() {
fmt.Println(“hello world”)
}
“`

以下コマンドで実行!

“`
$ go run hello.go
#以下、実行結果
hello world

元記事を表示

Go言語(net/http)でWebサーバーを作成(1)

当たり前ですが、webプログラミングが可能なgolang(Go言語)ではWebサーバーを立てることができます。

私もgolangで簡易webサーバーを作成し、サービスを開発した経験があります
その時は「gin」というwebフレームワークを使用しました。

ginは[コチラ](https://godoc.org/github.com/gin-gonic/gin)

今回はwebフレームワークに頼らなず、ライブラリのみ(純粋なgolang)でwebサーバーを作ってみたいと思います。
参考にしたのは公式ドキュメント[https://golang.org/doc/articles/wiki/](https://golang.org/doc/articles/wiki/)です。英語の原文で学習したい方は是非

なお、golangの基本文法をここでは取り上げません。あらかじめ勉強しておいてください。
私のおすすめはこちらも公式ドキュメントである「A Tour of Go」です。
リンクはコチラ →

元記事を表示

[Golang] 当番を乱数で決定するプログラム

## はじめに
名簿一覧から**x人組**作って欲しいという要望があったので折角だしgo言語で書いてみました。

“`go
package main

import (
“fmt”
“math/rand”
“time”

)

func main() {
list := […]string{“mano”, “hiori”, “meguru”,
“kogane”, “mmm”, “mitsumine”, “sakuya”, “kiriko”,
“kaho”, “choko”, “jyuri”, “rinze”, “natsuha”,
“amana”, “tenka”, “chiyuki”,
“asahi”, “huyu”, “mei”,
“toru”, “higuchi”, “pya”, “hinana”}

// 何等分するか
parse := 5
// 出現した乱数を保持するスライス
var slice []int
rand.Seed(time.Now().UnixNano())

for i := 1; i < len(list)+

元記事を表示

Qiitaの記事をZenn形式のMarkdownで保存して管理する

# 概要

Zenn で記事を GitHub に管理しているのですが、ここに昔 Qiita で書いた記事も加えたくて、Qiita の記事を Zenn 形式で保存するコマンドを作りました。

# インストール

“`shell-session
GO111MODULE=on go get -u github.com/ikawaha/qiita-zenn
“`

# 使い方

Zenn と連係しているレポジトリの `articles` の配下で以下を実行します。

“`shell-session
$ qiita-zenn -user ikawaha -verbose
https://qiita.com/api/v2/users/ikawaha/items?page=1
Goa v3 のテストをシュッとする
人生で何度目かのダブル配列TRIEを書いた
形態素解析器 kagome のユーザー辞書の使い方
goa でデザイン・ファーストをシュッとする
golang で string のポインタを取得する
Luceneで使われてるFSTを実装してみた(正規表現マッチ:VMアプローチへの招待)

元記事を表示

冷やかしで作った翻訳コマンド(TUI)が便利すぎるのでガチ使い!

GAS をラップした翻訳ツール (TUI command) を Go 言語で書きました。
tran_1.gif

# 対象読者

以下に該当する方にとっては読む価値があるかもしれません。

* 英語(や他の外国語)が苦手で翻訳ツールが手放せない
* ターミナルで作業する時間が長い
* translate-shell よりシンプルで視認性の良いコマンドを探している
* GAS (Google Apps Script) に興味がある
* Golang (Go 言語) の TUI ツールの実装に興味がある

# 目次

* [1. はじめに](#1-はじめに)
* [2. go-tran の概要](#2-go-tran-の概要)
* [3. go-tran の使い方](#3-go-tran-の使い方)
* [4. tra

元記事を表示

【Go 1.13】unexpected directory layout:がでた時の対処


### 追記
コメントにて指摘いただきました。`go mod`コマンドを用いると、`go mod init モジュール名`で指定したモジュールからインポートできることが確認できました。

“`go
$ go mod init hoge

—main.go
package main

import “hoge/sample”
|
(省略)

“`

これで動くと思います。

Goにて開発をしていて、ファイルを用いてパッケージを分けようとしたら起きたエラー。
とりあえず解決したので、すぐさまメモ。。。

## 環境

“`
バージョン
go version go1.13.14 linux/amd64
centos 7

ディレクトリ構造
./
|
|–sample/
| |
| |–sample.go
|
|–main.go

“`

## 実際のコード

“`go:main.go
package main

import “./sample”

func main() {
a := sample.Foo

元記事を表示

union-find木をGoで実装して理解する

初投稿です。
間違っているところがあったら指摘ください、できるだけ直していきたいと思います。

# union-find木とは何か?
– 集合を表現する手法の一つ。
グループ分けを木構造で表現するデータ構造。
同じ集合に属するということは同じ木に属する、というのがポイント。
[wikipedia](https://ja.wikipedia.org/wiki/%E7%B4%A0%E9%9B%86%E5%90%88%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0)

## なぜunion-findと呼ばれているか
– Find: 特定の要素がどの集合に属しているかを求める。
– Union: 2つの集合を1つにマージする

これらの2つの操作をサポートしているためにUnion-Findと呼ばれる。
wikipediaより

# 今回の例題
[AtCoderBeginnerContest177-D](https://atcoder.jp/contests/abc177/tasks/abc177_d)
要約すると
AとBはお友達

元記事を表示

GORMでつまずいたポイント

先日GORMに入門しかなり躓いたので、そのポイントを残しておこうと思います。

全体的には、

– **GORMは Naming Convention を強く求めるので、事前に知っておく必要がある**

と感じました。

# Modelの名前の複数形をテーブル名として認識する
– デフォルトでは **Structの名前の複数形をtable名として認識する**
– **`Person`** というStructをModelとして定義すると、table名は **`people`** として扱われる
– `persons` ではないことに注意
– **table名を変更するには、Tablerインタフェースを実装する**

“`go
// Tabler is interface of gorm table name
type Tabler interface {
TableName() string
}

// Person is the model of persons
type Person struct {
ID string `gorm:”colum

元記事を表示

GO言語でHello World

#はじめに
これからGO言語を学ぶうえで、備忘録としてやったことをまとめていきたいと思います。
GO言語つかってやってみたいことは結構あるので1から勉強ですね。(暗号解析とかめっちゃかっこよくないですか?)
学業の合間を縫っての勉強になるので更新は遅いと思いますが少しずつやっていきたいですね。
間違いがあった時は教えてもらえると幸いです。

ではやっていきます!

#開発環境
・ノートPC
・Windows 10
・Virtual Studio Code
・GO ver.1.15.2

をつかってやってます
※GO言語の環境構築の方法はここでは触れないです
#Hello World!の出力
プログラムの中身はこんな感じ

“`go:hello.go
package main

import “fmt”

func main() {
fmt.Print(“Hello World!”)
}

//実行方法
>go run hello.go
//Hello World!が出力されればOK
“`

モジュールの概念や関数の定義がほかの言語の書き方に似てますよね。合体してるって感じ。

元記事を表示

–go_out: protoc-gen-go: Plugin failed with status code 1.の解決方法

protoファイルを作成し、コードを自動生成しようとした際にエラーが発生。

“`
protoc -I helloworld/ helloworld/helloworld.proto –go_out=plugins=grpc:helloworld

protoc-gen-go: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
–go_out: protoc-gen-go: Plugin failed with status code 1.
“`

PATHを設定してくださいと言われているよう、、、
`bash_profile`に以下を追加すれば解決!

“`
export GOPATH=$HOME/go
PATH=$PATH:$GOPATH/bin
“`

元記事を表示

Goで開発するときのスニペットまとめ

# はじめに
Goでプログラミングをする時に個人的に使っているスニペットを簡単にまとめていきます。
めちゃめちゃよく使うものから、たまーにしか使わないものまで様々ですが
使えそう!!!って思ってくださった物だけでも導入してくださったら嬉しいです!

# vscodeでのスニペット登録
まずは簡単にvscodeでのスニペットの登録方法について紹介します
Code -> Preferences -> User Snippets
![スクリーンショット 2020-10-07 16.33.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281558/fa4a8c1e-a23f-a0fe-5758-6f6d1575d6fe.png)

とするとこのような画面が出てくるので`go`をクリック
![スクリーンショット 2020-10-07 16.34.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281558/cefba6

元記事を表示

macOS JetBrainsでダウンロードしたGoLandで改行「\」が打てない場合

JetBrainsで GoLandをダウンロードしプログラムを書いていたところ、改行を表す「\」が打てなかった。
色々調べてMacのキーボード配列をいじったりしたが変化せず、、、

optionキーとfnキーと同時に¥を押すと\が打てました。
どういうバグなんだろう、、、

元記事を表示

OTHERカテゴリの最新記事