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

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

golangでk8sクラスタのDeploymentをscale

依存関係です

“`go
package main
import (
“fmt”
“net/http”
“io/ioutil”
“log”
“crypto/x509”
“crypto/tls”
“encoding/json”
“strings”
)
“`

リクエストの関数です。

“`go
func request (endpoint,method,data,ctype,crtpath,token string) string {

caCert, err := ioutil.ReadFile(crtpath)
if err != nil {
log.Fatal(err)
}

caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(caCert)
fm

元記事を表示

hugoでその日の記事がビルドされない問題を回避する

hugoは、その日の記事がビルドされない問題があります。その回避法です。

“`toml:config.toml
[frontmatter]
date = [“:filename”, “:default”]
“`

ファイルは`content/post/2019-12-09-test.md`(その日の日付)とします。

## hugoでその日の記事がビルドされない問題

これは、UTCがデフォルトになっているためだと思いますが、hugoでは、通常、`.Date.Local`を使っても、その日の記事がビルドされない問題があります。

“`html:layout/_default/list.html
{{ dateFormat “2006-01-02T15:04:05JST” .Date.Local }}
“`

そこで、dateをファイル名から取得する方法に切り替えると、回避できます。

元記事を表示

リアルタイム画像リサイズAPIをGo + Serverless Application Modelで作った時の感想

ちょっと遅れましたすみません。
fushimiと申します。投稿させていただきます。

## Api Gateway + Lambda + Go + S3 で リアルタイム画像変換処理

Goで画像リサイズをやる機会があったので記述します。

今回は、事前に動画のエンコード済みパターンを作っておくのではなく、さくらの[imageflux](https://www.sakura.ad.jp/services/imageflux/)のように、**リアルタイムで動画のサイズを命令通りに変換しよう**っていう試みです。

数年前初めてこのアイディアを聞いたときは、「キャッシュに乗らないエンコードパターンいくらでもパラメータで作り放題だけど不正アクセスとか大丈夫かなあ…」と思ったものですが、各社なんだかんだやっていっている試みがあるようです。類似のものは結構見つかるかと思います。

サービスの画像が重くて困り始めた社内の人間から、「うちもLambdaとかでサクッと作れない…?」と聞かれたのもあり、試しにやってみました。

## image-resizer-service

まず、aws

元記事を表示

[Golang][競プロ]与えられた1~9の数値4つで任意に2桁の整数を2つ作り、それらの和が最大になる場合の、その和を求める問題について解説

# 問題

**1〜9までの数値が4つ与えられ**、あなたはその4つの数値で、**自由に2桁の整数を2つつくる**とします。
様々な組み合わせがあるかと考えられますが、**2つの2桁の整数を合計したときの、最も大きい値**を調べて下さい。

## 例

**たとえば、`1 2 3 4`という数値を与えられた場合、**「12+34」や「13+24」などさまざまな組み合わせができます。
しかし、合計が最も大きくなるのは、この場合だと「42+31」であり、その合計は`73`です。
**この場合の答えは`73`として下さい。**

なお、この値は以下のような形で標準入力で渡されることとし、全て同じ値であることもありえるものとします。

“`text:与えられる数値の標準入力例1
1 2 3 4
“`

“`text:与えられる数値の標準入力例1に対しての期待する回答
73
“`

↑この場合、42+31= 「73」 が正解になります。

“`text:与えられる数値の標準入力例2
9 2 7 5
“`

“`text:与えられる数値の標準入力例2に対しての期待する回答
167
`

元記事を表示

golangを使って推しに励ましてもらう

## 進捗生成って大変

進捗生成するのって大変ですよね!githubに草が生えるだけだと物足りないと思ったので、最近学習し始めたgoを使って自分の推しが褒めてくれるような物を作りました

## 目次
1. github api v4を覗いてみる
2. githubv4を使ってみる
3. webhookを使ってdiscordにメッセージを送る
4. herokuにデプロイしてみる

## github api v4を覗いてみる

> github api v4

github api v4ではgraphQLと言うものが使われています。ここではgraphQLの最低限の説明をします

> 詳しい説明はこちら:https://qiita.com/bananaumai/items/3eb77a67102f53e8a1ad

### GraphQLの利点
私自身も今回初めてgraphQLを使ったのであまり詳しいことは言えませんが、これを使っていてひとつ思ったこととしては「サーバー側が楽」だと思いました。
なぜかと言うと、graphQLを使うことでフロント側は欲しい情報だけを簡単に取得することが

元記事を表示

AtCoder Beginner Contest 147 参戦記

# AtCoder Beginner Contest 147 参戦記

## A – Blackjack

2分半で突破. 書くだけ.

“`python
A1, A2, A3 = map(int, input().split())

if sum([A1, A2, A3]) >= 22:
print(‘bust’)
else:
print(‘win’)
“`

## B – Palindrome-philia

2分で突破. 書くだけ.

“`python
S = input()

result = 0
for i in range(len(S) // 2):
if S[i] != S[-(i + 1)]:
result += 1
print(result)
“`

## D – Xor Sum 4

46分くらい?で突破. Cを提出したら WA3 で諦めてこっちに取り掛かったのでよく分からず. ビットごとに累積 XOR をするだけ. だけって言ってもコーディングは中々大変. Python で書いたら TLE になったので、Go で書き直した. `% 10

元記事を表示

【Golang】Templateファイルを使って大容量JSONファイル生成するツール

# お題
[前回](https://qiita.com/sky0621/items/5f4f38b261e2fd050ece)の記事で大きめサイズなJSONを用意するのに適当に書いたコードを少し直したもの。
ツールと言っても、汎用性のあるものではなく、指定した件数分の構造を持つJSONを生成するだけ。

以下のようなテンプレートファイルを「`json.tmpl`」という名前で用意して、ツールと同じパスに配置。

“`
{
“items”: [
{{range .}} {
“id”: “id-{{.No}}”,
“name”: “あいてむ{{.No}}”,
“price”: {{.No}}
}{{.Comma}}
{{end}} ]
}
“`

で、コマンドラインで `./tools` と叩けば以下のJSONが出来上がる。ただそれだけ。

“`json:[data.json]
{
“items”: [
{
“id”: “id-1”,
“name”: “あいてむ1”,
“price

元記事を表示

ディスク情報を取得するコマンドを試作してみました

この投稿は「[さくらインターネット Advent Calendar 2019](https://qiita.com/advent-calendar/2019/sakura)」の9日目の記事です。

## 概要

* ディスク情報を取得するコマンドを Go 言語で実装してみました。
* [さくらのクラウド](https://cloud.sakura.ad.jp/)で試してみます。
* コマンドの仕様について説明します。

## 動機について

普段 Go 言語をメインで使っているので、Go 製のライブラリやツールなどをよく検索しています。
そんな中、Go 言語で実装されたハードウェア情報を取得するツール [ghw](https://github.com/jaypipes/ghw) を見つけたのですが、ghw をはじめ、`udevadm info` や [util-linux](https://github.com/karelzak/util-linux) の `findmnt` などがどのようにディスク情報を取得しているのかが気になり、学習がてら実装してみました。

## ディスク情報を

元記事を表示

[The Go Programming Language Specification] String literals

# Go
Golangのspecificationの日本語訳と、ちょっとした遊びぐらいのコードを載せていく感じで進めようと思うので、
すでにGolangでコードを書いている人にはつまらないかもしれないです

また、間違っている部分があればぜひご指摘いただけると嬉しいです?‍♂️

#### 想定する読者層
– Golang初めてそこまで期間が経っていない
– 英語の公式読むの辛い
– https://golang.org/ref/spec

### String literals
本記事は公式のドキュメントを参考にしています

– https://golang.org/ref/spec#String_literals

String literals はcharacter(文字)の結合された集まりです

### Stringの宣言方法
String literals は2つの宣言方法があります ` のバッククウォートもしくは、 ” ダブルクウォートを使う方法です

“`golang
s := `string`
s := “string”
“`

2つの宣言方法の違いは、

元記事を表示

Go言語、buffaloのログイン処理を作成してみる

この記事は [Go4 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/go4) の 9 日目の記事です。

8日目の記事は[こちら](https://qiita.com/KanikoroRerere/items/e2dcc44e625849526015)

## go buffaloとは

https://gobuffalo.io/en

go言語で作られたrailsっぽいフレームワークです。
早くて軽くて開発環境も最初からホットリロード付きで非常に快適に開発を進めることができます。
テストも簡単に書けますよ。

インストール方法などは[こちら](https://qiita.com/k-kurikuri/items/f46356b70fe3e7e8da7d)の記事を参照ください。

## ログイン機能を作りたい
さっそくログイン機能を作っていきましょう。

まずはプラグインのインストールです。

“`shell
buffalo plugins install github.com/gobuffalo/buffa

元記事を表示

goでyamlを直感的にお手軽に操作できるIF「go-rough-yaml」

## 概要

golangでyamlをラフに扱うパッケージを作りました。

> xshoji/go-rough-yaml: go-rough-yaml provide accessor methods to edit yaml.
> https://github.com/xshoji/go-rough-yaml

背景とかいいから使いっぷり教えてよ!って方は[使い方](#使い方)までどうぞ

## 背景

yamlをgolangで参照、加工しようとした際、お手軽にyamlのデータを扱えるパッケージが存在しないことに気づきました。
ここでいう「お手軽」とは、例えば特定のキーを参照、削除、あるいは書き換えたりするだけの操作を指します。
goでyamlを扱うためには

> go-yaml/yaml: YAML support for the Go language.
> https://github.com/go-yaml/yaml

を使うのが一般的です。yamlの内容を構造体にUnmarshalして利用しますが、構造体を定義するのが面倒です。
このとき構造体を定義せずとも、`map[in

元記事を表示

LINEに投稿した写真をS3に保存していく

この記事は[ぷりぷりあぷりけーしょんず Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ppap)の9日目の記事です。

# はじめに
現在個人でLINEMessagingAPIを使ったアプリ開発をしており、メッセージから画像を取得しAWS S3に保存していく、という工程をAWS Lambdaで実装したのでその話をしていきます。

ちなみに今回LambdaのRuntimeはGoで書いたのですが当方Goでちゃんと実装するのは初めてのコードになるので見にくい箇所もあると思いますが、もし心優しい方いましたら丸めの鉞(指摘)を頂けますと幸いです。

# 使用技術
LINE Messaging API
AWS Lambda
AWS APIGateWay
AWS S3
Go 1.13

# 設計

![Untitled Diagram.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227898/0af34db7-b8bf-6541-a25

元記事を表示

[The Go Programming Language Specification] Pointer

# Go
Golangのspecificationの日本語訳と、ちょっとした遊びぐらいのコードを載せていく感じで進めようと思うので、
すでにGolangでコードを書いている人にはつまらないかもしれないです

また、間違っている部分があればぜひご指摘いただけると嬉しいです?‍♂️

### 想定する読者層
– Golang初めてそこまで期間が経っていない
– 英語の公式読むの辛い
– https://golang.org/ref/spec

## Pointer types
本記事は公式のドキュメントを参考にしています

– https://golang.org/ref/spec#Pointer_types

### Pointer とは?
**Pointer はその変数のメモリ上のアドレスを示します**

は?と大学時代の私はなりC言語のことが嫌いになって一度プログラミングを挫折しました
Pointerを使って返却されたアドレスをみてシンプルに拒否反応が出ました
ちなみに↓のような値でした

“`text
0xc0000a0008
“`

結局その後、PHP, Pytho

元記事を表示

signal: broken pipe が解消されないときはGoのバージョンも関係してるかも

本記事は`signal: broken pipe`について調べた記録。

自分がハマった環境は以下。

“`
❯ go version
go version go1.11.4 darwin/amd64
“`

次のようなコードを書き、パイプで別プロセスにつなげる。
パイプ先が終了すると`signal: broken pipe`と表示される。

“`golang
package main

import (
“fmt”
)

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

“`
❯ go run main.go | head -n 1
hello
signal: broken pipe
“`

この挙動自体は[ドキュメント](https://golang.org/pkg/os/signal/#hdr-SIGPIPE)に書いてある。

> If the program has not called Notify to receive SIGPIPE signals, then the behavior depends

元記事を表示

経験が浅いエンジニアが Go の開発チームにスムーズに入っていくために試したこと

# はじめに

わたしは3ヶ月前(2019年の9月)にGoの開発現場に転職した、まだまだ駆け出しGopherです。

エンジニアになったのは2018年の6月のため、Goの現場に転職するまで1年と3ヶ月ほどでした。

経験が浅いため、苦労することが多くありました。

ありがたいことにGoに関わる知識はインターネットに無数に存在します。

しかし、Goの開発現場に経験が浅いエンジニアがスムーズに入って行くためのGoのTipsはそこまで多くはないと感じました。

Goは非常にシンプルな言語で習得が比較的容易(主観ではないと思う。。。)ですので

わたしのように経験の浅いエンジニアでも携わる機会が今後増えてくると思います。

そのような人の灯台となるような記事になればと思っています。

## 注意事項

– 初投稿です。読みにくさの感じる文章かもしれません。申し訳ない! その怒りはいいねボタンにぶつけてください。

– 「おれはこうした!」「わたしはこうした!」「君は間違っている!」等のご意見大歓迎です。

– わたしはAPIの開発チームに所属していますのでAPI開発に偏ったものになるかと

元記事を表示

Lokiで収集したログをGrafanaで見るハンズオン

# Grafana Lokiとは

![スクリーンショット 2019-12-08 11.32.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191385/f3b871a2-1351-d3a3-d46f-71fb8e42de53.png)

[Grafana Lab](https://grafana.com/)が開発しているOSSのログ集約プロダクト。
2019年11月にversion 1.0をリリースしたばかりですが、以前から注目度は高く、2019年12月現在 GitHub Starは8,000を超えています。
https://github.com/grafana/loki

定番のEFK(Elasticsearch, Fluentd, Kibana)との違いはこちらを参照してみてください。
https://github.com/grafana/loki/blob/master/docs/overview/comparisons.md

そんなLokiを利用することを検討しており、今回とりあえず動

元記事を表示

GoでQiitaAPIを呼んでSlackに通知してみた話

## はじめに
本記事は[コネヒト Advent Calendar 2019](https://qiita.com/advent-calendar/2019/connehito)の8日目の記事です。

こんにちわ!バリ寒かなりましたね!
布団にくるまって出社したいフロントエンジニアの黒田です。

今回は最近業務の都合上、Goを触ることになったのでその学習の一環としてツールを作成してみた話です。
というのも、まだGo言語を触り出して1,2ヶ月ほどで、A Tour of Goをや入門書を読んだ上でそろそろ実際に動くもので価値を提供できそうなものを作りたいなといったことが主な動機です。
というわけで、ちょうど社内slackにQiitaの人気記事が毎日流れてくるチャンネルがあり、レベル感もちょうど良さそうなので同じような機能をGoで作ってみました。

## 要件
要件としては、

– SlackAPIからその日の人気記事を取得する
– ここでいう人気記事は前日作成されたストック10以上の記事とします
– 上記で取得された記事の情報を最大5件SlackにPOSTする

の大きく2つです。

#

元記事を表示

Golang strconvについて調べてみる

[Link-1]:http://golang.jp/pkg/strconv
[Link-2]:https://golang.org/pkg/strconv/
[Code-1]:https://www.codewars.com/
[play-1]:https://play.golang.org/p/sQRJlh62vbz

#きっかけ
[codewars][Code-1]で出題される問題に`文字列->数値`の変換を求められる問題があるので調べてみると、`strconv`が見つかるが途中で文字列が入った場合などのエラー集が見つからなかったので自分で調べてみた。

##`文字列<->数値`するライブラリ`strconv`
調べると、日本語で翻訳された以下のサイトが出てくる
[golang.jp][Link-1]
こちらはサイトにも書いてある通り、古い翻訳になっている為`strconv`から削除されているものも載っている
例えば、`文字列->float`を行う`Atof`関数などは[現在の公式のドキュメント][Link-2]では記載されていない為、コンパイルしても通らないので、注意が必要です。

元記事を表示

golangでlsコマンドを作ってみる

この記事は [Go5 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/go5) の 8日目の記事です!

当初、「golang×webassemblyで遊んでみる」みたいなタイトルで記事を書いていたのですが
前日にPCがぶっ壊れて記事やコードやら全部吹っ飛んだので予定を変更して「golangでlsコマンドを作ってみる」でお送りします。
バックアップ大事。

ネタ元は週末に行われたgolang社会勉強会です。ネタをパクることをお許しくださいS先輩。

それではいきましょう!Go5!

## lsコマンド実装
始めにオプションなどの実装を一切考えない単純なlsコマンドを実装してみましたが、以外に少ないコード量で実装できたのでビックリしました。

“`golang
package main

import (
“fmt”
“io/ioutil”
“log”
“os”
)

func main() {
dir, err := os.Getwd() // カレントディレクトリ情報取得
if err != n

元記事を表示

[Go] constant x.x truncated to integerはなぜおきるのか

# TL;DR
– `const n = int(0.5)` はconstant x.x truncated to integerというコンパイルエラーになってしまう
– 型付き定数の値は、常に定数型の値で正確に表現可能でなければならない
– https://golang.org/ref/spec#Constant_expressions
– int(0.5)は切り捨てが発生する値なので正確に表現できる値ではない
– 普段の型変換の言語仕様にも「For the conversion of non-constant numeric values」と定数には適用されてないと明記してある
– https://golang.org/ref/spec#Conversions

# 背景
[golang.tokyo #28](https://golangtokyo.connpass.com/event/156678/)のDevquizにて、

“`go
package main

import “fmt”

const n = int(0.5)

func main() {

元記事を表示

OTHERカテゴリの最新記事