タグ

Goとqiitaに関するslay-tのブックマーク (29)

  • Big Sky :: Re: Go言語で画像ファイルか確認してみる

    Go言語で画像ファイルか確認してみる - Qiita Go言語で書かれたサーバーサイドでアップロードされたファイルが画像ファイルか確認する必要があったため今後の備忘録として記載します。 https://qiita.com/tebakane/items/b7a47379659d42364c8d 実は Go にはそれ専用の関数が用意されています。 http package - net/http - Go Packages Package http provides HTTP client and server implementations. Get, Head, Post, and PostFo... https://pkg.go.dev/net/http#DetectContentType バイト列を指定して以下の様に呼び出すだけです。 ct := http.DetectContentTy

    Big Sky :: Re: Go言語で画像ファイルか確認してみる
  • Go強化月間~開発する上で知っておくべき知見を共有しよう~ - Qiita

    Cannot participate because closed. ClosedWhen you participate, we will assume that you have agreed to the terms of use Require logged in for participate. campaignHow to participate① Check rule and participateCheck rule of posting campaign and participate. ② Write articleWrite article with content that is consistent with the theme of posting campaign! ③ Register campaign and post articleRegister ca

    Go強化月間~開発する上で知っておくべき知見を共有しよう~ - Qiita
  • Go で Stack と FIFO - Qiita

    はじめに Go 強化月間 と聞いたので Go の記事を書きます。 Go で Stack や FIFO を実装する時には container/list を使います。この container/list は Stack と FIFO に必要となるベースのみ提供されます。なぜなら Stack も FIFO も仕組みは同じで、取り出す時に先頭か最後かの違いしかないからです。 Stack container/list をフィールドに持ち、末端に追加、末端から取り出すのが Stack ですね。 package main import ( "container/list" "fmt" ) type Stack struct { v *list.List } func NewStack() *Stack { return &Stack{v: list.New()} } func (s *Stack) Pus

    Go で Stack と FIFO - Qiita
  • 安心して利用できる図書館データの紹介 - Qiita

    先日、私が公開しているWebサイト 図書館施設データポータル について紹介した以下のQiitaの記事 が、はてなブックマークにて、200を超えるブックマークをいただき、TwitterなどSNS等でも多数の共有をいただけたようで、多くの方に私の公開するWebサイトを知っていただきとてもうれしかったです。 また、私の想像よりも図書館が持つデジタルデータに興味を持っている方々がたくさんおられるのだなと思いました。その反面、過去の騒動の影響か図書館のデータの利用に不安を持たれている方も少なからずおられるようでした。 図書館施設データポータル で使用しているデータは、先のQiitaの記事でも書いていますが、各館のWebサイトをスクレイピングしたものではなく国立国会図書館が公開する「図書館及び関連組織のための国際標準識別子(ISIL)」試行版LODのデータセットをダウンロード・加工して使用しています。

    安心して利用できる図書館データの紹介 - Qiita
  • Go1.16からは go get は使わず go install を使おう - Qiita

    この記事はGo Advent Calendar 2020 16日目の代打記事です。奇しくも16日目にGo1.16の話をすることになりました。 【追記】タイトル改題しました 状況が落ち着いてだいぶ経ったのと、未だに多くの方にこの記事を見ていただけていることから、Go1.16での変更というより、今を生きる私達がどうすればいいか、という点にフォーカスしたタイトルに改題しました。文に変更はありません。一応注記すると、go get が廃止になったわけではなく、普段の開発フローで使うことはまずなくなった、という意味です。(一通り読んでいただければお分かりいただけるかと。) 【追記】Go1.18について ついに待望のGo1.18がリリースされましたね! https://go.dev/doc/go1.18#go-command そして予告通り go get によるインストール機能は削除されました。どうし

    Go1.16からは go get は使わず go install を使おう - Qiita
  • 意外と知らないVSCode上でGoを爆速開発するためのTips5選 - Qiita

    はじめに 最近イケイケなGo! 今回はVSCodeGoを爆速開発するためのTipsを5つ(+おまけ1つ)紹介したいと思います。 自分もつい最近これらを知って、めっちゃ活用して開発効率を上げています! 良かったら参考にしてください。 (良いと思ったらLGTM頂けると嬉しいです😇) Fill Struct 空の構造体にフィールドをセットしてくれてとても便利です。 よく使ってます。 使い方 空の構造体にカーソルが当たった状態で、Command Palette(F1 or Ctrl + Shift + P)でGo: Fill structと入力。 例 package main type person struct { name string age int job string } func main() { p := person{} }

    意外と知らないVSCode上でGoを爆速開発するためのTips5選 - Qiita
  • kubernetesでもぷよぷよがしたいので同じ色のPodが4個くっついたらdeleteされるcustom controller「くべくべ」を作った - Qiita

    kubernetesでもぷよぷよがしたいので同じ色のPodが4個くっついたらdeleteされるcustom controller「くべくべ」を作ったGokubernetes Kubernetes使ってると、Nodeにえらい数のPodが溜まってくじゃないですか。消したくなりますよね。連鎖してほしいですよね。なりません?なので、4つ同じ色のPodが4個くっついたらdeleteされる、爽快感のあるカオスエンジニアリング用のcustom contollerを作りました。 deleteされるだけでは寂しいので、deleteされていく様子を見るためのkubectl pluginも作りました。合わせて使うとこんな感じになります。 左側の●のひとつひとつがPodです。Nodeが列に対応してます。6Node構成です。各色8個ずつpodを立てていて、右側にreplicasetの増減を置いてみました。 レポジト

    kubernetesでもぷよぷよがしたいので同じ色のPodが4個くっついたらdeleteされるcustom controller「くべくべ」を作った - Qiita
  • Goプロジェクトのはじめかたとおすすめライブラリ8.5選。ひな形にも使えるサンプルもあるよ。 - Qiita

    はじめに 最近イケイケなGo! でもベターなGoプロジェクトのはじめかたっていまいち調べてもわからないですよね。 自分は最初色々迷いました。。 まずパッケージ管理ツール。 godepだったりGo Modulesだったり、少し情報がとっちらかっている印象です。 後はどのディレクトリにプロジェクトを配置した方がいいのかもわかりづらい。 importの仕方も相対と絶対のどちらがいいのか迷う。 というわけで以下の4点に絞って解説していきたいと思います! パッケージ管理ツール プロジェクトの配置場所 自作パッケージのimportの仕方 おすすめライブラリ この記事を読めば正しくGoプロジェクトが作成できます!(たぶん) 【追記】 インストール方法とVSCodeの設定に関しても簡潔にまとめたので、良かったら参考にしてください。 【超簡単】GoのインストールとVSCode設定方法 いきなりまとめ プロジ

    Goプロジェクトのはじめかたとおすすめライブラリ8.5選。ひな形にも使えるサンプルもあるよ。 - Qiita
  • Go 1.15 リリースノート 日本語訳 - Qiita

    この記事は https://golang.org/doc/go1.15 を日語訳したものです. 前のバージョンはこちら: Go 1.14 リリースノート 日語訳. 次のバージョンはこちら: Go 1.16 リリースノート 日語訳. Go 1.15 の紹介 最新の Go リリース、バージョン 1.15 は、Go 1.14 から6か月後に届きます. その変更点のほとんどは、ツールチェーン、ランタイム、およびライブラリの実装になります. いつものように、このリリースは Go 1 の互換性の約束を守っています. 私たちは、ほとんどすべての Go プログラムが以前と同じようにコンパイルし実行し続けれると予想しています. Go 1.15 には、リンカの大幅な改良、多 CPU コア数での小さなオブジェクトの割り当ての改善、X.509 CommonName の廃止が含まれています. GOPROXY

    Go 1.15 リリースノート 日本語訳 - Qiita
  • Python を Go に書き換えるとどれくらい速くなる? 7つの言語で Dijkstra の実行速度を比較 - Qiita

    PythonGo に書き換えるとどれくらい速くなる? 7つの言語で Dijkstra の実行速度を比較KotlinRustベンチマークJuliaDijkstra これは何 最短経路探索のアルゴリズムを使っていくつかの言語の性能がどれくらい違うかを調べてみました。 Python は手軽に実装できるけど遅い、Go は 早いけど C++ よりは遅い? 当? のような疑問を一定解消したかったというのが動機です。 前提条件など 対象とする言語 Go, Rust, C++ 興味Julia Python より段違いに早ければもう少し掘ってみたい 興味Kotlin 意外とトップ集団に肉薄するのではないか 参考 Python JavaScript 性能差のイメージとしては Rust == C++ > Go >> Kotlin >>> JavaScript > Python == J

    Python を Go に書き換えるとどれくらい速くなる? 7つの言語で Dijkstra の実行速度を比較 - Qiita
  • 【Go】構造体のフィールドに定義してある`_ struct{}`はどういう意味? - Qiita

    Go】構造体のフィールドに定義してある_ struct{}はどういう意味? ライブラリのコードを読んでいると_ struct{}というフィールドが定義してある構造体をみかけることがありますが、これはどういう意味なのか?というお話です。 結論としては、これは構造体を初期化する際に、フィールド名の指定を強制する意図で宣言されています。 blank identifierを用いた構造体の定義とComposite literalsによる構造体の初期化 _はblank identifierと呼ばれるものです。 これは、dev/nullに似ていて、blank identifierに割当てられた値や宣言は、無害な方法で、虚無のブラックホールへと捨て去られます。(_がブラックホールの穴に見えてくる…) ここでは詳しく説明しませんが、Effective Goに詳しい使用用途などが紹介されています。 また、C

    【Go】構造体のフィールドに定義してある`_ struct{}`はどういう意味? - Qiita
  • Go言語製のCUIツールを1行でWeb GUI化するライブラリを作った - Qiita

    はじめに 皆さん、CUI/CLIツールを使ってますか? Qiitaを読んでるような人はみんな使ってるでしょうね。 しかし世間一般に視野を広げると、必ずしもそうではないかと思います。 『黒い画面はなんか敷居が高い』 『一応使えるけど面倒』 『信仰している宗教の戒律で固く禁じられている』 『黒い画面に故郷の村を焼かれた』 などなど理由は様々です。 flagstone 使う側にとっては敷居の高いCUIツール。 とはいえGUIのツールを作るのは、我らがGo言語ではなかなかに面倒です。 そこで、Go言語製のCUIツールを1行でWeb GUI化するライブラリを作ってみました。 flagstone https://github.com/kurehajime/flagstone これです。 flagstoneは、日語に訳すと『敷石』です。 舗装して歩きやすくしますよ〜みたいなネーミングです。 使い方はと

    Go言語製のCUIツールを1行でWeb GUI化するライブラリを作った - Qiita
  • io.Readerのファイルタイプを判定する - Qiita

    概要 Goでファイルを読み込んでいる時に、そのファイルのタイプを判別したいことがたまにあります。例えばGzipかどうか分からないけど、もしGzipならgzip.NewReader噛ませたい、みたいな場合です。雑にgzip.NewReader噛ませてerr返すかどうかで判定とかやってみたんですが、普通に10バイト読み進められちゃうのでerr返ったあとに別のファイルタイプとして処理しようとするとinvalidなヘッダーになって死にます。実は読み進められたバイトを戻す方法あるよ、という場合は教えて下さい。 そもそもGzip以外の判定をしたいときもあるので、NewReaderの方針も必ず使えるわけではありません。もしファイルがos.Fileとかbufio.Readerの形であればReadしてからSeekしたりPeekしたり出来るのですが、io.Readerの場合どうやるのか分からなかったので調べま

    io.Readerのファイルタイプを判定する - Qiita
  • GoのGCを10分で学ぼう  - Qiita

    はじめに GoのGC(Garbage Collection)を調べる中で学んだことをなるべく分かりやすく簡潔にまとめたものです。 GCのアルゴリズムやメモリ割り当てについてまとめています。 記事内で使われている「オブジェクト」という用語はGoにおいては適切でないかもしれませんが、説明のしやすさから使用しています。 概要を把握しやすいように単純化しているため細部は正確でない部分があります。 GC基 用語集 前提となる用語です。 ルート ルートとは、オブジェクトが到達可能か(生存しているか)を判定するための始点です。 プログラミング言語にもよりますが、基的にメモリのスタック領域がルートになります。 フラグメンテーション フラグメンテーションとは、使用可能なメモリが断片化し途切れ途切れになっている状態です。 フラグメンテーションになってしまうと、総量的にはメモリが空いていてもアプリケーション

    GoのGCを10分で学ぼう  - Qiita
  • 挿入ソートと選択ソートは双対 - Qiita

    先日 Gotanda.hs #1 @HERP というイベントがあって、そこでRecursion Schemesで考える並べ替えアルゴリズムというタイトルでA Duality of Sortsという論文の話をLTしたんですが、この記事ではそこで話せなかった論文の後半で解説されている挿入ソートと選択ソートの双対性について書いていきたいと思っています。 ソートアルゴリズムの復習 まずは主役の二人である挿入ソートと選択ソートについて見ていきましょう。 挿入ソートは与えられたリストの先頭から要素を取り出し、これまでに構築したソート済みのリストに挿入していくという処理を繰り返すことでソートを実現するアルゴリズムです。 出典: Insertion sort - Wikipedia これをHaskellで実装すると以下のようになります。 insertSort :: [Int] -> [Int] inser

    挿入ソートと選択ソートは双対 - Qiita
  • なぜGo言語の正規表現は遅いと言われるの? - Qiita

    はじめに Goの正規表現は遅いと言われていることが以前から疑問だったので調査してみました。 こちらの記事やこちらの記事を拝見する限り ① 現実的なユースケース(例えばURLのパースなど)ではGo言語の正規表現は使うべきではなく、stringsパッケージの標準の関数を利用した方がパフォーマンスとしては良い。 ② Go言語で正規表現を利用するために必要な"正規表現オブジェクト"を並行にアクセスするにはパフォーマンスが問題になるので注意が必要。 とあります。その理由は、それぞれ以下に集約できるようです。 ① Go言語標準の正規表現ライブラリは、正規表現と検査文字列の長さに対して常に$O(n^2)$のオーダーで計算量が増加する安定したアルゴリズムを採用している。 ② "正規表現オブジェクト"を用いたマッチング処理には排他制御が行われている。 調べてみる Go言語のpkg/regexpの公式ドキュメ

    なぜGo言語の正規表現は遅いと言われるの? - Qiita
  • Goで世界一シンプルなCUIライブラリを作りました - Qiita

    こんにちは。今日もいいターミナル日和ですね。 今回はGo製の新たなCUIライブラリ goban を作ったので、その紹介と簡単な使い方を説明します。 (追記)罫線と文字幅について 日語環境では罫線が全角幅で表示されてしまい、綺麗に出力されない問題があります。その際は、以下の一行をMainの前に挿入してください。 runewidth.DefaultCondition = &runewidth.Condition{EastAsianWidth: false} ただし、これは ambiguous width に分類される文字すべてを半角幅で表示してしまうため、記号などを用いたときに別の問題が発生する場合があります。注意して使用してください。 今後、CJK環境では罫線を諦めてASCIIでボックスを表示する実装を入れる予定です。 CUIライブラリについて ターミナルで動くグラフィカルなアプリを作るた

    Goで世界一シンプルなCUIライブラリを作りました - Qiita
  • Golangを用いた様々な計算の高速化 - Qiita

    0.はじめに 競技プログラミングでは制限時間内に解を求めるようなプログラムが求められます。競技プログラミングでなくとも、必要に応じてプログラムを高速化したい場面は無数にあります。逐次処理のプログラムを並行化することで処理を高速化する、並行プログラミング/マルチスレッドプログラミングを活用できる機会は多いのではないでしょうか。1 記事は Golang で逐次処理で計算できる処理を並行化/高速化することで、並行処理の威力や Golang の並行化の書きやすさを体感することを目標とします。 1.様々な計算の高速化 Go at Google: Language Design in the Service of Software Engineering にもあるように Golang の並行処理は CSP をベースにしており、並行処理が書きやすい言語と言えます。 Golang に組み込まれている g

    Golangを用いた様々な計算の高速化 - Qiita
  • Goで固定長フォーマットを扱う - Qiita

    必要に迫られて、Goでバイナリの読み書きをしているのですが、encoding/binaryに関する解説が少ない気がしたのでまとめます。 固定長フォーマットとは なんかこう、「先頭から 4byte, 2byte, 10byteという風に区切って、最初の4byteがA, 次の2byteはビッグエンディアンでuint32扱いでB, 次の10byteは文字列…」みたいに、一切の説明が省かれたフォーマットのことを指して発言しています。 当然、元データをparseして、構造体とかに変換してからプログラムで扱いたくなると思います。ただの[]byteのまま扱うとか地獄すぎですよね。 // 実行イメージ func TestParseBinary(t *testing.T) { b := []byte{ 0x12, 0x34, 0x56, 0x78, // この辺はAの領域 0x12, 0x34, 0x56,

    Goで固定長フォーマットを扱う - Qiita
  • Go による機械学習 推論フレームワークの最新動向 2019 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Golang で推論 昨今では「機械学習と言えば Python」「Python と言えば機械学習」と思われがちなのですが、推論用途であれば学習済みモデルを利用して色々なプログラミング言語から扱えます。Go から扱える機械学習ライブラリの内、学習済みモデルが利用できる物としてはおおよそ以下の3つに絞られます。 TensorFlow TensorFlow Lite ONNX Golang で TensorFlow Golang で TensorFlow を利用する場合はオフィシャルから Go の binding が提供されているので Go

    Go による機械学習 推論フレームワークの最新動向 2019 - Qiita