タグ

ブックマーク / qiita.com/tenntenn (10)

  • Goのinternalパッケージを使いこなそう - Qiita

    はじめに どうもナレッジワークのtenntennです。 Goのinternalパッケージはご存知でしょうか? 記事では、うまく使うととても便利なinternalパッケージについてご紹介します。 internalパッケージとは Goパッケージは、基的には外部のモジュールに公開されます。 パッケージ内のどの識別子を公開するかは、先頭の文字を大文字にするかどうかで決まりますが、パッケージにはその機能はありません。 しかし、Goにはinternalパッケージ(内部パッケージ)という特別なパッケージがあります。internalパッケージは、モジュール外には公開されません。 また、internalパッケージの親パッケージおよびその子パッケージ以下からしか参照できません。 たとえば、以下のようなパッケージ構成があった場合を考えます。 a/b/internalパッケージ直下の識別子やa/b/inter

    Goのinternalパッケージを使いこなそう - Qiita
  • Goを学ぶ有料講義を始めた話 - Qiita

    Gopher塾をきっかけ どうもナレッジワークのtenntennです。 2022年の10月よりGopher塾という有料の講義を始めました。参加頂いた方は、ありがとうございました! 『チャンスは待たずに自分で作る ─ ソフトウェアエンジニアが「好きな技術」で生きていくための技術とは』という記事にも書いた通り、有料にした理由は家族との時間を減らして行う個人活動の時間に一定の意味をもたせることです。 有料で行うからには、参加者が参加して良かったと思えるものにしなければいけません。#1はテストに関して、#2はGoらしいコードの書き方について扱っています(#2は開催予定)。 単なる使い方だけではなく、10年以上Goコミュニティで学んだ知識や開発経験、技術顧問などで複数社の設計・実装を見た経験を基に講義を構成しています。 また、私は内部構造を調べるのが好きなので、たとえばgo testの仕組みやカバレ

    Goを学ぶ有料講義を始めた話 - Qiita
  • Goの並列テストでよくあるバグ(tt := tt忘れ)に対する対策 - Qiita

    どうもナレッジワークのtenntennです。 記事は、Gopher塾で扱ったテストの話で、参加者の方から質問が出た並列テストにおけるよくあるバグについての解説とGo 1.20以降で入る対策について書きます。 並列テストとサブテスト Goでは、テスト関数内で(*testing.T).Parallelメソッドを呼び出すとテストを並列に実行できます。テストを並列に実行することでテストを効率よく行い、実行時間の削減が見込めます。 また、*testing.T型には、サブテスト(子テスト)を実行するためのRunメソッドがあり、サブテストを並列に実行できます。Goではテーブル駆動テストがよく用いられため、各テストケースがサブテストとして実行されます。テストの効率化を考えて、各テストケースをParallelメソッドを用いて並列に実行することが多いです。 並列テストでよくあるバグ サブテストを並列に実行す

    Goの並列テストでよくあるバグ(tt := tt忘れ)に対する対策 - Qiita
  • goパッケージで簡単に静的解析して世界を広げよう #golang - Qiita

    はじめに Goの標準パッケージには、goパッケージというものがあり、Goのソースコードを静的解析するのに便利な機能が提供されています。 goパッケージを使うと、以下のようなツールが簡単に作れます。 ソースコードを自動生成するツール ソースコードに対してlintやフォーマットを行うツール リファクタリングツール ソースコードから特定の何かを検索するツール ミニ言語の処理系 また、goパッケージを学ぶとコンパイラや言語処理系の知識も学べるので、他の標準パッケージとはまた少し違った知識を得ることができ、プログラミングの知識の幅が広がります。 しかしながら、goパッケージに関する日語の文献は少なく、学習しづらいのが辛いところです。 私もこれまでgoパッケージについて、Qiita上でいくつか記事を書いてきましたが、どの記事が何をするときに役に立つのか分かりづらくなっていました。 そこでこの記事では

    goパッケージで簡単に静的解析して世界を広げよう #golang - Qiita
  • Goを学びたての人が誤解しがちなtypeと構造体について #golang - Qiita

    はじめに タイトルをキャッチーかつ若干煽り気味にしたのは、そもそも記事を見てもらう確率を上げるためで他意はありません。なぜ読んでほしいのかというと、typeとstructについて、一部の機能に着目して、それがtypeとstructの全てだと誤解されるとマズいなと感じることが最近多いためです。 この記事で書いてあることは過去にもインタフェースの実装パターンや2016年度Go研修で取り上げていますが、今回は端的に分かりやすくなるようにまとめたいと思います。

    Goを学びたての人が誤解しがちなtypeと構造体について #golang - Qiita
  • init関数のふしぎ #golang - Qiita

    はじめに 知られているようで、案外知られてないことをQiitaに投稿していくのも良いと思い、軽いネタですがinit関数についてまとめたいと思います。 init関数とは init関数は特殊な関数で、パッケージの初期化に使われます。 以下のようにmainパッケージに書くとmain関数より先に実行されます。 mainパッケージでない場合は、importするだけで呼び出されます。 package main import ( "fmt" ) func init() { fmt.Println("hello, init") } func main() { fmt.Println("Hello, main") } Playgroundで動かす init関数は何に使うのか? 上記では、初期化に使うと書きました。名前からしてそれは想像できますよね。 init関数は基的にはパッケージ変数の初期化に用いられま

    init関数のふしぎ #golang - Qiita
  • 終了したことを他の複数のゴルーチンに伝えるのにチャネルのcloseを使う #golang - Qiita

    複数のゴルーチンに対して、何かしらの処理が終了したことを伝えるのにチャネルのcloseが使えます。 これはruiさんの以下の記事にも書かれていることですが、ここでは閉じれたチャネルの挙動を見つつ、例を挙げて説明していきます。 Goでチャネルにブロードキャストするにはcloseを使う 閉じられたチャネルの挙動 閉じられたチャネルは、受信したり送信したりした場合、どのような挙動をするのでしょうか? 実際に送信や受信を行ってみて挙動を確かめてみましょう。 送信 閉じられたチャネルに対して送信してみましょう。 Go Playgroundで見る package main func main() { ch := make(chan struct{}) close(ch) ch <- struct{}{} }

    終了したことを他の複数のゴルーチンに伝えるのにチャネルのcloseを使う #golang - Qiita
  • Go言語でWebAppの開発に必要なN個のこと - Qiita

    元ネタ あるプログラミング言語で実際にWebAppを開発できるようになるまで、何が必要だろうか。言語仕様の習得は終えているとしよう。おそらく、最低限以下のような知識が必要だと思われる。とりあえずGo言語について知っていることを書いた。 パッケージマネージャ 標準でついてるgoツールを使おう。必要なライブラリはリポジトリから、go getで取ってこよう。 http://golang.org/cmd/go/#hdr-Download_and_install_packages_and_dependencies アプリケーションサーバ 標準パッケージのnet/httpパッケージを使えばhttpサーバを動かすことができる。apacheやnginxで動かしたかったら、標準パッケージのnet/http/cgiパッケージやnet/http/fcgiパッケージを使えばいい。 http://golang.or

    Go言語でWebAppの開発に必要なN個のこと - Qiita
  • インタフェースの実装パターン #golang - Qiita

    はじめに この記事は,以下の過去にQiitaに投稿したインタフェースの実装パターンの記事に,typeやメソッド,インタフェースの基的な説明を追加してわかりやすくしたものです. Go言語における埋め込みによるインタフェースの部分実装パターン structにinterfaceを埋め込んで,動的に入れ替えるパターン まずtypeとメソッド,基的なインタフェースの実装方法についておさらいすることで,さまざまなインタフェースの実装パターンを扱う準備をしましょう. typeで型を宣言する まずはじめに,Go言語における型の宣言方法をおさらいします.Go言語をはじめたばかりの方の中に,typeの使い方を限定的にしか理解していない方をよく見かけます.ご存知のとおり,typeは型を宣言するために使うキーワードです.以下のように,構造体型やインタフェース型の宣言の際に,使用することが多いでしょう. //

    インタフェースの実装パターン #golang - Qiita
  • Goの初心者が見ると幸せになれる場所 #golang - Qiita

    公式サイト A Tour of Go Web上で実行しながら学ぶことができる公式のチュートリアルです。 チュートリアル 公式のチュートリアルです。初学者向けからジェネリクスのチュートリアルなども用意されています。 A Tour of Goが終わった後に取り組むと良いでしょう。 Go Wiki Go Code Review Commentsなどが掲載されているGitHub上のWikiです。 パッケージドキュメント 標準パッケージやサードパーティ製のパッケージのドキュメントが見れるサイトです。検索もできます。 入門 プログラミング言語Go完全入門 筆者が作っている巨大なGoの入門資料です。なぜGoが作られたのか、から最新のジェネリクスの情報、静的解析まで扱っています。 Gopher道場 Goを体系的に学べる場です。10時間くらいある動画教材(自習室から入手可)もあります。 Go の最初の手順

    Goの初心者が見ると幸せになれる場所 #golang - Qiita
  • 1