タグ

golangに関するsatoshieのブックマーク (34)

  • GoのORMの人気ランキングを年ごとにまとめてみた

    概要 GoのO/R Mapperについてまとめてみました。 GoのO/R Mapperを選定する際に、gormは有名だけど他にないかな〜と思ったため興味位で探してみました。 取得方法 取得方法として、GitHub-APIを使用しました。 理由として年単位でスターの上がり幅を比較し、流行りすたりを可視化したかったためです。 ※取得対象はスターの数が1,000個以上リポジトリのみとなります。 実際のリポジトリは以下になります。 年間隔スター数上限グラフ リポジトリごとの情報 No. Project Name Stars Subscribers Forks Open Issues Description Createdate Last Update

    GoのORMの人気ランキングを年ごとにまとめてみた
  • Golangでの命名規則におけるベストプラクティス

    Golangの設計思想 Golangは、「単純さ」と「読みやすさ」を重視している言語です。そのため、ソースコードを保守のために、いくつかの単純な規則を採用しています。 この記事では、GoチュートリアルとEffectiveGoを参考にしています。 ファイル名 Goは、ソースファイルがすべて小文字で、複数の単語をアンダースコアで区切るという規則に従います。 複合ファイル名は_で区切られます。 「.」で始まるファイル名 または「_」はgoツールによって無視されます。 接尾辞「_test.go」が付いたファイルは、go testツールによってのみコンパイルおよび実行されます。

    Golangでの命名規則におけるベストプラクティス
  • Go + sqlxでスライスを使ってクエリに複数の変数を渡す方法 - Qiita

    はじめに Go + sqlxでスライスを使ってクエリに複数の変数を渡す方法がよくわからなかったので、しらべて試した。 環境 これで作った環境を使ってる。 Dockerを使ってPostgreSQL+Goの開発環境を作ってみた - Qiita データはこんな感じで入ってる。 コード シンプルな方法 スライスをそのままわたす。 package main import ( "fmt" "log" "github.com/jmoiron/sqlx" _ "github.com/lib/pq" ) // Employee は構造体です type Employee struct { id string number string } func main() { db, err := sqlx.Connect("postgres", "host=db port=5432 user=root sslmode

    Go + sqlxでスライスを使ってクエリに複数の変数を渡す方法 - Qiita
  • Golangでsqlxを使う

    はじめに Golangでリレーショナル・データベースにアクセスするなら、database/sqlパッケージのお世話になるのである。例えば、こんな感じで、Insert Select Delete ができる。 package main import ( "database/sql" "log" "os" _ "github.com/lib/pq" ) // Customer は、顧客 type Customer struct { CustomerID int Name string Address string } // CustomerKey は、顧客のキー type CustomerKey struct { CustomerID int } func main() { dsn := os.Getenv("DSN") db, err := sql.Open("postgres", dsn)

    Golangでsqlxを使う
  • Go言語で書かれたPHPアプリケーションサーバ「FrankenPHP 1.0」がリリース

    FrankenPHP 1.0には、Symphony、LaravelWordPressなどのネイティブサポートが含まれるほか、Caddyを搭載したプロダクショングレードのPHPサーバであり、PHPアプリのスタンドアロンで実行可能なバイナリとしてのパッケージ化が可能となっている。 さらに、PHP-FPMとNgnixを個別に実行する必要がなく、1つのサービスのみでPHPサーバを提供できるようになるとともに、PHP 8.2以降のほとんどのPHP機能拡張、およびすべてのCaddyモジュールと互換性がある。 ほかにも、アプリケーション起動してメモリに保持するワーカーモード、JavaScriptイベントとしてWebブラウザへ送信されるリアルタイムイベント、ZstandardおよびGzip圧縮、構造化されたログ、Prometheusメトリクスを使用したCaddyの監視、HTTPS・HTTP/2・HTTP

    Go言語で書かれたPHPアプリケーションサーバ「FrankenPHP 1.0」がリリース
  • Golangでいい設計を実践するための6つのツール

    概要 Golangを書くにあたり、いい設計のコードを書くための手助けとなるツールを調べたのでまとめます。 想定読者 Golangの使い方をある程度わかっている(チュートリアルはやった) いい設計をするための具体的なノウハウに興味がある 記事を書いたきっかけ 引用: https://www.amazon.co.jp/dp/B09Y1MWK9N 最近設計に関して勉強するために「良いコード/悪いコードで学ぶ設計入門」を読みました。 の中では マジックナンバーを使うな 一つのメソッドの中で多くのことをやりすぎるな などの言われてみると基的な注意点が書いてありました。 一方で以下のように、確かにそうなんだけど実際は守れていない注意点にも書かれていました。 単一責任の原則を守ってクラス設計しよう 高凝集なクラスを作ろう を読んでわかった気になって今までと同じように悪い設計のコードを書くままではい

    Golangでいい設計を実践するための6つのツール
  • Goでtemplateを使って、xmlを生成してみる - Qiita

    この記事はWanoグループ Advent Calendar 2021 4日目の記事になります goTemplateはtext/html二種類がある しかしxml生成の際に、どっちでもそのまま使ってはいけません 例えば: text/templateの場合 package main import ( "bytes" "fmt" "text/template" ) type XmlTemplateMeta struct { Text string } func main() { var xmlTemplateStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<test>\n <text>{{ .Text }}</text>\n</test>\n" // & 入れたら。。。 x := XmlTemplateMeta{ Text: "test s

    Goでtemplateを使って、xmlを生成してみる - Qiita
  • 【備忘】Go 言語の標準入力の基本的なこと - Qiita

    Go 言語の標準入力について、自分用の備忘として残しておきます。 どこにでもある一般的な内容です。 <参考サイト> ・【Golang】fmt.Scanとbufio.Scannerの速度比較 ・Go 言語で標準入力から読み込む競技プログラミングのアレ --- 改訂第二版 1. fmt ライブラリを使用した標準入力 まず、fmt.Scan を使用して読み込む方法です。 簡単に使用できますが、大容量の入力を読み場合にはスピードが遅くなるなどの弱点もあります。 1-1. 基的なサンプル 次のように、fmt.Scan(&格納先の変数) とすれば、コンソールからの入力を取得できます。 & は変数のアドレスを表します。 package main import "fmt" func main() { var str string fmt.Scan(&str) // データを格納する変数のアドレスを指定

    【備忘】Go 言語の標準入力の基本的なこと - Qiita
  • Golangで外部コマンドを実行する方法まとめ - Qiita

    Golangはos/execパッケージを使用して外部コマンドを実行できます。 基 処理したいコマンドをexec.Command()に渡します。 第一引数がコマンド、第二引数以降(可変長)はコマンドオプションです。 https://golang.org/pkg/os/exec/#Command コマンドを実行する(結果を取得しない) 単に実行するだけであれば、.Run()を使います。 .Run()の場合、コマンドの実行が完了するまで待ちます。

    Golangで外部コマンドを実行する方法まとめ - Qiita
  • 鵜飼文敏氏「Goに入ってはGoに従え」可読性のあるコードにするために~Go Conference 2014 Autumn基調講演2人目 | gihyo.jp

    Go Conference 2014 Autumnレポート 鵜飼文敏氏「Goに入ってはGoに従え」可読性のあるコードにするために~Go Conference 2014 Autumn基調講演2人目 この記事では2人目の鵜飼文敏氏の基調講演についてレポートを書きたいと思います。この基調講演では「Goに入ってはGoに従え」というタイトルで、Go言語らしく書く方法について話がされました(スライド⁠)⁠。 写真1 鵜飼文敏氏の講演の様子 Go言語の可読性レビュー Go Readability Approver まずはじめに、「⁠Go Readability Approver」と呼ばれる、GoogleにおけるGo言語のReadability(可読性)をレビューするチームについて話がありました。このチームは、コードレビューを通じてGo言語の良いコードの書き方を教えることを目的としているそうです。メンバー

    鵜飼文敏氏「Goに入ってはGoに従え」可読性のあるコードにするために~Go Conference 2014 Autumn基調講演2人目 | gihyo.jp
  • つくってまなぶ静的解析のすすめ - LayerX エンジニアブログ

    はじめに こんにちは、LayerXの id:convto です。 そしてこれは LayerX アドベントカレンダー (概念) の1日目の記事です。 アドベントカレンダー盛り上げていくぞ〜ということで11月から始まるらしいです。だいぶフライングしてるけど枠もかなり埋まっててすごい。 せっかくなのでお祭り参加したいぞ〜ということで一発目です。よろしくお願いします。 静的解析つくろうとしたきっかけ ちょうどつい最近記事になった下記の輪読会がきっかけでした。 tech.layerx.co.jp このなかで、mapのrange accesssについて、元mapのcopyを取らないから破壊するとループ挙動が壊れる可能性がある旨が言及されていました。 そのときは雑談で「range accessしてるmapに再代入してたら怒る!みたいな考え方で整理したら静的解析できそうっすよね〜」みたいな話をしたんですが

    つくってまなぶ静的解析のすすめ - LayerX エンジニアブログ
  • Goとエラーハンドリング慣習について

    エラー返値が無用な条件 関数ないしメソッドの実装がオンメモリ操作のみで完結 将来も(メモリ以外の)I/O操作は追加されることがない 逆にいうと上記の条件のいずれかが達成できない可能性がある関数やメソッドはエラー返値を付与すべき。 返値エラー型はerrorで統一する 返すエラーがerrorインターフェース型でなければそのエラーは正常にハンドリングできません。またerrorインターフェースを満たす別の返値型で返してerrorインターフェース型で受け取るのも後述のトラブルの元です。 Goの実装方針に「インターフェースで利用するものもコンストラクター相当では構造体ポインタで返す」というものがありますがコンストラクタを呼ぶ側は元型にアクセスすることが多いのでこういう方針になっています。が、エラー値に関しては元型を意識せずに利用可能にするという役割があって、この実装方針は当てはまりません。 エラーチェ

    Goとエラーハンドリング慣習について
  • 改めて見直すGoの特徴

    極力Goならではな特徴をいくつか挙げていく。 依存解決が必要最低限で互換性を考慮しつつ決定的 モジュール単位で依存をダウンロード。コンパイル対象はサブパッケージ単位。 依存の明示方法はコードに埋め込まれ、かつ未参照のインポートはコンパイルエラー。 つまり動作するコードのすべては正確な依存ツリーが明示されていて余計な依存は引き込まれない。 そして持ち前のコンパイルの速さを含め、相当深い依存ツリーでも依存解決にかかる時間は既知の処理系の中でも最速レベル。(唯一勝てるのはプリビルドバイナリが配布されている場合くらい) また、コンパイルやリンクに必要な処理量そのものが比較的少ないため、開発環境負荷も小さい。 かなり巨大なプロジェクトであってもメモリ8GBで困るようなことが無い。つまり、CI環境の維持にもローコストで済む。 ライブラリの提供側では後方互換性が破壊されるような変更はV1->V2というよ

    改めて見直すGoの特徴
  • 業務アプリケーション開発にGoを採用する理由

    この記事は MICIN Advent Calendar 2022 の24日目の記事です。 前回は熊沢さんの2つの新規事業立ち上げで経験したタイプ別MVP検証の進め方でした。 はじめに 記事では、業務アプリケーションのバックエンドとしてGoを採用することによるメリットを、実際の業務経験を振り返りつつ考察してみます。 近年では多くの企業でGoが採用されています。その採用理由は、「並行処理をたくさん行いたいから」「学習コストが低いから」「フットプリントが小さくコンテナベースのプラットフォームに向いてるから」「Googleが使ってるから」「高速だから」といったところが挙げられるんじゃないでしょうか。 一方で、単なるモノリスなAPIとしてGoを選ぶ必要はないんじゃないのか、といった声もよく聞きます。「初期フェーズはスピード重視でRuby on Railsが最強だ」「枯れた技術であるJava + S

    業務アプリケーション開発にGoを採用する理由
  • 実例に学ぶGoをテスタブルに書く基本 - Pepabo Tech Portal

    技術部プラットフォームグループ SRE の akichan です。 ペパボでは Nyah と呼ばれる OpenStack のプライベートクラウドを運用しており、Load Balancer as a Service(LBaaS) の Octavia が利用可能です。 先日、このLBaaSに対する不正なアクセスからシステムを防御するために、特定のIPアドレス帯からの通信をブロックするソフトウエアをGoで実装しました。その際に、社内のGoの有識者にレビューしてもらいながら、どのようにリファクタリングを行なっていったかを通して、私と同じようなGoの初学者が押さえておくと良さそうなポイントについてお伝えできればと思います。 Amphora Protector 今回開発した Amphora Protector について簡単に解説します。 Octavia の LoadBalancer の実態は、HAPr

    実例に学ぶGoをテスタブルに書く基本 - Pepabo Tech Portal
  • Goで社内ツールを作るならこんなふうに

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

    Goで社内ツールを作るならこんなふうに
  • GoのGC (garbage collector)について理解する

    プロトタイピングによる不確実性の低減 / Reducing Uncertainty through Prototyping

    GoのGC (garbage collector)について理解する
  • Database/Sql · golang.shop

  • Goで作ったアプリケーションをHerokuで動かす - Qiita

    Goで作ったアプリケーションをWebサーバーに上げて活用したいなと思ったときに 無料だし、ある程度使っていていて慣れてたしという理由で、Herokuを使おうと思ったわけです。 ただ、いざやってみると色んな方法がありすぎて、いい感じの情報を見つけるのが難しく デプロイするのに色々詰まったので、備忘録として残しておきます。 よりよい方法やバグ等ございましたら、アドバイスいただけると光栄です。 事前準備 1.Herokuアカウントの作成 Herokuの公式サイトから、アカウントを作成してください。 2.Heroku CLIのインストール 次にターミナルからHerokuを操るための Heroku CLI を こちらのページから、ダウンロード・インストールしてください。 下記のように入力して、結果が返ってくれば完了です。

    Goで作ったアプリケーションをHerokuで動かす - Qiita
  • Goのhttp.Handlerやhttp.HandlerFuncをちゃんと理解する - oinume journal

    はじめに GoでHTTP Serverを作ろうとすると、標準ライブラリを使う場合以下のようなコードをよく書くと思う。 package main import ( "fmt" "log" "net/http" ) func main() { mux := http.NewServeMux() mux.Handle("/hello", http.HandlerFunc(hello)) log.Fatal(http.ListenAndServe(":8080", mux)) } func hello(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusOK) fmt.Fprintf(w, "Hello World") } このコードの登場人物としては以下になるが、それぞれなんだっけ?というのをいっつも忘れてしまうの

    Goのhttp.Handlerやhttp.HandlerFuncをちゃんと理解する - oinume journal