タグ

golangと構造体に関するdelegateのブックマーク (7)

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

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

    Go言語での構造体実装パターン
  • golang 構造体/structの使い方と注意点について|webdrawer

    今回は構造体/structの使い方と注意点ついて紹介していきます。 構造体/struct構造体/structは、異なるデータ型の複数の変数を一つの単位でまとめるためのデータ構造です。 まとめられた各変数はこの構造体のメンバー/フィールドと呼ばれます。 構造体はプログラミングにおいてデータのモデリングや、関連するデータを意味のある単位としてグループ化するのに使用されます。 構造体の使い方構造体の定義構造体は以下のように定義します。 type Person struct { Name string Age int }Personという名前の構造体を定義しており、NameとAgeという二つのフィールドを持っているという状態です。 構造体のインスタンス化定義した構造体の型から実際のオブジェクトを生成するために構造体のインスタンス化を行う必要があります。 Go言語では構造体を用いることで、オブジェク

    golang 構造体/structの使い方と注意点について|webdrawer
  • 【Go初学者向け】Goの構造体を他言語のオブジェクトの感覚で操作したらハマった - Qiita

    注意点 ポインタ型の話について詳しくは触れません。構造体+ポインタの話は他の記事を参照ください。 値渡し、参照渡しという単語を使わずに内容を記述します。 この記事で伝えたいこと 構造体について オブジェクトに似ているのは見た目だけ! 変数としての動きは参照型ではなく値型!そのため、int や bool 等のいわゆるプリミティブな型と同じ動きをする! 構造体をポインタ型に変換しない状態で、引数に渡したり range の for で扱う際の動きに注意! この記事の対象読者 JavaRuby 等の他のオブジェクト指向言語の知識をベースに Go の学習に取り組み始めた方 構造体という、Go におけるオブジェクトのようなもの操作にまだ慣れていない方 Go のコードの中で構造体を扱って、「不思議な動きするな…」と感じている方 Go の構造体の操作でハマった 筆者は今まで JavaRuby

    【Go初学者向け】Goの構造体を他言語のオブジェクトの感覚で操作したらハマった - Qiita
  • https://rapids-tech.com/golang-struct-tag/

  • Go言語でシンプルに構造体⇔バイナリの相互変換 - Qiita

    構造体をサクッとバイナリに変換したい! そんなときはencoding/binaryパッケージを使います。 構造体→バイナリ binary.Writeメソッドに構造体を渡すと上から順番にフィールドが並んだバイナリになります。 package main import ( "encoding/binary" "encoding/hex" "os" ) type A struct { Int32Field int32 ByteField byte } func main() { // 構造体つくる a := A{Int32Field: 0x123456, ByteField: 0xFF} stdoutDumper := hex.Dumper(os.Stdout) defer stdoutDumper.Close() // 構造体をバイナリにする binary.Write(stdoutDumper,

    Go言語でシンプルに構造体⇔バイナリの相互変換 - Qiita
  • Big Sky :: Go の struct は小さくできる(fieldalignment のススメ)

    動的型付けプログラミング言語や、class を持つようなプログラミング言語を使う場合、そのフィールドメンバの定義順などを意識する事は少ないかもしれません。 Go は struct という、C言語が持っている構造体と同じ様にメモリ配置され、構造体そのものをレシーバとして、メソッドを定義しつつプログラミングを行います。struct はデータ構造そのものを示し、それが大きくなるにつれ、当然ながらメモリ使用量も多くなります。 さて、例えば以下のコードを実行すると、struct 100 個分のサイズは幾らになるでしょうか。 package main import ( "fmt" "unsafe" ) type Account struct { TimeZone struct { Name       string `json:"name"` UtcOffset  int    `json:"utc_

    Big Sky :: Go の struct は小さくできる(fieldalignment のススメ)
  • Goでバイトリーダー

    はじめに Goで、bytes.Readerとかbinary.Read()とか使ったのでメモ。 (タイトルはバイトリーダーって言ってみたかっただけ。) バイナリファイルを読み込んで構造体に詰める なんか、こんな感じで構造体を用意して、binary.Read()したらいい感じに詰めてくれる。続けて、別の構造体にbinary.Read()したらいい感じにバイナリデータのつづきから読み取ってくれる。 エンディアンもさらっと指定できる。 適当に切り貼りしたから、もしかしたらそのままでは動かないかも。。。 package hoge import ( "bytes" "encoding/binary" "io" "os" ) type ( Data struct { Hoge uint8 Fuga uint8 } ) func hoge(path string) (*Data, error) { fil

    Goでバイトリーダー
  • 1