- 1. [Go言語]ハッシュキーの簡単な作り方(hmacを使う)
- 2. GO言語とginをWindows上で動かしてみる
- 3. 初めての同期通信(ゲーム)
- 4. Swift4 の String.count を Go でやる
- 5. Web系企業でプログラマを目指す皆様へ
- 6. GoにてRedirectの注意点(初心者向け)(Echo)
- 7. 【Golang】 mysql データベース処理
- 8. Go言語の似た概念を触る
- 9. golangにusingステートメントのようなものを作ってみた
- 10. 【Go】int64型・uint64型からstring型へ変換する方法
- 11. goss を使ったサーバ構築のテスト
- 12. フォルダごとに分かれている画像を一箇所に集める
- 13. 今更ながらGo言語を触ってみた(GO 1.13.6)
- 14. Go makeとnewの違い
- 15. golangの名前付き戻り値に関して
- 16. 速習 Go + Clean Architecture
- 17. Go言語でレトロな感じの2Dゲームを作る
- 18. Go log
- 19. go ファイルの読み取り
- 20. 【Golang – goroutine(ゴルーチン) 】for – select パターン 例
[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 mainimport (
“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 mainimport(
“fmt”
)func main(){
var p *int = new(int)
fmt.Printf(“%T\n”, p) => *ints := make([]int, 0)
fmt.Printf(“%T\n”, s) => []int}
“`
golangの名前付き戻り値に関して
名前付き変数は[tour of go](https://tour.golang.org/basics/7)で紹介されているように、関数の最初で変数宣言したのと同様になる。
この時、nameの変数のスコープは`fugafuga()`に対して関数渡しで渡した関数から参照できるため、下記コードは問題なく動く。
“`go
package mainimport “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
Go log
logを学んだのでまとめておきます。
logのパッケージを使って出力すると
生年月日や時間が出力されます。
“`main.go
package mainimport “log”
func main(){
//logを出力
log.Println(“hello”)//型や値を出力
log.Printf(“%T %v”, “hello”, “hello”)//コードが終了する
log.Fatalln(“hello”)
}
“`現時点で学んだ内容をまとめました。
随時更新していきます。
go ファイルの読み取り
Goでファイルの読み取り方法を学んだのでまとめておきます。
“`main.go
package mainimport(
“fmt”
“os”
)func main() {
//file変数にファイルのデータを代入
//ここではエラーは空白に
file, _:= os.Open(“ファイル名”)//ファイルのクローズを最後に行うためのdefer
defer file.Close()//バイト配列を作成
data := make([]byte, 100)//バイト配列にファイルのデータを読み込む
file.Read(data)//バイト配列に格納されたデータを出力
//バイト型になっているので、string()で文字列に型変換を行う
fmt.Println(string(data))
}
“`
【Golang – goroutine(ゴルーチン) 】for – select パターン 例
# 概要
Golangにおけるゴルーチンのfor-selectパターンを実装してみました。
基本的には、チャネルを介してゴルーチン内外でデータのやり取り、エラーハンドリング、終了処理についての例を実装しています。処理の流れは、
1. ゴルーチン外部から、チャネルを介して文字を挿入(“1”, “bad0”)
2. ゴルーチン内部で、チャンネルから得た文字を数字に変換(エラーかどうか場合分けして、結果をresultに挿入)
3. ゴルーチン外部から、doneをcloseすることで、ゴルーチンが終了し、それに伴いresultチャネルもcloseされる。
4. ゴルーチン外部で、resultを取得していたforが終了する。# 実装
以下にプログラムと結果を示します。
“`go
package mainimport (
“fmt”
“strconv”
“time”
)type Result struct {
Error error
Response int
}func doSomething(done <-chan interface{}, print