タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

Sliceに関するsekky0905のブックマーク (3)

  • GoのSliceを関数の引数に渡した時の挙動 - Carpe Diem

    概要 Sliceの構造を始め、関数で呼び出した場合の挙動やappendなどsliceを操作した場合どうなるかをまとめました。 環境 golang v1.9.0 Sliceの構造 Sliceは以下のような3つの要素でなりたっています。 配列へのポインタ length capacity 図示すると以下です。 ref: Go Slices: usage and internals - go.dev 関数の引数として渡した時 Goの関数の引数は基的に値渡しです。これはsliceも同じです。なので渡した変数のポインタは異なります。 func main() { s := []int{1, 2, 3} fmt.Printf("%p\n", &s) // 0x1040a0b0 someFunc(s) } func someFunc(s []int) { fmt.Printf("%p\n", &s) //

    GoのSliceを関数の引数に渡した時の挙動 - Carpe Diem
  • Go のスライスの内部実装 - Block Rockin’ Codes

    History 14/05/09: Merge2 を修正しました。http://twitter.com/jbking/status/464659353945911297 Intro Go のスライスは、いわゆる LL 系の言語が持つ可変長配列の実装と似ています。 よって LL のような手軽な扱いをすることもできますが、その内部実装を知ることでより効率の良いメモリハンドリングができ、パフォーマンスを改善や、メモリーリークの防止などに繋がる可能性があります。 この辺は SWrap というライブラリを作りながら勉強したので、今回は、この Go のスライスの内部実装を解説します。 Go の配列 スライスを知るためには、まず配列について知っておく必要があります。 Go の配列は固定長のため、以下のように長さを指定して宣言します。 var arr [4]int func main() { arr =

  • golangのsliceが憎い - ポインタで苦しんだ話 - - Qiita

    はじめに この処理で数時間悩んでしまったので同じ轍を踏むであろう後世(忘れたころの自分)のために残しておく。 結論 結論からいくと、どんなときもsliceを使いまわして、あとから変更する場合は、必ずコピーして設定しよう! 詳細 とあるファイル処理で、structの中に特定の塊の文字列をsliceにして突っ込んでおきたかった時の話。 やりたかったのは以下の手順 1. 文字列をsliceに突っ込んで、Aを生成 2. 必要に応じてAをコピーし、中身のsliceを書き換えて使いまわしたい それでこういう感じのコードを書いた。 [The Go Playground] https://play.golang.org/p/NVOt7gk7NWv package main import ( "fmt" ) type A struct { slices [][]string } func (a *A) se

    golangのsliceが憎い - ポインタで苦しんだ話 - - Qiita
  • 1