2,190
社区成员
发帖
与我相关
我的任务
分享
type MySTC struct {
ch1 chan [1000]int
ch2 chan string
ch3 chan []byte
a int
}
func main() {
m1 := make(map[int]MySTC)
m1[0] = MySTC{
ch1: make(chan [1000]int, 100),
ch2: make(chan string),
ch3: make(chan []byte),
a: 0,
}
fmt.Println(m1)
dosomething(m1)
delete(m1, 0)
for{
time.Sleep(time.second*100)
}
}
func test_map() {
m1 := make(map[int]string)
for i := 0; i < 5; i++ {
m1[i] = strconv.Itoa(i)
}
fmt.Println(m1)
for k, v := range m1 {
//v += "x" ,由于v是元素的copy,因此修改v不能更改相应的元素值
m1[k] += "x"
}
fmt.Println(m1)
}
+= "x" 这种情形在生产环境中应该很难遇到吧,一般value部分是一个结构体,用指针就没你的说的问题
你关心的性能问题,凭我个人的感觉大部分项目问题不大,以我的游戏服务器为例,5万机器人同时进行战斗,老机器志强e3-1230的cpu占用大约不到35%,真人登录上去玩起来也很流畅
根据官方的说法是性能可以达到c++的80%,我个人是不太信的,因为那些性能测试代码涉及的面相对偏窄且高度优化,但个人认为50%以上应该是没问题的。工具链也提供了强大的性能检测工具,利用这些工具做起优化来还是比较容易的
m1::iterator it = m1.begin();
for(; it!= m1.end(); ++it)
{
sring& str = it->second; //此处就不需要再次调用m1[it->first],而是直接用一个引用变量或者直接it->second+="x"即可
str += "x";
}
for k, _ := range m1 {
m1[k] += "x"
}
当然m1[k]是会发生一次hash查找的。