- 0.0.1. AtCoder Regular Contest 105のメモ
- 0.0.2. googleのsubcommandsでGCPのSecret Managerへの読み書きをラップ
- 0.0.3. [GoLand]コメントの先頭にスペースを設定する
- 0.0.4. [Go]「…(ピリオド3つ)」の使い方
- 0.0.5. QiitaのtagフィードをCLIで見るためのCLIツールをGo言語で書いた
- 0.0.6. AtCoder HHKB プログラミングコンテスト 2020 参戦記
- 0.0.7. HHKB プログラミングコンテスト 2020のメモ
- 0.0.8. DockerでのRailsアプリケーション構築
- 0.0.9. 絶対に転職すると心に誓ったのでgolangで”hello word” してみた
- 1. とりあえず準備
- 2. コードを書いていこう
- 2.0.1. Go言語(net/http)でWebサーバーを作成(1)
- 2.0.2. [Golang] 当番を乱数で決定するプログラム
- 2.0.3. Qiitaの記事をZenn形式のMarkdownで保存して管理する
- 2.0.4. 冷やかしで作った翻訳コマンド(TUI)が便利すぎるのでガチ使い!
- 2.0.5. 【Go 1.13】unexpected directory layout:がでた時の対処
- 2.0.6. union-find木をGoで実装して理解する
- 2.0.7. GORMでつまずいたポイント
- 2.0.8. GO言語でHello World
- 2.0.9. –go_out: protoc-gen-go: Plugin failed with status code 1.の解決方法
- 2.0.10. Goで開発するときのスニペットまとめ
- 2.0.11. macOS JetBrainsでダウンロードしたGoLandで改行「\」が打てない場合
AtCoder Regular Contest 105のメモ
# 前置き
Atcoderをやってみたので、自分用のメモです。
あとから加筆・修正する予定です。# 問題
https://atcoder.jp/contests/arc105
# A
“`Q_A.go
package mainimport (
“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 mainimport (
“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 mainimport (
“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 mainimport (
“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 mainimport (
“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 言語で書きました。
# 対象読者
以下に該当する方にとっては読む価値があるかもしれません。
* 英語(や他の外国語)が苦手で翻訳ツールが手放せない
* ターミナルで作業する時間が長い
* 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 mainimport “hoge/sample”
|
(省略)
—
“`これで動くと思います。
—
Goにて開発をしていて、ファイルを用いてパッケージを分けようとしたら起きたエラー。
とりあえず解決したので、すぐさまメモ。。。## 環境
“`
バージョン
go version go1.13.14 linux/amd64
centos 7ディレクトリ構造
./
|
|–sample/
| |
| |–sample.go
|
|–main.go“`
## 実際のコード
“`go:main.go
package mainimport “./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 mainimport “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:helloworldprotoc-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キーと同時に¥を押すと\が打てました。
どういうバグなんだろう、、、