エージェントをオブジェクト風に作って、配列にいれて、終了したら、エージェントを消滅する。

Go言語でエージェントシミュレータを作るのに必要なパーツを作っています。

エージェントをオブジェクト風に作って、配列にいれて、終了したら、エージェントを消滅する。

package main

import (
	"fmt"
	"math/rand"
)

type person struct {
	number          int     // 番号
	mental_strength float64 // 勧誘に屈しない強さ
}

var p_array []*person // personの配列

func person_create(num int) *person {
	p := new(person)
	p.number = num
	p.mental_strength = rand.Float64() // 勧誘を断わる強さ
	p_array = append(p_array, p)       // 配列に放り込む
	return p
}

func (p *person) person_destroy() {

	for index, v := range p_array {
		if v == p {
			fmt.Println("hit")
			p_array = append(p_array[:index], p_array[index+1:]...)
			break
		}

	}

	p = nil //これでいいのかな?
}

func main() {
	_ = person_create(0)
	p1 := person_create(1)
	p2 := person_create(2)
	_ = person_create(3)

	for index, v := range p_array {
		fmt.Println(index, ":", v, v.number, v.mental_strength)
	}

	p2.person_destroy()

	for index, v := range p_array {
		fmt.Println(index, ":", v, v.number, v.mental_strength)
	}

	p1.person_destroy()

	for index, v := range p_array {
		fmt.Println(index, ":", v, v.number, v.mental_strength)
	}

}

■出力結果

PS C:\Users\ebata\cult> go run main.go
0 : &{0 0.6046602879796196} 0 0.6046602879796196
1 : &{1 0.9405090880450124} 1 0.9405090880450124
2 : &{2 0.6645600532184904} 2 0.6645600532184904
3 : &{3 0.4377141871869802} 3 0.4377141871869802
hit
0 : &{0 0.6046602879796196} 0 0.6046602879796196
1 : &{1 0.9405090880450124} 1 0.9405090880450124
2 : &{3 0.4377141871869802} 3 0.4377141871869802
hit
0 : &{0 0.6046602879796196} 0 0.6046602879796196
1 : &{3 0.4377141871869802} 3 0.4377141871869802

2022/09,江端さんの技術メモ

Posted by ebata