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

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

CircleCIでGo言語製のRest APIのテストを自動で回す〜docker-composeを利用して〜

## はじめに

こんにちは

コンテナを使ったアプリケーション開発もぼちぼち増えてきたように感じます。
その中でも開発時に複数のコンテナ・プロセスを管理したいためにdocker-composeを利用している方も多いのではないでしょうか。

今回は、開発環境で利用しているdocker-composeをそのまま利用して、
CircleCIで自動テストする一例をご紹介したいと思います。

## コンテナ構成

“`yml:docker-compose.yml
version: ‘2’
services:
db:
build:
context: db/
expose:
– “3306”
environment:
– MYSQL_ROOT_PASSWORD=root #rootパスワードの設定
– MYSQL_DATABASE=test
– MYSQL_USER=user
– MYSQL_PASSWORD=password
volumes:
– ./db/mysql_dat

元記事を表示

Go言語でExcelからセル値を取得 & セル座標⇔番号変換

https://github.com/yagrush/excelutil

golangでExcelを読み込む必要があったので開発しました。
ポイントは、
 『ユーザーがどんな座標指定の仕方をしてくるか、未知』
だったので、ある程度の柔軟性とエラーチェックを仕込みました。

# 使い方
`cmd/test.go` がそのまんまサンプルになっているので、ご参照ください。

# 関数のご紹介
## excel.go
### Init(excelFilePath string)
なにはともあれ、最初に呼んでやってください。
Javaのコンストラクタのような感じです。
Excelファイルのパスを渡すと、Excelファイルを読み込む下準備をして、構造体を返してくれます。

### (excelFileInstance *ExcelFile) ReadCell(sheetName string, colNum, rowNum int)
Excelファイルの中のシートの名前、セルの列番号、行番号を指定すると、セル値を読み出してくれます。
セルの列番号、行番号の指定方法は、例えば D5 セルだったら

元記事を表示

goでGRPCのUnary RPCsやってみた(SimpleRPC)

スクリーンショット 2020-01-25 12.46.05.png

goでgrpcを実装してみました。
今回はまず、Unary RPCs(SimpleRPC)をやります!
他記事で残り3つの方式もやります。
この記事内容を上から行えば、dockerで動く環境が作れます。
dockerで実装してる記事は少ないはず。

# grpcの4つの通信方式
StreamingとUnaryの組み合わせのため4つある。
[詳しくは公式を参考](https://grpc.io/docs/guides/concepts/)

・Unary RPC
一つのデータを受け取って、一つのデータを返す。
動きはよくあるrestAPIと同じ。
用途:サーバ間通信、API。
(Unary : Unary)

・Server streaming R

元記事を表示

[Go言語]ハッシュキーの簡単な作り方(hmacを使う)

[学習履歴](https://qiita.com/__init__/items/e0a672f1437badf3eae0)

# ⬛️ はじめに
以前、[Go言語で認証機能を作ろう!](https://qiita.com/__init__/items/21b2604db54867f8c543)にて、認証機能を作った。

この記事ではDBに格納したデータとクライアントから送られてきたデータを付き合わせて、認証機能を実現していたが、実際にやりたいことはこんな感じのことではなかった。

うまく説明できないが、ハッシュを作って、ハッシュ同士でチェックし合う?みたいなことを本当はやりたかった。

そんな思いがある中で、ハッシュキーの簡単な作り方を学んだので、メモしておく。

# ⬛️ hmacについて
[hmac](https://golang.org/pkg/crypto/hmac/)を使うと簡単にハッシュを生成することができる。

以下、公式サイトからの引用。

“`main.go
// ValidMAC reports whether messageMAC is a valid HMAC

元記事を表示

GO言語とginをWindows上で動かしてみる

#はじめに

始めてqiitaで記事を書くので緊張しています…
『[良い記事を書くには](https://help.qiita.com/ja/articles/qiita-article-guideline)』を参考にしていますが、至らぬ点などございましたら申し訳ありません。

# 環境

* OS: windows 10 Home
* Go: 1.13.6
* Git: 2.25.0
* Text Editor: Atom

# インストール

Go言語、Gitのインストールは、Windows用インストーラから行います。
ginのインストールはコマンドプロンプトより行います。

1. Go言語をダウンロード&インストール -> https://golang.org/dl/

2. Gitをダウンロード&インストール -> https://git-scm.com/download/win
 ginをgithubよりダウンロードするのですが、その際にGitが必要になります(当たり前か…)
 僕はこれに気が付かず、時間を浪費しました。

3. ginをダウンロード&インストール –

元記事を表示

初めての同期通信(ゲーム)

#この記事では
スタンドアローンな自作ゲームに通信機能を追加して勉強しています。操作キャラのアクションと座標の同期が完成したのでその方法を投稿したいと思います。
ゲームは3Dアクションゲームです。複数人で協力しながら戦える機能を追加していきます。具体的にはモンスターハンターの様に通信して遊べるようにします。

#サーバー
並列処理を簡単にできそうという理由からGo言語を使用しています。

参考URL(https://qiita.com/ak-ymst/items/259960bfffa42d51d246)

“`golang

package main

import (
“fmt”
“io”
“net”
“strconv”
)

var connList []net.Conn

func main() {
service := “:10000”
listener, error := net.Listen(“tcp”, service)

if error != nil {
panic(error)
}

fmt.Printf(“Server running

元記事を表示

Swift4 の String.count を Go でやる

## やりたいこと

`家族?‍?‍?‍?` を3文字として数えたい。

## Swift4 の `String.count` はすごい

内部で`Grapheme Cluster`なるアルゴリズムを使っていて、それによってUnicode文字列の文字数を正確に計算できているらしい([参考](https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html#ID297))。

“`swift
print(“家族?‍?‍?‍?”.count) // -> 3
“`

## Go の `utf8.RuneCountInString` では対応できない

`?‍?‍?‍?`が7文字として数えられてしまう。

“`go
import “unicode/utf8”

func main() {
print(utf8.RuneCountInString(“家族?‍?‍?‍?”)) // -> 9
}
“`

## Go でも Swift4 の `String.count` がやりたい

[github.

元記事を表示

Web系企業で働くことを目指す皆様へ

##少数受託開発ベンチャーでアルバイトをして感じたこと
初めに結論から述べます

###結論
メリットもあればデメリットもあり
万人にオススメは出来ないということです

###会社の特徴
所属している企業の特徴を説明します。
・社員数20名以下
・受託開発
・Webアプリケーション作成
・ベンチャー企業
・所在地は大阪

未経験からWeb系企業へ転職を考えている人ならば
魅力的な企業のように見えるはずです

確かに、下記のメリットはあります

###メリット
・モダンな技術に触れることができる
フロントエンドはReact、React native、Typescript
バックエンドはGolang
DBはMySQL、GraphQL
インフラはAWS

・服装自由、音楽も聴ける
服装は最低限の清潔感があれば良いみたいです。

イヤホンをつけて仕事をしている人もいれば、
お菓子を食べたり、コーヒーを飲みながら仕事をしている人がいます。

・人が少ないので挑戦しやすい
研修を2日終えて、現場に入りそうな予感です。

・未経験でも潜り込める
人が足りていません。
とにかく未経験を現場で鍛え上げて

元記事を表示

GoにてRedirectの注意点(初心者向け)(Echo)

#リダイレクトで困った事が起きました

特定のページにリダイレクトする時に、1度目のリダイレクトは成功するが、2回目以降実行しても正しく実行してくれない。

“`go
func hoge(c echo.Context)error{
//省略
return c.Redirect(http.StatusMovedPermanently, “/”)
}
“`
これはルートパスにリダイレクトしてくれというコードですね
この**StatusMovedPermanetly**というやつにやられました

どうやら**Chormeブラウザ**にて **GET**アクションで**StatusMovedPermanetly**を実行するとブラウザにキャッシュが溜まるらしいです。(要するに2回目以降動かない)

これを解決するには

“`go
func hoge(c echo.Context)error{
//省略
return c.Redirect(http.StatusFound, “/”)
}
“`
**StatusMovedPermanetly**を**StatusFound**に変

元記事を表示

【Golang】 mysql データベース処理

# 概要

本記事では、Golangにおけるdatabase/sqlライブラリを用いたMySQLデータベースに対する処理例を示す。
処理例では、ユーザーデータを仮定し、エラー処理についても例を示す。

以下のようになテーブルを想定する。

“`sql

CREATE TABLE user_db.users (
id INT NOT NULL AUTO_INCREMENT,
first_name VARCHAR(45) NULL,
last_name VARCHAR(45) NULL,
email VARCHAR(45) NOT NULL,
data_created DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
status TINYINT(1) NOT NULL,
PRIMARY KEY (id),
UNIQUE INDEX email_UNIQUE (email ASC));
“`
# pkgのインストール

mysqlのドライバーpkgをインストールする。

“`bash
go get github.com/go-

元記事を表示

Go言語の似た概念を触る

# はじめに

本題に入る前に、前提となることを記述しておきます。

## 目的
目的は以下です。

– Go言語を読んでいて、似た概念を読み間違えないようにするため

それだけです。

## 読者の対象
読者の対象は以下です。

– プログラミング初心者
– Go初心者
– 軽くGo言語を使っている人

裏を返せば、例えば以下のような方は対象ではありません。

– Go言語を体系的に理解したい方
– 似た表現の実体を比較したい方、メモリの使い方を理解したい方

## 参考

– [A Tour of Go](https://go-tour-jp.appspot.com/list)

## おことわり
– 少しずつ文を追加しています。
– 初心者目線で「これとこれも紛らわしいから説明してくれ!」というものがあれば、連絡ください。

# 本題

## ArraysとSlices

A Tour of Goを読んでいて、ArraysとSlicesは似ているなーと思ったのでまとめました。

– [Arrays](https://go-tour-jp.appspot.com/moretypes

元記事を表示

golangにusingステートメントのようなものを作ってみた

この記事の内容は以下のバージョンで作りました。

“`cmd
> go version
go version go1.13 windows/amd6
“`

## きっかけ

* ちょっとしたgoのコードを書いているときに、「リソースの開放が面倒だなぁ」とおもった。
* .NETだと、usingステートメントですごくすっきりかけるから、似たようなものを作りたい。

## 通常のgoの場合

“`go
// 何らかのリソースを取得する
resource, err := hogehoge.GetResource()
// エラーがあるかどうか調べてちょめちょめする
if err != nil {
// ちょめちょめ
}
// 解放忘れがないように、deferを定義
defer resource.Close()

// ようやく本来やりたい処理
“`

みたいな感じになる。本来やりたい処理を書き始めるまでいつまでかかるんだ・・・
という感じ

## 今回作ったもの

“`go
type IDispose interface {
open() error
dispose()

元記事を表示

【Go】int64型・uint64型からstring型へ変換する方法

# int64型からstring型へ変換する方法

“`go
// int64
var Int64 int64 = 9223372036854775807

// strconv.FormatInt(int64, 基数(10進数))
convertedInt64 := strconv.FormatInt(Int64, 10)
“`

`9223372036854775807`は`int64`の最大数です

https://golang.org/pkg/builtin/#int64

> int64 is the set of all signed 64-bit integers. Range: -9223372036854775808 through 9223372036854775807.

# uint64型からstring型へ変換する方法

“`go
// uint64
var Uint64 uint64 = 18446744073709551615

// strconv.FormatUint(uint64, 基数(10進数))
convertedUint64 := s

元記事を表示

goss を使ったサーバ構築のテスト

# はじめに

以前 [InSpec でデプロイを自動テスト化する] という記事で InSpec というテストフレームワークの紹介をしましたが、最近 goss という Go 言語製のテストフレームワークを使い始めたのでそのご紹介です。

# goss とは

[goss] は YAML でテストケースを記述し、その内容に従ってテストを実行できるフレームワークです。

## 特徴

– シングルバイナリなのでライブラリのインストールなどが不要
– 記述が YAML なので覚えることが少ない
– 速い

## goss でできるテストの例

goss を使えば下記のようなことがテストできるようになります。

– ファイルが存在するか
– ファイル属性は正しいか
– プロセスやサービスは起動しているか
– パッケージはインストールされているか
– HTTP レスポンスのヘッダやボディは正しいか

# インストール

開発用途の環境に入れるのであれば下記でインストールできます。

“`shell
$ curl -fsSL https:

元記事を表示

フォルダごとに分かれている画像を一箇所に集める

最近業務で画像のデータを使って〜する場面があったのですが、サーバー上にある画像がフォルダごとに分かれてしまっていたり、階層もばらばらだったりと不便だったので、ちょっとした効率化ツールを作ってみました。

使っているのはGo言語です。

# ソースコード

“`Go
package main

import (
“image”
“image/jpeg”
“image/png”
“log”
“os”
“path/filepath”
)

const imgQt int = 60

func main() {

// 実行ファイル直下のパスを取得
path, _ := os.Getwd()
dataPath := filepath.Join(path, “data”)
dataAllPath := filepath.Join(dataPath, “*”)

list, _ := filepath.Glob(dataAllPath)
var textList []string

// 画像を1枚づつ読み込む
for _, item := range list {

元記事を表示

今更ながらGo言語を触ってみた(GO 1.13.6)

# Go言語を触りたかったきっかけ

kubernetesを構築・活用しているうちにカスタマイズしてみたい衝動があり、
Go言語でのみカスタマイズが出来ることと
軽量のWebApiを構築することが多々あり普段はPythonで実装していたが、
この際なのでGo言語を触ってみることにしました。
と言っても実務があるので、学習期間は3日しかありませんでしたが・・・。

## で、作ってみたもの

簡単にwebサーバーを立ち上げれるフレームワークを実装してみました。
内容的には下記のリンク先のREADMEにも記載していますが、
yamlファイルに諸々設定することでwebサーバーが起動します。
ビジネスロジックに集中出来るようにこのフレームワークを実装しています。

[httprouter_wrapper](https://github.com/ncs-nozomi-nishinohara/httprouter_wrapper)

## 躓いた点

`map[string]interface{}`の仕組みがいまいちわかりづらかったです。
`map[string]interface{}`からval

元記事を表示

Go makeとnewの違い

###makeとnewの違い

違いはポインタを返すかどうか

make → ポインタを返さない

new → ポインタを返す

“`main.go
package main

import(
“fmt”
)

func main(){
var p *int = new(int)
fmt.Printf(“%T\n”, p) => *int

s := make([]int, 0)
fmt.Printf(“%T\n”, s) => []int

}
“`

元記事を表示

golangの名前付き戻り値に関して

名前付き変数は[tour of go](https://tour.golang.org/basics/7)で紹介されているように、関数の最初で変数宣言したのと同様になる。

この時、nameの変数のスコープは`fugafuga()`に対して関数渡しで渡した関数から参照できるため、下記コードは問題なく動く。

“`go
package main

import “fmt”

func fugafuga(f func() error, logger func(err error)) error {
f()
return nil
}

func hogehoge() (name string, err error) {
fugafuga(func() error {
name = “test”
return nil
},
func(err error) {
})
return
}

func main() {
n, _ := hogehoge()
fmt.Println(n)
}
“`

出力結果

“`console
$ go run main.go

元記事を表示

速習 Go + Clean Architecture

## 概要
Go 言語 + Clean Architecture を必要に迫られ勉強した。緊急だったので、Clean Architecture の概念をなめて、ネット上に散らばるソースコードを読んだ。が、ぶっちゃけよく分からなかったので、自分で書いてみた。3週くらいして、なんとなく分かった。気がする。

今回の学習のゴールは、チームのメンバー(同じく未経験)が理解できて、実装時に設計思想からはみ出ないようにすること。細かいことは抜きにして、読んでコピペすれば、何とかなる程度まで行ければ、細かい話はレビューで潰せば良い。という感じ。

Go も Clean Architecture も初めてな上、設計・実装からも遠ざかっていたので、理解に時間がかかった。完全に理解しているとは言い難いが、いちおうメモとして残しておく。実装は割と楽しかった。

## 作るもの
– go, clean architecture, net/http, gorm な REST API群
– 2 系統の CRUD API(User, Property)
– 2 系統の DB(MySQL, PostgreSQL)

元記事を表示

Go言語でレトロな感じの2Dゲームを作る

# はじめに
昔Qiitaに、[Go言語で作るマリオ風2Dゲーム](https://qiita.com/KMim/items/aebb9d7a9116bf6294b3)という記事を書きました。これを発展させる形で、昨年の中頃から会社の友人何人かと一緒に、Golangを使ってゲームを作り始めました。

私が昔、[洞窟物語](https://forest.watch.impress.co.jp/library/software/doukutsu/)などのシンプルな2DのRPGゲームが好きだったこともあり、レトロさや手作り感を感じられるようなゲームの開発を目指してきました。最近になってこのゲーム開発の活動が停留してきたので、この記事でとりあえず現在までで出来たものをまとめてみます。

[Githubのリポジトリはここ](https://github.com/KMimura/RPGGame)です。

# 今のところ出来たもの
出来たもののgifをいくつか貼ります。背景画像およびプレーヤー画像などは仮にフリーの素材を用いたものであり、いずれはかっこいいものを自作したいと思ってます。

![fir

元記事を表示

OTHERカテゴリの最新記事