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

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

go+gqlgenでGraphQLサーバを作る(GORM使ってDB接続)

# お題
表題の通り。GraphQL関連では[前々回](https://qiita.com/drafts/8abd445edba347e8f6f1)、frontend に「nuxtjs/apollo」、backend に「go+gqlgen」の組み合わせでGraphQLサービスを作るというのをやった。
その時は backend は単に固定のJSONを返すだけでお茶を濁したのだけど、もちろんサービスとして成り立たせる上で固定のJSON返すだけなんてことはない。
ので、今回は、永続化実装。

# 開発環境
## # OS – Linux(Ubuntu)
“`
$ cat /etc/os-release
NAME=”Ubuntu”
VERSION=”18.04.2 LTS (Bionic Beaver)”
“`

## # バックエンド
### 言語 – Go
“`
$ go version
go version go1.13.3 linux/amd64
“`

### パッケージマネージャ – Go Modules

### IDE – Goland
“`
GoLand 2019

元記事を表示

envoy xDS により動的な設定変更を実現する(入門編)

# 概要
* `envoy` の設定を動的に変更する機構である `xDS` を試してみた
* ちょっとつっこんだ内容になると日本語の情報がほとんどなくて辛かったのでここに記しておきたい

# 対象読者
* envoy についてある程度知ってる
* 参考: [Envoy (Envoy proxy)、Istio とは?](https://qiita.com/seikoudoku2000/items/9d54f910d6f05cbd556d)
* Go言語が分かる

# xDS とは?
* 掻い摘んで言うと複数の envoy proxy サーバーの設定を gRPC などにより動的に制御するために用意された仕組み
* envoy では設定ファイルの構造が Protocol Buffers により定義されている
* この定義を元にした gRPC インタフェイスも用意されている
* 定義に従い gRPC サーバーを自分で実装して配置することにより、動的設定の変更を envoy に通知するような仕組みを実現することができる

# サンプル
下記の前提条件をもとに、実際の設定・

元記事を表示

Tcl・R・Golang・RustなどでFizzBuzzやった時のメモ・感想

# Tcl・R・Golang・RustなどでFizzBuzzやった時のメモ・感想

学部のとある講義に参加させてもらった際にいろいろな言語でFizzBuzzを書くことをしていた。
本稿はその時のメモや感想。
(別の回ではPostScriptで書いてたとか…)

扱った言語は以下。

* Tcl
* R
* Golang
* Rust
* ZSH
* SQLite3
* Ruby

ZSHやSQLite3、Ruby以外は全て初めて触った。
上記の3つの言語は書き方に工夫されていたが、琴線に触れたのは、
SQLite3だけだったのでそちらだけ記載。

## Tcl

### インストール

“`shell-session
$ apt install tcl-dev/stable
“`

### サンプルコード

“`tcl:fizzbuzz.tcl
#!/usr/bin/tclsh

for {set i 1} {$i <= 40} {incr i} { if {$i%15==0} { puts FizzBuzz } elseif {$i%5==0}

元記事を表示

Jupyter Notebook/Labでgo言語を使うためのGophernotesでPATHを設定する。

Jupyter Notebook/LabでGo言語を利用するためのGophernotesを導入した際に、PATHの設定で手間取ったので解決方法のメモになります。

もしかするともっと良い方法があるかもしれませんが。

# 事象

Gophernotesを導入し、サンプル程度は動作するようになったのですがサードパーティ製ライブラリをimportしようとするとエラーが発生します。

例えば次のようなimportを行うと

“`go
import (
“bufio”
“context”
“fmt”
“io”

“cloud.google.com/go/storage”
)
“`

“cloud.google.com/go/storage”の読み込み部分で次のエラーが発生します。
(もちろん、go getは実施済みです)

“`
error loading package “cloud.google.com/go/storage” metadata: ‘go list’ driver requires ‘go’, but executable fi

元記事を表示

【コード無し】卒論で楕円曲線とブロックチェーンについて書いたので、勉強方法をまとめてみた

# What is この記事
タイトルの通り、卒業論文でビットコイン、ブロックチェーンに使われている楕円曲線暗号について書きました。楕円曲線、ブロックチェーンそれぞれ分けて文献紹介します。
対象読者は、ブロックチェーンとか興味あるけど、勉強したことないよ、って方です。また、紹介した文献はごく一部のため、あくまで勉強時の選択肢の1つとして見ていただければと思います:relieved:
ちなみに、アフィリエイトではなくガチでわたしが利用させていただいたものしか載せてませんので、他におすすめ文献等ありましたらぜひご指摘の方お願いします!

# 誰
初投稿です。偏差値50くらいの可もなく不可もなく大学で数学やってますが、数学は全然わかりません。ただ、暗号学専攻なので書きました。一応エンジニアやってます。
わたしの拙い卒業論文が見たい方は下のURLのAbout Meからぜひ見ていただきたいです。フィードバック等もいただけると全力で感謝いたします。

こちら→ https://ishihaya.com/

# 参考文献一覧

## ブロックチェーン・ビットコイン(基礎知識)

### 【

元記事を表示

眺めて覚えるGo言語 その6 可変引数

#Go言語で可変引数を使う。
### では、眺める例題

“`main.go
ackage main
import(
“fmt”
“reflect”
)
func f(args …interface{}){
for i,arg:=range args{
fmt.Println(i,reflect.TypeOf(arg),arg)
}
}
func sum(a int,b int) int{
return a+b
}
func main(){
f(10.0/3,10,20,30,”Tokyo”,sum,sum(5,10))
}

0 float64 3.3333333333333335
1 int 10
2 int 20
3 int 30
4 string Tokyo
5 func(int, int) int 0x4bb2a0
6 int 15
Process exiting with code: 0

“`
###注目すべき書き方
-**args …interface{}**
可変引数
**f(10.0/3,10,20,30,”Tokyo”,sum,sum

元記事を表示

Goでリバースプロキシつくるときにつかえる net/http/httputil.ReverseProxy の紹介

## はじめに
GoでHTTPのリバースプロキシを作るときには標準パッケージである net/http/httputil の ReverseProxy が使えるので、提供している機能やざっくりした使い方などについて紹介しようと思います。

これは [Makuake Development Team Advent Calendar 2019](https://adventar.org/calendars/4716) の22日目の投稿です。

## tl;dr
– hop-by-hop ヘッダーを自動で捨ててくれるのがうれしい
– X-Forwarded-For を自動で追加してくれてうれしい
– 通過するリクエスト、レスポンスの加工ができるのでやりたいことはだいたいできそう

## httputil を利用したリバースプロキシの最小構成
パッケージドキュメントの example からの引用です

“`go
package main

import (
“fmt”
“io/ioutil”
“log”
“net/http”
“net/http/httptest”
“net/htt

元記事を表示

眺めて覚えるGo言語 その5 TableView&Button

#GUIを扱うと欲しくなるのがData Grid Viewですね。
データを一覧表で見せるやつ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/e954c7a3-b466-be41-6db5-5d1532f2dd3e.png)
#まずデータ

“`data.json
[{“ID”:”1″,”Name”:”関波子”,”Namae”:”セキナミコ”,”Sex”:”女”,”Btype”:”AB”,”Date”:”1980/07/31″,”Tel”:”03-3060-4716″,”Mob”:”090-7787-3784″,”Email”:”sk@eaccess.net”},
{“ID”:”2″,”Name”:”小倉準司”,”Namae”:”コクラジュンジ”,”Sex”:”男”,”Btype”:”A”,”Date”:”1973/10/08″,”Tel”:”0166-36-3522″,”Mob”:””,”Email”:”junzi-kokura@eaccess.net”},
{“ID

元記事を表示

rubyからgolangエンジニアへ

転職してgolangを触るようになり、3ヶ月経ったので一度ここで整理したいと思います。
前職ではrubyを6年間ぐらい触っていました。
rubyからgolangを触るようになって、学んだ事などをまとめていければと思います。

## 項目
1. go始めるにあたって
2. 定数定義
3. 継承
4. testの書き方
5. まとめ

## 1. go始めるにあたって
### 参考書籍
goを始めるにあたって、まず読んだ本はこの辺りです。
[改訂2版 みんなのGo言語 松木 雅幸](https://www.amazon.co.jp/dp/4297107279/ref=cm_sw_r_tw_dp_U_x_wu79DbNFQWN73)
[スターティングGo言語 (CodeZine BOOKS) 松尾 愛賀](https://www.amazon.co.jp/dp/4798142417/ref=cm_sw_r_tw_dp_U_x_wu79DbYM0ZQAF)

### 環境構築
有償にはなりますが、IDEは[Goland](https://www.jetbrains.com/ja-jp

元記事を表示

眺めて覚えるGo言語 その4 Windows10 GUI

# GO は、サーバー用言語だからGUIは、HTMLで十分言う考え方がある。
###だけどGUI作りたい。
WALKを使えば簡単に作れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/06362c0c-7334-7ebc-df4c-ca96c19a22cb.png)
こんな感じのGUI
ライブラリのありか!
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/92fbbc49-68f0-1661-9e17-5166edc52701.png)]
(https://github.com/lxn/walk)
#インストール
“`
C:\Users\hirat\go-work\gui> go get github.com/lxn/walk
“`
つぎにテストソース

“`test.go
package main

import (
“github.com/lxn

元記事を表示

Goのfor文のまわりの変数スコープ

Goでの変数のスコープについてはすでにあちこちで語られているとは思いますが、再確認。

以下のプログラムは i を何度も定義していますが動作します。

“`go
package main

import (
“log”
)

func main() {
log.SetFlags(log.Lshortfile)

i := 123
log.Println(i)
for i := 0; i < 3; i++ { log.Println(i) i := 9999 log.Println(i) } log.Println(i) } ``` https://play.golang.org/p/eSlHO5tlhBH playground での結果 ``` prog.go:11: 123 prog.go:13: 0 prog.go:15: 9999 prog.go:13: 1 prog.go:15: 9999 prog.go:13: 2 prog.go:15: 9999 prog.go:17: 123 ``` こちらで解説されているものもほぼ同じですね。 htt

元記事を表示

Docker Imageのタグ一覧を確認できるCLIツール`docker-tags`を作りました

# 作ったきっかけ

Docker Imageのタグの一覧を確認したい時に毎回Docker Hubに見に行っていたので、コンソールから確認できたらいいなーと思ったので作りました。

# GitHub

[kou\-pg\-0131/docker\-tags](https://github.com/kou-pg-0131/docker-tags)

# インストール

goの実行環境があれば`go get`で簡単にインストールできます。

“`bash
$ go get -u github.com/kou-pg-0131/docker-tags
“`

# 使い方

“`bash
$ docker-tags イメージ名
“`

**使用例**

“`bash
$ docker-tags node
node:latest
node:0
node:0-onbuild
node:0-slim
node:0-wheezy
node:0.10
node:0.10-onbuild
node:0.10-slim
node:0.10-wheezy
node:0.10.28

“`

#

元記事を表示

golangで簡単なWebAPIを作成してみた

# はじめに
今回はgoogle大先生の作成した言語であるgo言語(golang)を使って簡単なWebAPIを作成してみました。

ソースコードはこちら

この記事の対象としてはgo言語で手っ取り早くアプリを作ってみたい人、go言語でデータベースとの通信を行うAPIを作成したい人などを想定しています!

# 参考にした記事
* GoでWebアプリを作ろう 第一回 : Goで簡単なCRUD: http://studio-andy.hatenablog.com/entry/go-todo-crud#f-947194dd
* Golang製DBマイグレーションツールgoose + MySQLを試してみた : https://qiita.com/K_ichi/items/b9362e3a3c5688e494e2

# 工数
2h * 3 = 6hくらい?

# 前提条件
* os – macOS(Mojave 10.14.6)
* framework – gin, xo(あとでインスト

元記事を表示

GolangのJSONでomitemptyしても出力されてしまう

タイトルどおり。
omitemptyの前にスペースを入れるとomitemptyが有効にならない。

ビルド環境 Go1.13

NG例

“`go
type hoge struct {
Str string `json:”str, omitempty”`
}
“`

OK

“`go
type hoge struct {
Str string `json:”str,omitempty”`
}
“`

元記事を表示

コンテナイメージの情報をシンプルに確認するツールdockertags

# はじめに

公式のコンテナイメージを利用していると、いまどんなOS,バージョンのイメージが使えるのか知りたいときがあります。そんなときに使えるツールを作りました。(Golangで書いてます)
![image](https://github.com/goodwithtech/dockertags/raw/master/assets/usage.gif)
https://github.com/goodwithtech/dockertags [![stars](https://img.shields.io/github/stars/goodwithtech/dockertags.svg)](https://github.com/goodwithtech/dockertags)
(たぶんこのままだとstarが一個もつかないので気がついた人はstarください)

たとえばgolang 1.14のイメージ、alpineベースで探したいときは、以下のように指定できます。

“`
$ dockertags -c 1.14 -c alpine golang
+——————-

元記事を表示

Go Playground で time.Now() が 2009-11-10 の理由

Go Playground (https://tour.golang.org/welcome/4) で `time.Now()` の結果を書きのように説明しています。

> In the playground the time begins at 2009-11-10 23:00:00 UTC (determining the significance of this date is an exercise for the reader). This makes it easier to cache programs by giving them deterministic output.

`time.Now()` を実行すると `2009-11-10 23:00:00` と出力されますが、その意味は「読み手で調べてね」とのことです。

## 結論
調べてみた結果、***Golang が世に登場した日*** のようです。
(リリースした日というより、アナウンスされた日)

## 時間が始まるタイミング
「あなた」の時間がスタートしたのはいつでしょうか?

そうです。生まれたときですね

元記事を表示

GoとGoogle Homeでガチでメリーさんの電話を実装してみました。

24日目で思ったより位置情報で遊べなかったので、位置情報を使ったネタを考えてみました

24日目
https://qiita.com/usk81/items/3b1357de73d99bb13781

# つくったもの

https://github.com/usk81/til/tree/master/go/marys-call

# ネタ

位置情報を使ったもの…
メリークリスマス…
メリー…
メリー…

( ゚д゚)ハッ! メリーさん!!

というわけで、メリーさんの電話をリアル実装してみました。

# 仕様

1. 最寄り駅からスタート
2. Google Home経由で連絡を取る
3. 途中で途中経過を伝える
3. 家についたらワンコール
4. 次の瞬間、「貴方の後ろにいるの」
5. 「ジョークですよw」で終わり

距離に関わらず同じ感覚でGoogle Homeが話すと面白くないので、人間の走る速度で最寄り駅から現在地を移動させて、距離に応じて話す内容を変えるようにしました。

人間が歩く速度(約2〜4.8km)だとゆっくりすぎるので、ウサインボルトが走る速さに

元記事を表示

Go: これまでとこれから – 2019 Edition –

この投稿は [CyberAgent Developers Advent Calendar 2019](https://adventar.org/calendars/3981) 24日目 兼 [Go2 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/go2) 25日目の記事です。

先日、社内限定で開催された [カンファレンス](https://cyberagent.ai/blog/pr/%E3%82%AB%E3%83%AB%E3%83%81%E3%83%A3%E3%83%BC/10830/) で登壇した「Go: これまでとこれから – 2019 Edition -」のスクリプトから、confidential な内容を省いてお話しします。

![slide 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72064/9d137524-3ae5-065c-1beb-05e476d730de.png)

元々この発表をしよう

元記事を表示

Go lang でファイルパスの最後のみ取得する

Go lang で、ファイルパスの最後のみを返すメソッドないかなと思って調査した。`filepath.Base` がそれで、パスの最後の要素を返す関数。

“`golang
// Base returns the last element of path.
// Trailing path separators are removed before extracting the last element.
// If the path is empty, Base returns “.”.
// If the path consists entirely of separators, Base returns a single separator.
func Base(path string) string {
“`

良さげだが、両方のパスで動作するか確かめてみる。Windows の環境で、Windows ベースのファイル区切り文字と、Linuxベースの両方を試してみる。

## Linux ベース on Windows

“`golang
package main

impo

元記事を表示

Go Advent Calendar 2019 / 近年取り組んでいるメッセージ指向パターンの紹介

ここ何年か、メッセージ指向の実装パターンを試行していて、いい感じになったので紹介します。

秘伝のたれリポジトリから抜粋していきます。
https://github.com/michilu/boilerplate

構成要素は、次の3つ。

– 1. 処理関数 `func(InT) (OutT, error)`。`InT` を引数にとり、`OutT` を返す。
– 2. 処理関数と接続するchannel `chan<- InT`/`<-chan OutT` を生成する`GetPipeName`関数。 - https://github.com/michilu/boilerplate/blob/d787dec/service/pipe/pipe.go#L24-L31 ```go func GetPipeName( ctx context.Context, fn func(InT) (OutT, error), fnErr func(context.Context, error) bool, ) ( chan<- InT, <-chan OutT, ) ``` -

元記事を表示

OTHERカテゴリの最新記事