タグ

golangに関するatm_09_tdのブックマーク (26)

  • Go言語でつくるインタプリタがグランドフィナーレを迎えました - ゆーすけべー日記

    いよいよ「Go言語でつくるインタプリタ」がグランドフィナーレを迎えた。 そして、これで終わりだ。やり遂げた。これまでは私が誘う小さなお祝いを軽くあしらってきたとしても、いよいよ愉快なパーティ帽を被ってよい時間だ。 抜粋:: Thorsten Ball “Go言語でつくるインタプリタ” やったー。パーティーだ! なんでこのを読んだの? 今までコンピュータサイエンをまともに学んだことがなかった。 大学生の時分、授業では「プログラミング」と銘打つものがあるくらいで、 Javaでアプレットを作ったり、Cでシステムプログラミングをしたりという程度だった。 あとは独学。あくまで目的達成のための学習。 GUIやWebアプリの高レイヤーの実装ばかりで、 中がどうなってるのかあんまり理解できてなかった(いわゆる電子工作は好きだったけど)。 で、なんとかやってきたんだけど、 コンピュータサイエンスを学んでい

    Go言語でつくるインタプリタがグランドフィナーレを迎えました - ゆーすけべー日記
  • Let's EncryptがはまったGolangの落とし穴 - ぼちぼち日記

    0. 短いまとめ 300万以上の証明書の失効を迫られたLet's Encryptのインシデントは「Golangでよくある間違い」と書かれているようなバグが原因でした。 1. はじめに、 Let's Encryptは、無料でサーバ証明書を自動化して発行するサービスを行う非営利団体として2014年に設立されました。 2015年にサービス開始されると証明書の発行数はぐんぐん伸び、先月末のプレスリリースでは累計10億枚のサーバ証明書を発行したことがアナウンスされました「Let's Encrypt Has Issued a Billion Certificates」。CTLogの調査から、2020年2月末の時点では有効な全証明書の38.4%がLet's Encryptの証明書であるとみられています「Certificate Validity Dates」。 無料の証明書を提供してもらえるのは非常に嬉し

    Let's EncryptがはまったGolangの落とし穴 - ぼちぼち日記
  • Big Sky :: Go 言語の struct の実体を引数で(なるべく)渡せない様にするテクニック

    Go 言語は struct のレシーバがポインタの場合は実体であってもポインタの場合であっても呼び出せるので、もし struct が参照カウントに従い動作する様な場合は実体でコピーされてしまっては困る場合があります。例えば以下の様なインタフェースを考えます。 package main import ( "fmt" "sync/atomic" "time" ) type foo struct { n int64 q chan struct{} } func (f *foo) Add() { if atomic.AddInt64(&f.n, 1) == 1 { f.q = make(chan struct{}) } } func (f *foo) Done() { if atomic.AddInt64(&f.n, -1) == 0 { f.q <- struct{}{} } } func (f

    Big Sky :: Go 言語の struct の実体を引数で(なるべく)渡せない様にするテクニック
  • Go言語でTCPのEchoサーバーを実直に実装する - Qiita

    6月からDMM.comラボの六木オフィスでミドルウェアを作るエンジニアインターンをしている@kawasin73です。 DMM.comラボではluaで実装されたKVS(キーバリューストア)を利用しています。 これは、TCPの上で独自プロトコルで通信しており、URIのPathがKeyとなり最長共通接頭辞検索をするKVSで、社内でluaの皮を被ったC言語で実装されたものが運用されています。 この度、このKVSをGo言語で再実装することになり、設計は既存のミドルウェアを踏襲した形で DMM.com ラボの方が行い、実装は僕がすることになりました。 Go言語の実装手法(goroutine や channel等)については僕が学びながらそれについて都度相談するというスタイルで行なっています。 その開発記を連載しています。 今回は、実装の第1ステップとして、TCPのエコーサーバーを実装していきます。

    Go言語でTCPのEchoサーバーを実直に実装する - Qiita
  • Big Sky :: Golang と Vue.js で簡単なアプリケーションを作ってみた。

    GoVue.js を使ってどれくらいシームレスにウェブアプリを作れるかを確認したかったのでタスク管理アプリを作ってみた。サーバは Go なので vue-cli や webpack 等は使わない。全て CDN から。Vue.js でアプリのベースを、UI コンポーネントとして Element、Ajax ライブラリとして axios を使った。 以前、Riot.js を使って Todo アプリを作った時はサーバ作るのにも少し時間が掛かったので、今回は横着して echo-scaffold を使った。 GitHub - mattn/echo-scaffold README.md Echo Scaffold Echo Scaffold is CLI to generate scaffolds for the echo framework. https://github.com/mattn/ec

    Big Sky :: Golang と Vue.js で簡単なアプリケーションを作ってみた。
  • Golangで簡易的ワーカー/ジョブキュー - たにしきんぐダム

    goroutineの数を制限しつつ並列にジョブを実行したい ジョブは定期的に投入できたい ジョブが空っぽになっても終了しないで欲しい SIGTERMとか送ったら実行中のジョブが完了するまで待ってから終了してほしい というようなものが欲しくなることが最近よくある!のでメモ 参考 fireworq/dispatcher.go at 86126cb7de9fdc5ccc98d57aaa80f1abd5694463 · fireworq/fireworq · GitHub worker.go · GitHub Big Sky :: golang の channel を使ったテクニックあれこれ 実装 gistbe9fac4aa02419d68c6770a85e53c936 この実装ではmainの中のforループでのみジョブをenqueueしているが、 定期的に外部リソース(APIたたいたり、DBを眺

    Golangで簡易的ワーカー/ジョブキュー - たにしきんぐダム
  • golangでAPIなど外部にアクセスするロジックのテストをする - $shibayu36->blog;

    golangで、例えばGithubAPIを叩くような、特定のAPIにアクセスするロジックを書いた時、何も考えずにテストを書くと、テストを実行する際にもそのまま外部のAPIにアクセスしてしまう。この場合、色んなパターンのテストを書きづらい、依存している外部サービスが落ちたらテストも一緒に落ちるなどの問題が起こる。 このような問題から、統合テストではなくユニットテストのときは手元のみで完結して、外部サービスに依存しない状況でテストを書きたくなることがある。そこで今回は外部にアクセスするロジックを、手元で完結させた状態でテストする方法を試したので、その方法について書いてみる。 テストしたいコード 例えば以下のようなコード。Githubの https://github.com/shibayu36/shibayu36 の最新のリリースタグを取得し、そのリリースタグ名を出力する。これはGithub

    golangでAPIなど外部にアクセスするロジックのテストをする - $shibayu36->blog;
  • lgo - Go (golang) をインタラクティブに実行するための Jupyter Notebook環境 - Qiita

    この記事はGo4 Advent Calendar 2017の19日目の記事です。最近、趣味Go (golang) をJupyter Notebook上でインタラクティブに実行するプロジェクトを作っていて、ある程度きちんと動くようになったので紹介します。 yunabe/lgo - Go (golang) REPL and Jupyter notebook kernel (GitHub) ブラウザ上でGo (golang) を実行している様子: コンソールからも使えます: >>> jupyter console --kernel lgo In [1]: a, b := 3, 4 In [2]: func sum(x, y int) int { : return x + y : } In [3]: import "fmt" In [4]: fmt.Sprintf("sum(%d, %d) =

    lgo - Go (golang) をインタラクティブに実行するための Jupyter Notebook環境 - Qiita
  • Goの初心者が最初にはまりそうというか気になりそうなポイント - Qiita

    こんばんわ、ameshoです。 この記事は、Go4 Advent Calendar 2017の18日目です。 私は2017/3/17日から毎週水曜日にプログラミング言語Go読書会をLancersを会場にして開いています。冒頭から全員で範囲を決めて読み進めていく方式です。途中業務が忙しくて若干出来ない時期がありましたが幸いに再開でき、現在、9章まで来ています。 参加しているのは、ほとんどGo触ったことが無い人も割といまして、私自身も真面目に使うのは今年は行ってからぐらいなので、勉強会で出た内容と、みんなこんなところを気にしたり、はまったりするんだなと言うのをまとめてみました。 Unicodeで文字とされている物がすべて名前として有効 プログラム始めたばかりだと気づかない人多いんですが、最近の言語はUnicodeで文字とされているものが名前として有効だったりします。Goもそれに漏れず対応して

    Goの初心者が最初にはまりそうというか気になりそうなポイント - Qiita
  • Goのパッケージ構成の失敗遍歴と現状確認

    この記事は Gunosy Advent Calendar 2017の5日目の記事です。前回の記事はGunosyのパーソナライズを支える技術 -ワークフロー編-でした。 GoAPIを書くときの問題僕の在籍するGunosyはGoを昔(?)から番採用しておりまして、ノウハウも潤沢に溜まっている企業だと言えます。 しかし、contextの扱いやベストなパッケージ構成、テスト、net/httpでAPIを書くノウハウなどなど、迷うことは多々あります。 これは弊社特有の事情ではなく、Goのサーバーサイドエンジニア全員にとっての問題です。中でも、パッケージ構成をどうすればいいのか(相互参照せずに快適に開発を進められるパッケージ構成とは)を見つけるのは結構難しく、各々のチームにお任せ、という状況です。 今回は上記の問題のうち、パッケージ構成に踏みこんで見たいとおもいます。会社でもよくパッケージ構成をどう

    Goのパッケージ構成の失敗遍歴と現状確認
  • or-done-channelでコードの可読性を上げる - YAMAGUCHI::weblog

    はじめに こんにちは、キーボード自作おじさんです。このエントリはGo Advent Calendar 2017の4日目の記事です。 今年のエントリーは大作が並ぶアドベントカレンダーの休憩用のエントリーと思っていただければ幸いです。 Advent Calendar、小ネタでいいのよ。頑張り過ぎてネタ思い浮かばなくて穴開けるくらいなら575でもいいのよ。— mattn (@mattn_jp) 2017年11月29日 Goの並列処理のパターン Goが公開されてからもう8年になり、Goが得意とする並列処理にもGo特有のパターンなどがコミュニティ内で蓄積されてきました。 その中でもよく聞くものとしては for-select loop or-channel or-done-channel tee-channel fan-in, fan-out などがあります。今日はその中でも or-done-chan

    or-done-channelでコードの可読性を上げる - YAMAGUCHI::weblog
  • Goを使ってDLLをクロスコンパイル on Linux - Kuro Usada ga!

    August 14, 2018 December 1, 2017 Kuro Usada 16 minute read mattn さんによる「GolangWindows の DLL を作る方法」という記事を参考に、cgo を使って Linux 上で DLL をクロスコンパイルします。 Go を使えば、Windows なしで伺かの SHIORI.DLL を作成することができます。ので、作ります。 この記事は Go Advent Calender 2017(その4) の 1日目の記事です。 2日目は kami_zh さんによる「Goで標準出力をテストする方法」です。 この記事で作成する SHIORI を基に、もうちょっと機能的にしたサンプルゴーストを作りました:github.com/kurousada/gohst 必要なもの Linux PC Go (たぶん)1.5以上 MinGW Wi

  • go-promptを使ったリッチなコマンドラインツールの作り方 - Qiita

    先週go-promptというGoの端末制御ライブラリを公開しました。 c-bata/go-prompt: A library for building powerful interactive prompts inspired by python-prompt-toolkit, making it easier to build cross-platform command line tools using Go. https://github.com/c-bata/go-prompt このライブラリを使うと kube-prompt のような強力な補完を持つツールが簡単に開発できます。 この記事ではgo-promptの使い方について解説していきます Getting Started それではさっそくgo-promptを使ってリッチなコマンドラインツールを作ってみましょう。 Download

    go-promptを使ったリッチなコマンドラインツールの作り方 - Qiita
  • こわくない!今日からはじめるGo言語コード生成 - Qiita

    はじめに Go言語のできる人が「ルーティング定義からコントローラを自動生成している」とか言っているのを聞いていてすごい人はすごいなー、とか思っていたけど自分でツールを作ってみてコード生成とか意外とできるということがわかった。 なのでコード生成をやったことがない人向けにコード生成意外と大変じゃないよっていうのが伝わるといいなと思って手順をまとめてみる。 コード生成の大まかな手順 ソースコードを読み込んで構文木データに変換する 構文木データから目的の構文データを検索する 構文データを使ってソースコードを生成する ソースコードを読み込んで構文木データに変換する go/parser などを使ってソースコードの文字列を構文木データに変換する。 構文木データとは 構文木データとはソースコードをツリー状のデータ構造に置き換えたもので例えば以下のようなもの。 元になるソースコード package main

    こわくない!今日からはじめるGo言語コード生成 - Qiita
  • Big Sky :: golang オフィシャル謹製のパッケージ依存解決ツール「dep」

    « Re: Go でシングルバイナリな Web アプリを開発しているときに webpack --watch をうまいところやる | Main | Ruby の a = a + 1 はなぜ undefined method '+' for nil:NilClass なのか » golang にはパッケージマネージャが無数にあります。 PackageManagementTools · golang/go Wiki · GitHub Home Articles Blogs Books BoundingResourceUse cgo ChromeOS CodeReview CodeReviewComments CodeTools C... https://github.com/golang/go/wiki/PackageManagementTools 僕もその一つの gom というのを開発している

    Big Sky :: golang オフィシャル謹製のパッケージ依存解決ツール「dep」
  • GolangのhttptestでHTTP2を使う - Qiita

    GolangGo1.6でHTTP2をサポートした. また2017年2月にリリース予定のGo1.8ではServer Pushを行うためのメソッドも新たに追加される(使い方は HTTP/2 Server Push · Go, the unwritten parts が詳しい). 今後GolangでのHTTP2の利用はさらに増えると考えられる. HTTP2を使うアプリが増える分そのテストも重要になる. Go1.6におけるHTTP2サポートは素晴らしくAPIの変更なしにサポートが行なわれた. Server側でh2を有効にするにはListenAndServeTLSで起動すればよいしClientもDefaultClientを使えばよい. Golangでサーバーのテストをするときはhttptestパッケージが主に利用されるが,これほど簡単に使える訳ではない. 以下のように軽く設定を入れる必要がある.

    GolangのhttptestでHTTP2を使う - Qiita
  • golang の httptest パッケージを使う - at kaneshin

    この記事は Go Advent Calendar 2016 - Qiita の2日目の記事です。 Golang については書きたいことがたくさんあるので、Go Advent Calendar 2016 その4が出てきても良いのではと思っている次第です。(空いていればいつでも書きます) さて、今回、この記事では Golang で書かれた Web アプリケーションのリクエストのユニットテストについて解説しようと思います。 github.com 1. Testing HTTP Handler 検証のために、ただ単に "pong" を返却する pingHandler と、URLクエリから値を取得してそのまま返却する echoHandler の2つを定義します。 ー pingHandler // pingHandler returns just "pong" string. func pingHan

    golang の httptest パッケージを使う - at kaneshin
  • Big Sky :: シェルで作る Twitter Bot 作成講座

    数年前 TwitterAPI はベーシック認証、かつ Public な API だったので Twitter Bot なんて楽ちんで作れたのですが、最近は認証は OAuth、Public な API も無くなってしまい Bot を作るのはとても難しくなりました。 やりたい事はそんなに大した事ではないのに、認証のおかげでコードも大きくなりがちで、気付けば体コードよりも認証用のコードの方が多くなってしまう事もあります。Bot を作りたいのに敷居が高くて手を出せない、なんて思っている方も多いかもしれません。 でももし Twitter Bot がシェルで書けたら、簡単だと思いませんか?実は twty というツールを使うと簡単に Twitter 連携アプリケーションが作れてしまうのです。 GitHub - mattn/twty: command-line twitter client writ

    Big Sky :: シェルで作る Twitter Bot 作成講座
  • Big Sky :: golang で型付きで DLL を呼び出す方法

    golang dll で int の参照、どうやってコールするんか悩んだ var usb_no int = 0 ret, _, _ := find_usb.Call(uintptr(unsafe.Pointer(&usb_no))) — mik o (@oki_mik) September 26, 2016 golang で簡単に DLL を呼び出す方法は syscall.NewLazyDLL を使う事です。 package main var ( times = 0 dll   = syscall.NewLazyDLL("mydll.dll") proc  = dll.NewProc("MyFunc") ) func main() { i := int32(123) proc.Call(uintptr(unsafe.Pointer(&i))) } ですが Call の引数は全て uintp

    Big Sky :: golang で型付きで DLL を呼び出す方法
  • golang echoアプリの自動テストを書く | DevelopersIO

    丹内です。Golang 1.6とEchoフレームワークを使ったアプリケーションに対して自動テストを書いてみます。 前提 MacGo 1.6を使います。パッケージ管理はglideです。 ディレクトリ構成は以下のとおりです $GOPATH/ ├── .envrc ├── .git/(省略) ├── .gitignore ├── README.md ├── bin/(省略) ├── pkg/(省略) ├── src │   ├── github.com │   │   ├── alecthomas │   │   │   ├── gocyclo │   │   │   │   ├── LICENSE (省略) │   ├── myproject │   │   ├── glide.lock │   │   ├── glide.yaml │   │   ├── handler │   │   │

    golang echoアプリの自動テストを書く | DevelopersIO