[過去ログ] Go language part 1 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
410(1): 名無しさん@そうだ選挙に行こう [sage] 2014/12/13(土) 12:12:47.84 ID:imyzRhSY(1/3) AAS
>>409409(1): デフォルトの名無しさん [sage] 2014/12/13(土) 12:01:31.39 ID:BVSGhnq7(1/2) AAS
>>404
structは値型だからね
m["unko"]はmに格納されてるVertexのコピーが返される
これに修正加えても反映されないよーっていうエラー
だからそう言う書き方がしたいなら
map[string]*Vertex
って宣言するといい
var m map[string]*Vertex
func main() {
m = make(map[string]*Vertex)
m["Bell Labs"] = &Vertex{
40.68433, -74.39967,
}
m["Bell Labs"].Lat = float64(1)
fmt.Println(m["Bell Labs"])
}
これで行けました。ありがとうございます!
便乗で質問なのですが、
var m map[string]*Vertex
mapに関しては個人的に全部これでいいんじゃないかなと思ってしまうのですが
リファレンス型(ポインタ型?)を使うデメリットってあるんでしょうか。
自分で思いつくのは、
値 リファレンス
メリット ? アドレス情報にしかメモリを使わない
デメリット コピー分メモリを食う ソースがやや煩雑に
とう感じなのですが…
412(1): 名無しさん@そうだ選挙に行こう [sage] 2014/12/13(土) 14:08:11.12 ID:imyzRhSY(2/3) AAS
すみませんよくわかっていなかったようです…
type Vertex struct { Hage int }
func main() {
//primitive型 ------
var m map[string]int
m = make(map[string]int)
m["Bell Labs"] = 1
fmt.Println(m)
//中身構造体 ------
var n map[string]*Vertex
n = make(map[string]*Vertex)
n["Bell Labs"] = &Vertex{}
n["Bell Labs"].Hage = 1
fmt.Println(n)
//中身slice ------
var o map[string][]int
o = make(map[string][]int)
o["Bell Labs"] = append(o["Bell Labs"], 1)
fmt.Println(o)
o["Bell Labs"][0] = 2
fmt.Println(o)
}
こんな感じの使い分けですかね(´・ω・`)
sliceはappendでやれば直でokという感じなのかな…
414: 名無しさん@そうだ選挙に行こう [sage] 2014/12/13(土) 23:01:44.70 ID:imyzRhSY(3/3) AAS
>>413413(1): 名無しさん@そうだ選挙に行こう [sage] 2014/12/13(土) 14:43:59.47 ID:BVSGhnq7(2/2) AAS
>>410
小さい構造体とかプリミティブなやつはポインタを取るより値渡しの方が速いって読んだことある
(結構公式な文書だったと思うんだけどどこだったか忘れた。すまん)
だからどっちかいいかは使い方によるのかもしれない
>>412
sliceは参照型だからね
それ自体でポインタみたいなもんだから直でいける
遅くなりましたがありがとうございます!
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.594s*