Web site created using create-react-app
![Go Slice Tricks Cheat Sheet](https://cdn-ak-scissors.b.st-hatena.com/image/square/79ceba01b3646675cdd1b4b7d4bee8a03d85cc4a/height=288;version=1;width=512/https%3A%2F%2Fueokande.github.io%2Fgo-slice-tricks%2Fthumbnail.png)
The Go Blogの日本語訳を公開しています。修正は https://github.com/ymotongpoo/goblog-ja/ まで。 配列、スライス(と文字列):'append'の動作原理 (Arrays, slices (and strings): The mechanics of 'append') 配列、スライス(と文字列):’append’の動作原理 Arrays, slices (and strings): The mechanics of ‘append’ By Rob Pike はじめに 手続き型プログラミング言語において共通した機能のひとつに配列という概念があります。配列は単純に見えて、言語に追加する際には 答えなければならない多くの設問にこたえなければいけません。たとえば次のようなものです。 固定長なのか、可変長なのか 長さは型に含めるのか 多次元配列はどの
intro 先日 GoのSliceもヤバイ - Qiita こんな記事をみて、別の挙動だけどスライスの内部を理解しきれていなかった頃のことを思い出した。 結構前に謎に思っていた挙動についての話。 以前この挙動を解説しようと思って、前提として書いたスライスの内部構造の記事が、 Go のスライスの内部実装 だったのですが、そっちを書き終わって満足してしまい、本題を忘れていました。 この挙動は、先のブログで説明した内容がわかっていないと、なかなか理解できないかも。わかってしまえば簡単ですが。 やりたいのは、関数側でスライスを操作したときの呼び出し側での結果。 順を追ってみてみます。 配列を関数内で変更する 関数は値渡しで、配列はそれ自体が値なので、まるっとコピーされます。 以下の例は、戻り値で返さないと、呼出側は変化しません。 package main import ( "log" ) func
Go’s arrays are values. An array variable denotes the entire array; it is not a pointer to the first array element (as would be the case in C). This means that when you assign or pass around an array value you will make a copy of its contents. (To avoid the copy you could pass a pointer to the array, but then that’s a pointer to an array, not an array.) One way to think about arrays is as a sort o
Go言語のArrayとSliceについて 調べるたびに忘れるのでメモしておきます。 基本的にGo Slices: usage and internals に基いています。 というかほとんど直訳です。 Introduction Sliceは他の言語のArrayに似ているが、違う部分がある。 Arrays Slice型はGo言語におけるArray型の抽象的なものである。 Array型は長さ(length)と要素(element)の型を明らかにしたものである。 下の例で、[4]intは4つのint型からなるArray型である。 長さは型の一部分である([4]int != [5]int)。 var a [4]int a[0] = 1 i := a[0] // i == 1 Go言語では、Array型はzero valueで初期化されていて、すぐに使える。 a[2] == 0 Go言語のArrayは
type slice struct { head int, tail int, data []interface{} } のようになっていて、先頭と最後へのポインタと配列へのポインタを持っていて、hoge[1:5]のようにslice演算をするとheadとtailだけ書き換えて、データはそのまま。 また、append関数はdataのキャパシティを超えた場合にreallocのようなことをしてデータ容量を拡張する。 package main import ( "fmt" ) var P = fmt.Println func main() { a := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} b := a[0:5] a[0] = 100 c := append(b, 200) //aの6つ目のデータを上書き P("a", a) //a [100 2 3 4 5 2
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く