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
Lorca+SvelteKitでやってみる! https://github.com/zserge/lorca https://github.com/sveltejs/kit あらかじめ必要なもの go(version 1.17.2以降) nodejs(16.9.0以降),npm(7.21.1以降) Chrome/Chromium/Edgeのいずれか プロジェクトの開始 mkdir sample-gui cd sample-gui go mod init sample-gui npm init svelte@next frontend // Choice "Svelte app template" is "Skelton Project". // Choice "Use TypeScript" is No. // Choice "ESLint" is No. // Choice "Prett
こんにちは、@p1assです。 最近研修で Go を書いていて、その際にいくつか質問をされるのですが、聞いてみると前にも答えたような質問が多かったので、これを機にブログに参考リンクをまとめようと思います。 質問された際にすぐ答えられない質問も数多くあり、調べたり教えてもらったりすることで様々なことを再発見できました。 この記事では、質問に対する回答をできるだけ公式に近い文章を引用する形で書き記します。私個人の考えは別の段落になるようにして、事実と意見を区別するように心がけています。 なにか誤りを見つけた際は GitHub で PR を投げていただけると助かります。 言語仕様 関数の引数は値渡しか参照渡しか? Go はすべて値渡し (pass by value) です。 ポインタの場合は、ポインタそのものがコピーされポインタの指し示す先の値はコピーされません。 Go の多値返却はタプルか?
Goのエラーハンドリングが採ったスタイル 多値返し 直積(関数の返値とエラーを両方返す) try-finallyをdeferという機構でカバー panicはプロセスを落とすためのもの Goはこの戦略でエラーハンドリングを行うとしましたので、「多値はなぜタプルじゃないんだ?」、「直和(返値orエラー)で十分じゃ?」「panic-recoverでtry-catchできそう?」などいう様な他の処理系の風習を持ち込むことは意味がありません。そしてそれらの提案の多くはすでに検討されリジェクトされてきた経緯があります。 「try組み込み関数」プロポーザルなんかも検討されマージ直前くらいまで進んだこともありますが、「Goのエラーハンドリング」にとって一長一短がありました。その欠点課題は解決できずに最終的にリジェクトされました。 「多値返し」は実にCPUフレンドリーな機構で、C言語の関数呼び出し規約にちょ
Goのプロジェクトをどの様なファイル構成で配置すれば良いか読み物が少ないという指摘を見たのでまとめてみようと思う。 GOPATHについて Go1.16がリリースされたことでGo-Moduleによるプロジェクト構成が標準で推奨されることになりました。(Go1.11までさかのぼってGo-Moduleは使える様になってます) Go-Moduleモードでは「GOPATH配下にプロジェクトを置かなければならない」という制約からは解放されています。なので、実質GOPATHはどこを指していても構わないし設定されていなくても「ユーザーホーム/go」というデフォルトの場所が決まっているので開発できます。 おすすめの環境変数設定は以下の2つだけ。 「GOPATH=~/.go」(WindowsはGOPATH=%USERPROFILE%\.go) 「PATH=$GOPATH/bin:$PATH」(Windowsは
アプリケーションが発行するSQLにコメントが埋め込めると便利です。例えば、 /* path/to/logic.go:334 */ SELECT ... のようにSQLに発行元の情報をコメントとして埋め込んでからExecすれば、DB側のログ(general log等)にも記録されるため、SREやDREサイドからも、負荷の高いSQLがアプリケーションのどこから発行されているかが分かりやすくなります。 Goには github.com/shogo82148/go-sql-proxy という、SQL実行をトレースし、フック処理を差し込める便利なライブラリがありますが、今回それにpull requestを送って、SQL実行前にクエリの書き換えができるようにしました。 https://github.com/shogo82148/go-sql-proxy/pull/61 https://github.co
こんにちは、m3 エンジニアリンググループ CTO 矢崎(id:Saiya)です。 過去に Go 言語の仕様を一通り見た経験があったのですが、久しぶりに Go のコードを最近読み書きした際に、ここ数年の Go 言語やエコシステムの進化による変化もあり、発見やハマりが多々ありました。 Go 言語公式のロゴもスピード感ありますね。 同じような迷い・回り道をしてしまう方ももしかしたらおられるのではないかと思いますゆえ、 エムスリー Advent Calendar 2020 6 日目の記事として、筆者が実際に「最初から知っていれば時間を無駄にしなかったのに...!」と感じた知見をざっくばらんにシェアいたします。 本記事がどなたかの一助になりますと幸いです。 なお本記事の内容は筆者個人の理解・自身で直接読み書きしたユースケースの範囲での知見であり、全ての Go 利用事例に当てはまらない点も含みうりま
はじめに 最近イケイケなGo! でもベターなGoプロジェクトのはじめかたっていまいち調べてもわからないですよね。 自分は最初色々迷いました。。 まずパッケージ管理ツール。 godepだったりGo Modulesだったり、少し情報がとっちらかっている印象です。 後はどのディレクトリにプロジェクトを配置した方がいいのかもわかりづらい。 importの仕方も相対と絶対のどちらがいいのか迷う。 というわけで以下の4点に絞って解説していきたいと思います! パッケージ管理ツール プロジェクトの配置場所 自作パッケージのimportの仕方 おすすめライブラリ この記事を読めば正しくGoプロジェクトが作成できます!(たぶん) 【追記】 インストール方法とVSCodeの設定に関しても簡潔にまとめたので、良かったら参考にしてください。 【超簡単】GoのインストールとVSCode設定方法 いきなりまとめ プロジ
golang-migrateとは? Go言語で作成されたDBマイグレーションツールで、GO言語のライブラリとしてだけではなく、CLIからも利用できます。そのためJavaで開発されているprismatixというサービスでも利用することができます。 JavaのマイグレーションツールにFlywayやliquibaseといったものがあります。その中でこのツールの特徴は、マイグレーションを定義しているファイルをGitHubやAWS S3などから直接参照することができることです。(もちろんローカルのファイルシステムにも対応しています) また対応しているデータベースエンジンも多く、MySQLやPostgreSQL以外にもMongoDBなどにも対応しているなど、様々な場面で使うことができるツールだと思います。 環境構築 今回は手軽に試すためにdocker上で、golang-migrateとPostgreS
いよいよ「Go言語でつくるインタプリタ」がグランドフィナーレを迎えた。 そして、これで終わりだ。やり遂げた。これまでは私が誘う小さなお祝いを軽くあしらってきたとしても、いよいよ愉快なパーティ帽を被ってよい時間だ。 抜粋:: Thorsten Ball “Go言語でつくるインタプリタ” やったー。パーティーだ! なんでこの本を読んだの? 今までコンピュータサイエンをまともに学んだことがなかった。 大学生の時分、授業では「プログラミング」と銘打つものがあるくらいで、 Javaでアプレットを作ったり、Cでシステムプログラミングをしたりという程度だった。 あとは独学。あくまで目的達成のための学習。 GUIやWebアプリの高レイヤーの実装ばかりで、 中がどうなってるのかあんまり理解できてなかった(いわゆる電子工作は好きだったけど)。 で、なんとかやってきたんだけど、 コンピュータサイエンスを学んでい
func firebaseInit(ctx context.Context) (*firestore.Client, error) { // Use a service account sa := option.WithCredentialsFile("path/to/serviceAccount.json") app, err := firebase.NewApp(ctx, nil, sa) if err != nil { log.Fatalln(err) return nil, err } client, err := app.Firestore(ctx) if err != nil { log.Fatalln(err) return nil, err } return client, nil }
LGTM とは LGTM は、コードを分析するためのツールです。 https://lgtm.com/ CodeQL という技術を使って、ソースコードに対してクエリを投げることで、例えば脆弱性のありそうなコードのパターンや、不具合のありそうなコード、規約を満たしていないコードなどを検査することができます。 コードに対して検査をかけたり、もしくは以下のサービスと連携してプルリクエストに対して毎回検査を行うことが可能です。 Bitbucket Cloud GitHub.com GitLab.com 言語については以下に対応しているとのことです。 C and C++ C# Go, also known as Golang Java JavaScript/TypeScript Python CodeQL について CodeQL is the code analysis platform used b
package main import ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jinzhu/gorm" ) func main() { _, err := sqlConnect() if err != nil { panic(err.Error()) } else { fmt.Println("DB接続成功") } } // SQLConnect DB接続 func sqlConnect() (database *gorm.DB, err error) { DBMS := "mysql" USER := "go_example" PASS := "12345!" PROTOCOL := "tcp(localhost:3306)" DBNAME := "go_example" CONNECT := USER + ":"
どうも、moriです。 AWS SDK for Goを使う開発で開発環境 (IDE)としてAWS Cloud9を使ってみたので、作成方法と実際にコードを書いてデバッグ実行するところまでを紹介したいと思います。 AWS Cloud9概要 ブラウザのみでコードを記述、実行、デバッグできるクラウドベースの統合開発環境 (IDE) です。 コードエディタ デバッガー ターミナル が内包されており、多くの言語ツールがサポートされています。サポートされているブラウザは、Google Chrome、Safari、Firefox、Microsoft Edge の最新バージョンです。 大きな特徴として、以下が挙げられます。 ペアプログラミングサポートをサポートしている 開発環境をチームと共有し、ペアプログラミングを一緒に行うことができます。 リアルタイムで確認できるので、拠点の離れたメンバーともやりやすいか
jqはとても便利なコマンドです。 JSONを返すAPIを実装するときや、SaaSのAPIから特定の情報を抜き出してシェル変数に代入するときなど、web開発や運用には欠かせないツールとなっています。 しかし、私にとってjqのクエリを一発で書くのは容易ではなく、思い通りの出力が得られないことがよくありました。 難しいエラーメッセージに悩まされて、jqで書くのを諦めて別の言語で書き直すこともありました。 jqの十八番と思える場面で使いこなせないのは、なかなか悔しいものがあります。 ツールを使うのが難しいなら、同じものを作ってしまえばよいのです。 jqの全ての機能を実装する jqを言語としてきちんと書けるようになる jqを完全に理解する jqの全ての機能を自分で実装してしまえば、jqがどういうものか、クエリがどのように処理されるのか、詳しくなれるはずです。 jqを得意な言語と言えるようになって、ク
こんにちは、CX事業本部の夏目です。 Golangは最近人気の言語で手を出そうとは思っていたのですが、環境構築がいまいちよくわからなくてできてませんでした。 (goenvを使ってGolangをインストールするときGOPATHはどうしたらいいとかよくわからなかったのです) 今日はVisualCodeとDockerを使って、Golangの開発環境をMac上に作成しようと思います。 環境構築 事前準備 VSCodeとDockerをインストールします。 Visual Studio Code - Code Editing. Redefined Docker Desktop for Mac and Windows | Docker Version 2.0以上 拡張機能のインストール VSCodeのExtension "Remote-Containers"を使用して開発環境を作ろうと思います。 Micr
tl;dr go/types パッケージがめちゃくちゃ便利 https://golang.org/pkg/go/types/ https://github.com/golang/example/tree/master/gotypes gouml の紹介 Goのコードを静的解析し、PlantUMLのコードを吐くパーサを開発している。 github.com 例えばGo言語で書かれたこのソースファイルを渡すと、 package main type Human struct { Name string Age Age } type Age int func (a Age) IsAdult() bool { return a >= 20 } 以下のような PlantUML コードが生成される。 package "main" { class "Age" as main.Age <<V,Orchid>>
最初から完璧な設計と実装ができているなら苦労はないわけだけど、実際にはそうもいかない。具体的にはある程度の規模になってくると「あーこの関数 context.Context 対応したい!」みたいな気持ちが湧いてくるわけです。context 対応ってのは、第一引数に ctx context.Context を追加することですね。 そういうことをやるツールを書きました。 GitHub - motemen/go-ctxize: Rewrite functions to have "Context"s go get github.com/motemen/go-ctxize/cmd/goctxize で、goctxize というバイナリが手に入ります。 サンプル README やテストにある例だけど、 // $GOPATH/src/example.com/foo/foo.go package foo
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く