You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
関連記事 本記事は Geek-Space Advent Calendar 2020 の 4 日目です。 Golang による順列列挙のパフォーマンス研究 1. 再帰を用いたやり方 (本記事) Golang による順列列挙のパフォーマンス研究 2. スタックを用いたやり方 Golang による順列列挙のパフォーマンス研究 3. 繰り上がり法(仮名) Golang で順列・組み合わせ・重複順列・重複組み合わせの列挙 はじめに 順列や組み合わせといえばこちら: "樹形図"です。 自分は中学受験算数とかで習った覚えがあります。中学受験やってない人はどこで習うんでしょうね。 まあとにかく、人間はこれを描くことで、順列を機械的に列挙していくことができます。 「機械的に列挙できる」ということは、その手順を Golang で書き表せられれば、コンピューターにだって順列が列挙できるはずなわけです。 そこで"
TL;DR echo-sampleは、こんな構成だった TL;DR きっかけ echo-sampleの概要 ディレクトリ構成 個々の構成毎の役割 main.go 役割 詳細 route 役割 詳細 middleware 役割 詳細 handler 役割 詳細 db 役割 詳細 conf 役割 詳細 api 役割 詳細 model 役割 詳細 /db/ddl.sql 役割 詳細 参考リンク きっかけ 業務で、GolangとそのWebフレームワークのEchoで、APIサーバーを作る機会があったのですが、初めて触るのでディレクトリ構成で悩みました。 必要なのは、Clean Architectureなどでガッツリ分離する必要も無いくらいのシンプルな機能のみなので、OSSで程よい構成のお手本を探しました。 いくつかEchoを利用したリポジトリがある中で、echo-sampleが簡潔な構成で参考になり
テキストエディタ GNU nano のショートカットキーと設定方法などの使い方。「vim 使うから nano なんてどうでもいいよ」って人が多いのかもしれないけどlinux 使ってるとデフォルトのエディタがこれになってることがあるのでまとめたやつ。 目次 ショートカットキー ヘルプの ^ / M / Sh の意味 ヘルプ(- help) ファイル操作(- file) マウス(- mouse) インフォメーション関連(- information) 移動(- move) 削除 (- delete) コピー/切り取り/貼り付け (- copy - cut - paste) 行の連結 (- join - justify) アンドゥ/リドゥ (- undo - redo) 改行/行の追加 (- new line) インデント (- indent) 検索 (- search - find) 置換 (-
SHA-3 のコンペで最終選考まで残って Keccak に負けた BLAKE2。その後継である BLAKE3 が「爆速らしい。しかも FNV1a より数倍」と聞いたので試してみたい。 でも公式は Rust と C 言語での実装なのです。どちらも話せません ... 最近勉強している Go 言語(以下 Golang)で試してみたかったのです。 BLAKE3 | BLAKE3-team @ GitHub BLAKE3 の仕様書: BLAKE3 Specs @ GitHub 関連記事: hashアルゴリズムとハッシュ値の長さ一覧(+ハッシュ関数の基本と応用) @ Qiita TL; DR (今北産業) 16・・ バイト長ハッシュで速い FNV1 より、64・・ バイト長ハッシュの BLAKE3 の方が 8 倍以上速かった。😱 試したライブラリ(どちらも BLAKE 非公式): BLAKE3 f
2019-11-19 tips Golang Go の 標準 log パッケージ からの出力を実行時に抑止する方法について モチベーション CLI ツール を作っている際に、 所謂 verbose モード を提供したいと思った。 OPTIONS: -verbose 詳細メッセージを出力する 各種CLIツールでよくお目にかかるオプションかと思う。 各種ロギングライブラリは、大抵実行時に出力するログレベルを制御する機能が提供されているため、 main.go だけで完結する様な 簡易なツールである場合は それらを導入してしまえば実現は簡単だ。 しかし、今回作ろうとしている ツール は基本的な処理はライブラリとして単独で提供し、 エントリーポイントとして main パッケージを実装する構成にしていたため、既存のロギングライブラリ の採用はリスクが伴う。 既存のロギングライブラリを使うのは絶対に止め
この記事は株式会社クロノスの「~2020年春~勝手にやりますアドベントカレンダー」の10日目の記事です。 「~2020年春~勝手にやりますアドベントカレンダー」インデックスはこちら(随時更新) 前回の記事で作成したカレンダーはこちら はじめに 開発環境、どうやって構築していますか? ローカルに色々インストールしちゃう人も多いと思いますが、言語のバージョン違いや環境変数などで、「自分の環境では動くんやけど、他人の環境では動けへん。なんでや・・・」みたいな光景を開発者であれば一度は目にしてきたのではないでしょうか。 解決方法はいくつかありますが、今回はVSCodeのRemote DevelopmentとDockerを使った方法を紹介したいと思います。 DockerはもはやWebエンジニアにとっての必須教養と言っても過言ではないと思いますので、これを期にDockerでの環境構築を始めてみても良い
Let’s imagine that your application is written in some scripting language — e.g. Ruby — and you want to rewrite it in Go. You may ask a reasonable question: what is the point in rewriting a program that is up and running?.. Why?Firstly, let’s assume that your program is connected to a certain ecosystem. In our case, the ecosystem includes Docker and Kubernetes. The entire infrastructure of these p
【Golang/Go言語】Airでホットリロードをする方法
Contextとは何か? Golangには context という標準パッケージがあります(以前は実験パッケージ golang.org/x/net/context でしたがGolang1.7から標準採用されました)。これは「コールグラフの下流をまとめてキャンセルさせたい」「リクエストスコープな値をコールグラフの下流に伝播させたい」という場合に使用します。 Webアプリケーションを作る場合で想定してみましょう。リクエストが来るとHTTPハンドラーが何か値を取り出して関数に渡し、その関数が更に別の関数を呼び、DBから情報を取得したりと諸々の処理を経てユーザーへレスポンスを返すとします。この時何らかのトラブルがあってDBのレスポンスが極端に遅くなるとユーザーはいつまでも待つことになってしまうのでタイムアウトをかけたいですね?しかし真っ当に実装するとchannelをあちこちに持ち回したりしないとい
In Casbin, an access control model is abstracted into a CONF file based on the PERM metamodel (Policy, Effect, Request, Matchers). So switching or upgrading the authorization mechanism for a project is just as simple as modifying a configuration. Besides memory and file, Casbin policy can be stored into lots of places. Currently, dozens of databases are supported, from MySQL, Postgres, Oracle to M
概要 離れた場所にあるLinuxサーバーをリモート操作する為には、SSHは欠かすことができません。 本記事ではSSHの基本と実装までをやっていきます。 誤まった内容があればnwiizo までご指摘いただければと思います。 概要 SSH の基礎 接続設定 ssh.ClientConfig SSHサーバーに接続情報を登録する 最後に SSH の基礎 SSH(Secure Shel)は、遠隔のホスト間の通信でサービスを安全に運用するための暗号化ネットワーク技術です。強力な認証機能と暗号化により、ファイルの転送やリモート操作を安全に行うことができます。Linuxでは、OpenBSDによるOpenSSHが一般的に利用します。 SSHは前述した通り通信の暗号化を行って安全な通信を実現します。たとえば、telnet を使った場合、通信内容はプレーンテキストなので、通信経路を盗聴されると容易にID/PAS
Domain-Driven Design pattern is the talk of the town today. Domain-Driven Design(DDD) is an approach to software development that simplifies the complexity developers face by connecting the implementation to an evolving model. Note This is not an article that explains the "ideal" way to implement DDD in Golang because the author is no way an expert on it. This article is rather the author's unders
概要 ひょんなことをキッカケにGo言語で簡易的なRedisのサーバを書いたので簡単にまとめようと思う。 https://github.com/0n1shi/beehive-redis 動作としては以下のように普通のRedisサーバとなんら変わりなく、redis-cliからも接続することができる(コマンド数は極端に少ないが)。 # terminal 1 $ beehive-redis run --config conf.yaml 2022/02/20 09:17:27 starting Beehive Redis server ... # terminal 2 $ redis-cli 127.0.0.1:6379> keys * (empty array) 127.0.0.1:6379> set msg "hello world" OK 127.0.0.1:6379> get msg "he
初めに 自分で簡単なWebサービスを作っていくにあたり、どこでどういうエラーが起こったのかわかりにくく、エラー解消に多くの時間を割くということがおきた。そのため、エラーハンドリングを学び、この問題を解消したいと考えた。 version go version go1.13.3 対象読者 エラーハンドリングって何?という人 エラーハンドリングをやっていきたいが、何が正解かわからない人 一緒にエラーハンドリングについて考えてくれる方 躓いたところ GolangのVersionが上がりライブラリerrorsに変更が加えられた。そのため、今までのエラーハンドリングと違うやり方になったらしい。それでは、どういう場合にどういうエラーハンドリングを採用すればいいかというところで沼にハマってしまった。 Go1.13 ライブラリerrors エラーハンドリングをする意義 初めにで書いたように、エラーハンドリン
Go database/sqlチュートリアルのエラーハンドリングの日本語意訳になります。 エラーハンドリング database/sql でのほぼ全ての操作では最後の返り値としてエラーが返却されます。 それらのエラーを必ずチェックし、無視しないでください。 エラー動作が特殊だったり、何かが追加されているケースはいくつかあり、知っておくべきものもあります。 取得行セットの繰り返しによるエラー 以下のようなコードがあるとします。 for rows.Next() { // ... } if err = rows.Err(); err != nil { // ここでエラーを処理する } rows.Err() でのエラーは、 rows.Next() ループ処理内の様々な種類のエラーの結果が入る可能性があります。 ループ処理は正常に終わるだけでなく、何らかの理由によって終了してしまうかもしれません。 そ
これは Go Advent Calendar 2021 の 5 日目の記事です。 はじめに sqlc は SQL から Go のコードを生成するライブラリです。一般的な ORM にはコードから SQL を生成するものが多いと思いますが、 sqlc はそれらと真逆のアプローチを取るユニークなライブラリです。 本記事では sqlc と golang-migrate を使って PostgreSQL を扱う Go アプリケーションの構築を行ってみます。 kyleconroy/sqlc: Generate type safe Go from SQL golang-migrate/migrate: Database migrations. CLI and Golang library. ディレクトリ構成 . ├── db │ ├── db.go │ ├── migrations │ │
概要この記事はMakuake Advent Calendar 2021の24日目の記事です。(大遅刻しました・・) ラウンドロビンで負荷分散するロードバランサーをGolangで自作してみるという話です。 ロードバランサーとは何かロードバランサーはリクエストを複数のサーバーへ振り分けて負荷分散する(ロードバランシング)機能を持ったサーバーです。 サービスの可用性を高めてくれるリバースプロキシの一種です。 ロードバランサーの種類は大きく分けて2種類あります。アプリケーション層で負荷分散するL7ロードバランサーと、トランスポート層で負荷分散するL4ロードバランサーです。 ロードバランサーは、ロードバランシングの他、パーシステンス(セッション維持)とヘルスチェックの機能を兼ね備えています。 ロードバランシングの種類負荷分散には静的な方式と動的な方式のものでそれぞれ種類があります。 静的なものの代表
Go言語で作ったアプリケーションのGithubリポジトリでGithub actionsワークフローを設定し、 codecov にカバレッジを送る設定方法を紹介したいと思います。 codecov は、テストのコードカバレッジを取得してくれるツールです。テストスイートを実行した時にソースコードの実行箇所を視覚的に示してくれて、どこに新しいテストを書くべきか分かりやすくなります。 緑: テストスイートによってソースコードが実行されている箇所 黄: テストスイートによってソースコードが部分的に実行されている箇所(具体的には、真偽値が返るところで、 true か false のどちらかしか返っていない箇所) 赤: テストスイートによってソースコードが実行されていない箇所 忙しい時はテストコードを書くのが手抜きになったりするのですが、 codecov を使っているとカバレッジが定量的・視覚的に表現され
初めに 今回アーキテクチャを触れるきっかけは、Golangで成果物を作りたいと考えたときに、文法などの知識を知っていてもどのようにフォルダの構造を決めてどの実装から取りかかればいいかわからなかったことです。アーキテクチャを勉強することでどのpackageがどのpackageに依存しているのかを明確にすることができるとともに、どの実装から取りかかれば良いのかも依存関係から知ることができる。 対象読者 アーキテクチャってなんだろうという方 Goで何か成果物を作りたいが最初何から実装すればいいかわからない方 他 実装内容 今回実装したのは、TodoリストのRESTAPIである。この記事を書いたのはGetAll()APIを実装した段階である。
はじめに Golang で fmt.Printf などの標準出力結果をテストしたい場合、出力をキャプチャすることでテストが可能になります。 標準出力するプログラム 例として物凄く単純な標準出力するだけの関数を用意します。 func print(str string) { fmt.Printf("%s", str) } 出力のキャプチャ 出力をキャプチャするには出力先を一時的に切替て、出力結果を値として取得することで実現可能です。 fmt.Printf の出力先である os.Stdout の型は *os.File です。 *os.File で出力を受けて、値を取得するには os.Pipe() が役に立ちます。 os.Pipe() は戻り値として writer と reader が取得できます。 つまり出力先を os.Stdout から writer に切り替えて、 reader から値を取得
概要 GolangでDiscord用抽選Botを開発した ライブラリの挿入や構造体の定義が初心者には注意が必要と悟った 経緯 モンハンで使うBotが作りたかった。以上! モンハンワールド・アイスボーン専用のBotを作っていた 毎回モンハンアイスボーンで一緒に狩猟をする友人(HR/MR:999)が クエストと狩猟対象もルーレットで決めたい と変なことを言っていたため、HR400の私は恐怖のあまり拒否できずワールドで出現する武器・モンスター・クエストを全て抽選できるBotをPythonで開発しました。名前を「受付ジョー」としています。食欲が伺える最高の名前ですね。 食事をするだけでなく、武器などの抽選を行ってくれます。 ちなみにHerokuにコードをぶん投げて、そこで仕事させています。 新作に向けて改修が必要になっていた 現在は次回作であるモンスターハンターライズが発売されており、今夏にはサン
Golang for Web (Part-I): Build your first REST API with Golang & Fiber This is the first part of this series on Golang for Web. My goal is to show the newcomers how easily we can build REST APIs with Go by breaking down big apps into small ones. Here, we're going to build a simple TODO app webserver with Gofiber by separating all routes, controllers, etc. Go: An open-source programming language Go
Image: https://stackify.com/learn-go-tutorials/Errors are one of the most important aspects of a programming language. The way you handle errors impacts the performance of the application in many ways such as, ConsistencyTraceabilityDebuggabilityMaintainabilityHow errors are defined in Golang is a bit different from languages like Java. In Go, errors are values. For example, you can assign an erro
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く