タグ

golangに関するNan_Homewoodのブックマーク (11)

  • Go 1.20で入ったexec.CommandのCancelとWaitDelayで外部コマンドを正しく終了させる - ぽよメモ

    背景 Goでは外部コマンドの実行時に os/exec パッケージの Command や CommandContext を利用します。特に CommandContext を利用することで、 Goのcontextの流儀に従ってコマンドのタイムアウトや中断が可能であり大変便利です。 一方で、LinuxmacOSなどにおいてContextによるタイムアウト・中断時には外部コマンドに即座に SIGKILL が送られてキルされてしまうため、一部のケースでは孫プロセスが孤児プロセスとして残ってしまったり、後始末を正しく出来ないままコマンドが終了してしまうという問題が知られていました。 より安全にコマンドを終了させる方法として、まずは SIGINT や SIGTERM を送り、一定時間内に終了しなければ SIGKILL で終了させるなどの方法が知られています。しかし、 CommandContext を使

    Go 1.20で入ったexec.CommandのCancelとWaitDelayで外部コマンドを正しく終了させる - ぽよメモ
  • Go製ミドルウェアのメモリリークを解決した話 - Mirrativ Tech Blog

    インフラ・ストリーミングチームの id:udzura (@udzura)です。今回は、Goミドルウェアのメモリリークを見つけて解決する際に、どのようなプロセスを踏んでいったかを解説します。 Go製のミドルウェアの概要 ミラティブでは、Webアプリケーションのみならず、ミドルウェアに相当する部分についても必要なものは内製しています。その中の一つに、社内で「Radisha」と呼んでいる各種集計とキャッシュなどを行うためのミドルウェアがあります。Radishaは以下のような特徴を備えています。 GET、SET、SETEXなど基的なRedis互換のコマンドを実装している。そのため、既存のRedisクライアントライブラリから操作が可能である。 ランキング集計、一定時間内のアクセス集計などが行えるよう、Redis にない独自のコマンドを実装している。 高い可用性を志向しており、オンメモリのデータは

    Go製ミドルウェアのメモリリークを解決した話 - Mirrativ Tech Blog
  • Goで社内ツールを作るならこんなふうに

    バックグラウンド 最近企業でにわかにGoの採用が増えているようですね。この流れを受けて実際にうちでも採用してみようと考えている方も多いかもしれません。しかし、Goに限った話ではないのですが、いきなり大きなプロジェクトに未経験の技術を投入するのはリスクが伴います。ですから最初は技術検証とGo教育を兼ねて、小さな社内ツールなどから導入するのがよいでしょう。幸い、Goは非常に習得が容易な言語ですから、既に他言語の経験があるプログラマーがじゅうぶんに開発できるようになるまでには、数日と掛からないことがほとんどです。 この記事は、そんな小さなツールの導入フェーズにあたって、自らの経験から少し役に立つかもしれない情報をシェアします。 リポジトリの構成 自らの経験上、初めてGoを触れるときによく出る質問の一つは「リポジトリ構成はどうすればいいのか?」です。 結論から申し上げると、 テンプレもルールもな

    Goで社内ツールを作るならこんなふうに
  • Re: Goでcsvを操作するための基本的な知識

    はじめに Println で標準出力してみると以下のように表示されるかと思います。(SHIFT-JIS形式なのでmacでみると文字化けしていますがひとまず置いておきます) 日では一般的に CSV ファイルは Shift_JIS でエンコードされている事が多いです。Go 言語は内部のエンコーディングが UTF-8 なので、Shift_JIS な CSV ファイルを読み込むと文字化けします。 そこで便利なのが エンコーディングの変換は golang.org/x/text/transform が便利です。このパッケージと、golang.org/x/text/encoding/japanese を使う事で、os.Open で開いたファイルがさも初めから UTF-8 であるかの様に扱う事ができます。 どんな風に扱うか japanese パッケージには japanese.ShiftJIS や jap

    Re: Goでcsvを操作するための基本的な知識
  • Go言語からActive Directoryにアクセスしてみる(検索編) - Qiita

    はじめに Go言語からActive Directoryを利用したいと思いましたので、まずは検索からやってみました。 尚、使用したパッケージはLDAPv3用ですので、OpenLDAP等のLDAPサーバへのアクセスでも応用できると思います。 また投稿内容は、ある程度Active Directory、LDAPの知識を有していることを前提としています。 LDAPパッケージのインストール goコマンドでチャッチャとインストールです。 package main import ( "gopkg.in/ldap.v2" "fmt" "log" ) const ( LDAPSV = "dc1.mydomain.local" PROTO = "tcp" PORTNO = 389 BINDDN = "cn=Administrator,cn=Users,dc=MYDOMAIN,dc=local" BINDPW =

    Go言語からActive Directoryにアクセスしてみる(検索編) - Qiita
  • Big Sky :: 書評「Go言語による並行処理」

    O'Reilly Japan, Inc. 様に献頂きました。ありがとうございます。 そして献頂く際にお声を掛けて頂いた、書の翻訳を担当された ymotongpoo さんにもお礼を申し上げます。ありがとうございます。 書の訳は非常に素晴らしく、とても原文が英文であったとは思えないほど綺麗で、読んでいく中で「原文でどの様に表現されているんだろう」といった引っかかりも無く、とてもスムーズに読み進められました。 Go 言語に関わって随分と長くなってきました。初めて Go を知ってからユーザがどんどん増える様を見る事が出来るのは正直に言って非常に嬉しいです。 ふと Go の魅力は何かと聞かれたら幾つか挙げる事が出来ますが、間違いなく選ぶのが「非同期処理の簡単さ」です。これまで多くの開発者が OS スレッドで実現してきた非同期処理を、Go 言語は少ないイディオムとインテリジェントなランタイムを

    Big Sky :: 書評「Go言語による並行処理」
  • Go言語のchannelって一体何よ ~基礎編~【golang】 - DRYな備忘録

    問題 Go言語をちゃんと学ぼうと思っていろいろ勉強してるのだけれど ダックタイピングって一体なんなのよ【golang】 - DRYな備忘録 Go言語に継承は無いんですか【golang】 - DRYな備忘録 Go言語のgoroutineって一体何よ【golang】 - DRYな備忘録 いよいよgoroutineの実践。 並行処理を書くうえで大きな課題のひとつはデータの共有らしいが、Go言語はこれをchannelというtypeで実装することを推奨している。 チャネル( Channel )は、チャネルオペレータの <- を用いて値の送受信ができる直通ルートの型です。 A Tour of Go ( ゚д゚)... は? しらべてみよう やっぱり Go の並行処理 - Block Rockin’ Codes が分かりやすい 並行処理プログラミングには、ざっくり分けて二つのアプローチがあります。 Sh

    Go言語のchannelって一体何よ ~基礎編~【golang】 - DRYな備忘録
  • Golangのエラー処理とpkg/errors

    GoConでは毎回エラー処理について面白い知見が得られる.Go Conference 2014 autumn においては(実際のトークではないが)居酒屋にて@JxckさんがRob Pike氏から以下のようなテクニックを紹介してもらっていた. Errors are values - The Go Blog Golang Error Handling lesson by Rob Pike これはWrite(やRead)のエラー処理が複数続く場合にerrWriter を定義して複数のエラー処理を一箇所にまとめてコードをすっきりとさせるテクニックであった. そして今回の Go Conference 2016 spring のkeynoteにおいてもDave Cheney氏から(僕にとっては)新たなエラー処理テクニックが紹介された. Gocon Spring 2016 実際に使ってみて/コードを読ん

  • pelletkachels | blog over bedrijven en feitjes en de pelletkachel

    Welkom bij Pelletkachels.nl, jouw ultieme bron voor alles wat met pelletkachels te maken heeft! Maar we zijn meer dan alleen een platform voor het bespreken van warmtebronnen. Bij Pelletkachels.nl geloven we dat het delen van kennis en ervaringen over bedrijven en gebeurtenissen ook essentieel is voor het creëren van een betrokken en geïnformeerde gemeenschap. In dit blog duiken we dieper in de we

    pelletkachels | blog over bedrijven en feitjes en de pelletkachel
  • 実践Go言語 - golang.jp

    Go言語とは、Googleが開発した新しいプログラミング言語です。 当サイトではこの新しい言語についての情報を集約していきます。 このサイトの更新が滞っており、情報が古くなっておりますのでご注意ください。 はじめに Goは新しい言語です。既存の言語からアイデアを取り入れてはいますが、他の言語にはない機能をもっているため、実際に記述されたGoのプログラムは、他の類似した言語とはだいぶ異なるものになります。C++またはJavaプログラムをGo言語へ直接変換しても、あまりうまくは行きません。JavaのプログラムはあくまでJavaで書かれており、Go言語で書かれてはいないからです。一方で、Go側の視点からこの問題を考えると、変換に成功したとしても、全く違うプログラムができてしまうことになります。言い換えると、Go言語を使いこなすには、Go言語の機能や文法を理解することが重要です。おなじく、Go言語

  • Go で利用できるプロファイリングツール pprof の読み方 - Qiita

    概要 Go にはプロファイリングツールがついているのだけど,何を出力してくれているのかよく分からなかったのでメモ.間違いに気づかれた方いらっしゃったらコメントいただければ幸いです . 出典 Russ Cox さんが下記に書いてくれてました.これを読むのが間違いないです. Russ Cox, Profiling Go Programs CPU Profiling プロファイリング用のコードの埋め込み まず, runtime/pprof を import しておきます.(net/http/pprofというのもあります). CPU Profiling は計測したい実行コードの前でStartCPUProfile()を呼んで,計測終了のタイミングでpprof.StopCPUProfile()を呼びます.終了の方は defer に登録しておけば関数抜けるときに自動で呼ばれるので便利ですが,Ctr-Cと

    Go で利用できるプロファイリングツール pprof の読み方 - Qiita
  • 1