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

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

Goのsqlmockを使ってみた

sqlmockを使ってみた。コードは[こちら](https://github.com/reikkk/dbmock)になります。

元記事を表示

Go で ipc package を書いてみた

あけましておめでとうございます。

昨年の末ごろから、なんとなーくプロセス間のソケット受け渡しを Go でやってみたいなーと思って少しずつコードを書いていたんですが、年末年始の時間を使って書き上げたので、ここで報告します。

軽い気持ちで書き始めたものの、なかなかハマることが多くて結構な時間がかかってしまいました。。。

成果物
========================================

https://github.com/navel3/go-ipc
https://godoc.org/github.com/navel3/go-ipc

Motivation
========================================

– TCP接続をプロセス間で授受することで、コネクションレスなリバースプロキシ的なものができるのではないかと思った
– Go だけで低レイヤーのコードを書いてみたかった
– テストからドキュメントまで Go Way に従って書く題材が欲しかった

実装
==================================

元記事を表示

【Go】Sqlite3の利用方法

##1. Sqlite3のインストール

Windowsならば下記サイトよりSqliteをダウンロードします。
https://www.sqlite.org/download.html
「sqlite-tools-win32-x86-3300100.zip」をダウンロードしてインストールします。

Macならば、下記コマンドを実行してください。
“`brew install sqlite“`

##2. gccのインストール方法
sqliteはC言語で開発されているため、gccが必要です。

Windowsの場合、下記よりTDM-gccをダウンロードしてインストールします。
http://tdm-gcc.tdragon.net/download

Macならば、Xcodeをダウンロードしてインストール後、下記コマンドを実行してください。
“`xcode-select –install“`

これでgccが利用できるようになります。

##3. go-sqlite3を取得する
コマンドラインで次を実行します。
“`go get github.com/mattn/go-sqli

元記事を表示

Ubuntu18.04にVSCodeのGo開発環境を作る

環境はUbuntu18.04

## Extensions

– [Go](https://marketplace.visualstudio.com/items?itemName=ms-vscode.Go)

## .zshrc

`go env` で調べてPATH追加

“`
export GOPATH=$HOME/go
export GOROOT=/usr/local/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOPATH
export PATH=$PATH:$GOBIN
“`

## setting.json

LanguageServerを有効にした

“`setting.json
{
“go.useLanguageServer”: true,
“go.languageServerExperimentalFeatures”: {
“format”: true,
“autoComplete”: true,
“rename”: true,
“goToDefinition”: true,

元記事を表示

tail -fをカスタマイズするツールを作ってみた

`tail -f`を実行すると、ログが延々と出力されますが、出力しつつ結果をカスタマイズするツールを作った。

* 時刻表示

> ログの時刻表示形式がマチマチだったり、場合によっては時刻が出ない場合もある。1行ずつ時刻を表示させるようにしてみた。
追加でエポック時刻も表示させ、処理時間を算出しやすくしてみた。

* キーワードの色づけ

> tailすると表示が流れてしまうので、色がつくようにしてみた。

# 実装
tailの実装は https://github.com/hpcloud/tail をインポートした。引数なしで実行するとこんな感じ。

“`terminal
NAME:
decotail – decorated tail

USAGE:
decotail [global options] command [command options] [arguments…]

VERSION:
1.0

COMMANDS:
help, h Shows a list of commands or help for one command

GLOBAL

元記事を表示

【2020年1月】令和だし本格的にVSCodeのRemote Containerで、爆速の”開発コンテナ”始めよう

# VSCode の Remote Conainer で”開発環境+プロジェクト全部入りのコンテナ”から開発をスタートダッシュをキメませんかッ!?

開発でVS Code の Remote Conainer使っていますか?単に既存のコンテナに入るだけなら Remote SSH でも構いませんが、”ローカル開発環境の一部”として、いやむしろ**ローカルの開発環境=Remote Container**として、ビンビンにRemote Container使っていきましょう。令和だし!~~(すでに2年だけどね・・・?)~~

特にMacを使っていると最初からPythonやらPHPやらRubyやらが入ってしまっているので**開発環境がある**のですが、これらは割とmacOSのエコシステムに組み込まれているので不要にパッケージの追加削除、できないのですよ。`brew`とか意外とあっさり壊れますしね・・・。特に**バージョンアップなんてもってのほか**です。全然、余裕でおかしくなります。
そんなわけでMacに入っているPythonやRubyでプログラミングをバリバリしていると・・・**ふと、後戻りでき

元記事を表示

macOSにGoの開発環境をインストール(備忘録)

# Goのインストール
Homebrewでgoをインストール

“`{bash:ターミナル}
$ homebrew install go
$ go version
go version go1.13.4 darwin/amd64
“`

ちゃんとhomegrew(自家醸造)して、Cellar(貯蔵庫)に入ったgoが使われていることを確認。

“`{bash:ターミナル}
$ which go
/usr/local/bin/go
$ ls -al /usr/local/bin/go
lrwxr-xr-x 1 shizuku admin 26 11 17 19:23 /usr/local/bin/go -> ../Cellar/go/1.13.4/bin/go
“`

# GOPATHとPATHの設定
– ホームディレクトリにgoディレクトリを作成してGOPATHに設定。
– PATHにGOPATH/binを追加。

下記の2行を.bash_profileに追加しておく。

“`{bash:.bash_profile}
export GOPATH=$HOME/g

元記事を表示

Go言語で画像(png, jpg, gif)処理 [ドット絵、リサイズ]

# 初めに
「Go言語で画像処理を書いたことないなー」と思い、ドット絵を作成する [gpixart](https://github.com/hmarf/gpixart) と画像をリサイズする [grimg](https://github.com/hmarf/grimg) を作成したときに苦労したことを書きます。
gpixartは内応が薄いので時間がない方は読み飛ばしてください。

# [gpixart](https://github.com/hmarf/gpixart)
“` github.com/nfnt/resize “` を使ってリサイズするだけでドット絵になります。
例えば、180×200の画像を18×20の画像にリサイズするとドット絵になります。(ドット絵というより画質の悪い画像ですけどね)
正直これで終わってしまうんです。なので、[ドット絵ナニカ](http://dot-e-nanika.com/) のように減色処理を加えました。手法としては、k-meansを使って減色します。

“` pixart.go
func kmeans(img *image.RGBA, cl

元記事を表示

ユーモアあふれる、ステータスコード 418 と 420 って何?

## Status Code 418 by Google
teapot.PNG

https://www.google.com/teapot にアクセスすると ステータスコード `418` が返ってきます。
開発者ツールからももちろん確認できます。

devtools.PNG

400 番台の HTTP レスポンスエラーは、__クライアントエラー__ ですね。
[MDN](https://developer.mozilla.org/ja/

元記事を表示

Goのポインタと構造体

# Goのポインタと構造体
最近、Goで何か作りたい欲が出てきました。
Goプログラミングではポインタと構造体がよくセットで使われるらしいのでやっていきます
まずはポインタ。

## ポインタ
ポインタとは、「値型(value type)」に分類されるデータ構造(基本型や参照型、構造体など)のメモリ上のアドレスと型の情報。
### ポインタの定義
ポインタ型は`*int`のように、参照・操作したい型の前に`*`をつけることで定義できる。
`*float64`であればfloat64型のポインタに、`*[2]int`であれば*[2]int型のポインタになる。
また、定義した時の初期値は`nil`

“`go
func main() {
var p *int
fmt.Println(p == nil)
}
“`
> true

ポインタ定義につかった「*」を重ねると、ポインタのポインタを定義できる。
むずそうだしあまり使わないらしいので紹介だけ。

“`go
var **int // int型のポインタを参照・操作するためのポインタ型
“`
さらに、参照型にもポインタ

元記事を表示

Raspberry pi とGoとMackerelでシェアハウスの運用しやすい鍵システムを作る

# はじめに
こんにちは!都内でWeb Developerしている[nari](https://twitter.com/fukubaka0825)と申します。

私が住んでいるシェアハウス([ギークハウス新宿](https://4hacker.github.io/hackerhouse/geekhouse-shinjuku.html))の同居人たちで、去年の7月に開発合宿にいったのですが、その際にプロトタイプを作った**シェアハウスの鍵システムが先日完成**したということで、**自分の担当した部分に関して振り返り**をしておこうとこの記事を書いています。

まず**何を作ったか**をお見せした後、今回採用した**おうちハックでの運用に優れた3つの技術スタック(Raspberry piとGoとMackerel(監視系SaaS))に関して紹介**したいと思います。(作った物の実装は大したことないので詳しく説明しません)

# 何を作ったか
一言で言うと、**シェアハウスの鍵システム**なのですが、以下の同居人の @wamisnet さんのツイートの動画で実際の挙動を見てもらうとわかりやすい

元記事を表示

眺めて覚えるGo言語 その8 PythonからGO言語を呼ぶ1(引数文字列)

# pythonからGo サブルーチンへの引数 文字列
### byte列をポインターで渡す。

“`pcgo1.py
from ctypes import *
lib = cdll.LoadLibrary(“./golib.so”)
a=lib.fun1(c_char_p(b”hello world”))
“`

“`golib.go
package main

import “C”
import “fmt”
//export fun1
func fun1(a *C.char) int {
fmt.Println(C.GoString(a))
return 0
}

func main() {}

コンパイルと実行
>go build -o golib.so -buildmode=c-shared golib.go
>python pcgo1.py
hello world
“`
– c_char_p(b”hello world”)は、バイト列ポインター扱い
– C.GoString(a)は、受け取ったバイト列ポインターをGO stringへ

#文字列の受

元記事を表示

アプリ音痴の両親のためにLINEで共有した写真をデジタルフォトフレーム風にするアプリを作った話

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

# はじめに

大遅刻スミマセン。、
まさかの年越してからアドベントカレンダーに登録するという最早アドベントカレンダーとはなんぞやな状況です。
師走の風に流され、忙しさのあまり年内に完成させ記事にする予定のアプリが新年初コミットとともに完成に至る形になりました。

さて、年を越したと同時にエンジニアに転職して丸3年が経ちました。
1年半ほど前は`丸3年経つまでにサーバー・ネットワークの設定からアプリの開発、何かしらのサービスの一般公開をしたい`というのを目標に業務とは別に個人学習、開発を行なっていました。
結果的に`サーバー・ネットワークの設定`,`何かしらのサービスの一般公開`というのは叶うことはなかったわけですが個人的に家族のための`使うことができる`レベルのアプリを作成することが叶いました。

# 作ったもの

私の両親はまあアプリ音痴でインスタグラムはもちろんのこと、LINEがギリ

元記事を表示

gRPCの中身ってどんな?feat. Go

## はじめに

Goが大好きで、一通り勉強した後何やろうかなと思い、gRPCに手を出してしまいました。。
と言うのも、WEB+DB PRESSのvol.114でkyashの特集をやっており、Goのアーキテクチャなどが紹介され、**マイクロサービス** 化を実践してみたくて、gRPCに興味が湧きました!

そこで、[よく分かるgRPC]()の良書があったのでそちらをまとめて行きたいと思います。

## gRPCとは?

言わずもがなGoogleが開発しているRPC用のフレームワーク
RPCとは異なる場所にあるプログラムを呼び出すための仕組みを指します。
イメージとしては外部APIとHTTP通信でJSONを用いてやり取りする様な物です。

– HTTP/2の仕組みを用いた高速な通信
– Protocol Buffersを使ったRPCの定義とコード生成(レビューも出来ちゃう!)

もうここまで言うとマイクロサービスにドチャクソ向いてるのは分かりますよね!?

## 動かしてみる

色んな記事にある様に、チュートリアルしてもらうのが一番早く、確実です。

https://grpc.io/do

元記事を表示

VSCodeでgolangci-lintを設定する

## 環境
Go: go version go1.13 darwin/amd64
Homebrew: Homebrew 2.1.15

## 手順

### インストール

[README](https://github.com/golangci/golangci-lint#macos)に沿ってインストールする

### 設定ファイル

“`yaml
# .golangci-lint.yaml
run:
deadline: 5m

linters:
disable-all: true
enable:
– goimports
– golint
– govet
– misspell
– errcheck
– staticcheck
– prealloc
– ineffassign
“`

### エディタへの設定

setting.jsonに項目を追加する.

“`JSON
“go.lintTool”:”golangci-lint”,
“go.lintFlags”: [
“-

元記事を表示

眺めて覚えるGo言語 その8 PythonからGO言語を呼ぶ

# 今回は、PythonからGO言語を呼んでpythonの弱点である速度向上させるアプローチです。
## Pythonを語ったとき「コンパイラ」ではない。で炎上しました。
### javaでも「コンパイラ」ではないし、C#もコンパイラではないのです。
#### 中間言語に変換して実行するのは、スピード遅いし、第一電池がすぐ減るのです。

**GOは、本物っぽいコンパイラーです。**

**pythonから見ると計算部分を高速化できる可能性があります。**

[フィボナッチ数](https://qiita.com/tomobk0025/items/3cc39ac6a7fbbdb0bde6)を参考にしました。

– 1つがいの兎は、産まれて2か月後から毎月1つがいずつの兎を産む。
– 兎が死ぬことはない。
– この条件のもとで、産まれたばかりの1つがいの兎は1年の間に何つがいの兎になるか?

“`fib_go.py
from ctypes import *
lib = cdll.LoadLibrary(“./fib.so”)
for i in range(40):
print (

元記事を表示

ginを最速でマスターしよう

# 初めに:sunny:
![gin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/c6d6b737-5fcc-acd7-79e0-f686e0c61d9a.png)

### ginとは何でしょうか
**ginはGo(Golang)で書かれたWebフレームワークです。 httprouterのおかげで、最大40倍高速なパフォーマンスを備えたmartiniのようなAPIを備えています。パフォーマンスと優れた生産性が必要な場合は、Ginを好きになるでしょう。**–[公式ドキュメント](https://github.com/gin-gonic/gin)

パフォーマンスが良いのが売りらしいですが、他のGo言語のwebフレームワークと比較してみます。
## 人気ランキング

> githubのスターの多い順

| Name | Stars | Forks | Issues Open | Issues Closed | Birth Year | Latest Update | Author |

元記事を表示

GO言語のGUIライブラリ「Fyne」のインストール方法

#はじめに
参考書を一通り読み終わり、
「さぁこれから本格的にコードを書いて勉強だ!」
「どうせなら何か適当にGUIのライブラリでも入れて楽しく勉強しよう!」
と思い、紆余曲折ありながらFyneというライブラリをubuntuに入れました。

入れるのに3日もかかってしまい、正直めっちゃ辛かったです笑
だって、GO言語の日本語の記事全然ないんだもん。
※私が色々試して実行できた方法なのでもしかしたら必要のない工程があるかもしれません。

#前提条件
・vmware (virtualboxよりも滑らかに動くと思う、個人的に)
・ubuntu-ja-18.04.3 (https://www.ubuntulinux.jp/download/ja-remix)
※メモリは2G以上、プロセッサ数2 に設定

#1.アップデートや必要なものを入れる
“`
$sudo apt-get -y update
$sudo apt-get -y upgrade
$sudo apt -y install git
$sudo apt -y install vim
“`
#2.goのインストール
・(https

元記事を表示

Goでnilでもメソッドを実行できる

こんにちは、ゴリラです。
せっかくの大晦日なのでGoのメソッドの仕様についてわかった面白い話をしようと思います。
みかんでも食べながら読んでみてください。

# nilでもメソッドを実行できる
このコードの実行結果はなんでしょうか?

“`go
package main

import (
“fmt”
)

type Foo int

func (f *Foo) do() {
fmt.Println(f)
}

func main() {
var f *Foo
Foo.do()
}
“`

nil pointerになると思った方はいると思いますが(自分はそうでした)、
答えは``です。

## なぜ``なのか
Goではメソッドはインスタンスを第1引数に受け取る関数になるとのことです。
[公式](https://golang.org/ref/spec#Method_expressions)に以下の様に書かれています。

“`
The expression

`T.Mv`

yields a function equivalent to Mv but wi

元記事を表示

【Golang+Lambda+CloudWatch】で、Dynamodbへのデータ挿入を定期実行

![lambda(qiita) (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415008/669041a3-2afc-26e9-644e-a6989ba53ab9.png)
##前提条件(環境)
2019年12月31日に試したものです。
Go 1.12.9

##手順
1. DynamoDBでテーブル作成
2. Lambdaで動かす関数をGoで書く
3. Lambda関数の作成
4. Lambda関数のトリガーとしてCloudWatch Eventsを設定

#1.DynamoDBでテーブル作成
入力する項目は3つ!

| 項目 | 入力した内容 |
|:-:|:-:|
| テーブル名 | Music |
| パーティションキー | Artist |
| ソートキー | SongTitle |

###パーティションキーとは
まずパーティションとは、ハードディスク内の区切られた領域のこと。
そして、Dynamodbのデータは、複数のパーティションに分散され保存されるので、どのパーテ

元記事を表示

OTHERカテゴリの最新記事