タグ

goLangとsyntaxに関するoinumeのブックマーク (17)

  • Goの型同一性を理解する

    記事は、2021年3月18日(木)に開催の、入門Go言語仕様輪読会 第2回のために執筆したものです。 はじめに Goには 型 の機能が存在します。 型を利用することで、 変数の型を指定し、その変数に対して代入できる値を限定する 値の型を指定し、その値に対して行える演算処理を限定する 同じ型を持つ値に対して共通した処理を記述する といった事ができます。 例として、代入や足し算について考えてみましょう。 // OKな例 var i1 int = 10 var i2 int = 1 i1 = i2 // OK fmt.Println(i1 + i2) // OK // NGな例 var i int = 10 var f float64 = 1.0 i = f // compile error fmt.Println(i + f) // compile error 上記の NGな例 のように、整

    Goの型同一性を理解する
  • GoのGenerics関連プロポーザル最新状況まとめと簡単な解説

    記事では、GoのGenerics関連のProposal一覧のまとめと、簡単な解説を行います。 内容については随時更新を行います。 (記事の内容をGo 1.17 リリースパーティーにて発表しました。) Generics関連のProposal一覧 (2022/2/3 更新) GoGitHub Issueと、Gerritから見付けたGenerics関連のProposalを表にまとめました。 Proposal Status Author GitHub Issue Design Doc / Gerrit

    GoのGenerics関連プロポーザル最新状況まとめと簡単な解説
  • Go の "Type Sets" proposal を読む

    Intro 読者の想定知識 この記事で出てくるGo言語仕様用語 サマリー Context Type Parameters Proposalの要点 Type listの必要性 暗黙的な"underlying type matching"の問題 type listからsum typeへ underlying type matchingと代入可能性 underlying type matchingと型switchステイトメント underlying type matchingの表現力の限界 Type Sets Proposal Type sets(型集合) 型Tがinterface ITを実装するための条件 要素を埋め込んだインタフェースのtype set interface elements(インタフェース要素) 任意の型(インタフェース型に限らない) approximation elemen

    Go の "Type Sets" proposal を読む
    oinume
    oinume 2021/07/29
    深い説明だけどわかりやすい
  • Where is my favorite helper function for testing? - Frequently Asked Questions (FAQ) - The Go Programming Language

    Origins What is the purpose of the project? At the time of Go’s inception in 2007 the programming world was different from today. Production software was usually written in C++ or Java, GitHub did not exist, most computers were not yet multiprocessors, and other than Visual Studio and Eclipse there were few IDEs or other high-level tools available at all, let alone for free on the Internet. Meanwh

    Where is my favorite helper function for testing? - Frequently Asked Questions (FAQ) - The Go Programming Language
    oinume
    oinume 2015/09/22
    "Should I define methods on values or pointers?"
  • 絶対ハマる、不思議なnil - Qiita

    goのnilは直感的ではない、これは強烈にハマりそう。 型を持つnil nilと一口に書くが、実際には型がある。 nilとnilが等価でないように見える nilが型情報を持つので、nil == nilがtrueになるとは限らない。 trueとなるためには、右辺と左辺の「nil」の型が一致しているという条件が必要。 package main func main() { var x *int32 = nil var y *int64 = nil equals(x, y) return } func equals(x, y interface{}) { println(x == y) }

    絶対ハマる、不思議なnil - Qiita
    oinume
    oinume 2015/02/27
    nil自体が型を持っているので、nil == nilは等しくならない場合がある
  • インタフェースの実装パターン #golang - Qiita

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

    インタフェースの実装パターン #golang - Qiita
    oinume
    oinume 2014/09/17
    構造体にもfmt.Stringer埋め込めるんだ
  • Go言語のメモリモデル — プログラミング言語 Go ドキュメント v0.1 documentation

    イントロダクション¶ Go言語のメモリモデルは、goroutineでの変数の更新結果が別のgoroutineでの同一変数の参照に認識される保証の条件を示します。 Happens-Before¶ 単一のgoroutine内での参照および更新は、プログラムによって指定された順序通りに実行されるよう振る舞うでしょう。参照および更新の並べ替えが言語仕様で定義された挙動を変えない限りにおいては、コンパイラとプロセッサは単一のgoroutine内での並べ替えをおこなっても構いません。この並べ替えによって、goroutineが認識している実行順序が別のgoroutineが認識する順序と異なっていてもいいのです。例えば、goroutineが a = 1; b = 2; を実行する場合、別のgoroutineが a の前に b の更新結果を認識するかもしれません。 参照および更新の要求仕様を示すため、Go

  • panicはともかくrecoverに使いどころはほとんどない - Qiita

    Goを書いていてrecoverを使うことはまずほとんどない。頻繁にrecoverを書いているとしたらなにかが間違っているのでプログラミングスタイルを見直すこと。 Goでのエラーハンドリング Effective Goなどで説明されているように、Goではエラーは関数の返り値として返される。たとえばio.ReaderのRead関数は、読み込んだバイト数と、(nilかもしれない)エラーの2つの値を返す。Goでは基的に、エラーは常にこういう通常の値としてハンドルするべきで、エラーの時のための特別な制御構造(try 〜 catch)のようなものを使うのは、利点より害のほうが多いという考え方をとっている。 (同じような考えで例外を使用禁止にしている大規模C++プログラムはいくつもある。たとえばChromiumなどはそうだ。LLVM/Clangもパフォーマンス上の問題で例外を使っていない。C++コンパイ

    panicはともかくrecoverに使いどころはほとんどない - Qiita
  • [Go言語]structにinterfaceを埋め込んで,動的に入れ替えるパターン - Qiita

    正直,何に使えるのよくわかりませんが,以下のようにすると動的にinterfaceの実装方法を変更できることに気づきました. structの匿名フィールド(埋め込み)として,interfaceを設定すると,そのstructも埋め込んだinterfaceを実装していることになります.埋め込んだinterfaceは匿名フィールドなので,型名でアクセスして入れ替えることができます. 以下の例では,fmt.Stringerインタフェースの実装を動的に変更しています. Go Playgroundで実行する package main import ( "fmt" "strings" ) type StringerFunc func() string func (sf StringerFunc) String() string { return sf() } type Person struct { fm

    [Go言語]structにinterfaceを埋め込んで,動的に入れ替えるパターン - Qiita
    oinume
    oinume 2014/08/13
    動的にメソッドを置き換えるって感じかなぁ
  • マスター・オブ・Reflectパッケージ

    3. 今日話すことは... ● Go研 Vol.8でやったことをまとめたもの ○ https://github. com/goken/goken/blob/master/goken08-reflect.md 4. アジェンダ ● なぜ、reflectパッケージを使うのか? ● 実際どこで使われているの? ● Value型とType型 ● interface{}とreflectパッケージ ● 構造体のリフレクション ● チャネルのリフレクション ● 関数のリフレクション

    マスター・オブ・Reflectパッケージ
  • Goのstructとinterface - oinume journal

    社内でGo勉強会をやったのでその時に自分が発表した時の内容。オブジェクト指向的なことをGoでどう実現するのか、どの辺を諦めなくてはいけないのかをまとめてみた。 Goでのオブジェクト指向 Goでは基的にオブジェクト指向プログラミングはできないと思ったほうが良い。できるのはstructを定義して関数を追加していくことだけである。 http://play.golang.org/p/7w9nbHDec1 package main import "fmt" type User struct { Id int Name string } // 文字列化する関数 func (u *User) String() string { return fmt.Sprintf("%d:%s", u.Id, u.Name) } func main() { var user *User = &User{1, "oin

    Goのstructとinterface - oinume journal
  • Go言語のスライスを理解しよう

    2. 自己紹介 • 河 泰孝 @yasi_life → @kwmt27 • 私とGo言語との関わり • 2011年のDevQuizで初めて触った • 2012年1月のGo言語勉強会に参加 • 2012年4月の東海GTUGさんのGAE 勉強会でGoを使った 3. 自己紹介 • 最近では公式サイトの • Writing Web Applications • Go Slices を翻訳してみたり。 https://github.com/ kwmt/golangwiki/wiki

    Go言語のスライスを理解しよう
  • Goプログラミング言語仕様 - golang.jp

    Go言語とは、Googleが開発した新しいプログラミング言語です。 当サイトではこの新しい言語についての情報を集約していきます。 このサイトの更新が滞っており、情報が古くなっておりますのでご注意ください。 はじめに この文書は、プログラミング言語Goのリファレンスマニュアルです。その他の情報、文書はhttp://golang.orgを参照ください。 Go言語は汎用言語ですが、システムプログラミングを念頭に設計されています。この言語は、強い型付け、ガーベージコレクション、並列処理をサポートする機能を持ちます。プログラムはパッケージという単位で構成され、依存関係は効率的に管理されます。今現在は、従来からあるコンパイル/リンクモデルによる実行バイナリ生成方式を採っています。 Go言語の文法は、コンパクトかつ規則的で、IDE(統合開発環境)のような自動ツールにとって解析しやすい言語となっています。

  • Google グループ

    Google グループでは、オンライン フォーラムやメール ベースのグループを作成したり、こうしたフォーラムやグループに参加したりすることで、大勢のユーザーと情報の共有やディスカッションを行うことができます。

  • Go言語での構造体実装パターン

    Go言語での構造体実装は、埋込や独自コンセプトのインターフェースといったGo言語独自の機能を理解して行う必要があります。 今年からGo言語を始めましたが理解が曖昧なままだと実装に迷うことが何度かありました。今回よい機会なので、Go言語での構造体実装パターンとしてまとめてみることにしました。 構造体実装パターン 実装パターンの洗い出しとして、GoFデザインパターンをGo言語で実装する手法をとりました。 その中で繰り返し現れる実装をGo言語での構造体実装パターンとしてまとめてみました。 コンストラクタ関数 エクスポートによるアクセス許可 インターフェースによるポリモフィズム 構造体によるポリモフィズム 構造体によるサブクラス・レスポンシビリティ 構造体による移譲 関数による移譲 以下、それぞれのパターンを解説していきます。 コンストラクタ関数 Go言語には構造体のコンストラクタがないため、構造

    Go言語での構造体実装パターン
  • Go の interface 設計 - Block Rockin’ Codes

    history 13/3/31 Tag について追加 intro Go を触ってて interface を用いた設計がまだまだよくわかってなかったので、一旦まとめることにしました。 Go には明示的な継承の機能は無く、 interface も例えば Java のそれとはかなり毛色が違うので、(Class ではなく) Struct の設計に結構癖があると感じます。 Go の interface は言語設計的にもかなり尖っていて、 Go という言語を強く特徴付けていると同時に、 Go 言語自体の開発者たちもこの機能をかなり重要視しています。 例えば、 Go の開発者の一人である Russ Cox 氏によれば Go's interfaces―static, checked at compile time, dynamic when asked for―are, for me, the most

    Go の interface 設計 - Block Rockin’ Codes
    oinume
    oinume 2014/07/27
    Generics的なやり方も載ってる
  • Big Sky :: Go言語でインタフェースの変更がそれ程問題にならない理由

    golang - Go言語における埋め込みによるインタフェースの部分実装パターン - Qiita [キータ] http://qiita.com/tenntenn/items/e04441a40aeb9c31dbaf golang はインタフェースがマッチしているかどうかにより処理を切り分けられる。 package main import "fmt" type Person struct { FirstName string LastName  string } func (p *Person) Name() string { return p.FirstName + " " + p.LastName } func main() { person := &Person{"Taro", "Yamada"} fmt.Println(person.Name()) } メソッドを保持しているのであれ

    Big Sky :: Go言語でインタフェースの変更がそれ程問題にならない理由
  • 1