十条最有用的golang 编程技术
Golang 方向是以高并发为主的开发语言,并且原生channel特性,拥有协程等并发框架支持,大大降低并发编程门槛,golang 是google 模仿erlang ,而erlang是用于程控交换机的。 对比之前用C++ ACE框架的并发模型(proactor),惊喜于Golang的高效,简捷。 Golang 十条有用的Go 编程技术:
foo() fmt.Println("ending") } func foo(){ for{ select { case <- time.After(time.Second): fmt.Println("hello") default: return } } }
Foo string Bar int } func main(){ t := T{"example",123} //无标签语法 m :=T{ Foo:"example", Bar:123 } //有标签语法(推荐) } 3. 将结构体的初始化拆分到多行 4. 为整数常量添加String() 方法,利用print 的接口String const ( Running State = iota Stopped Rebooting Terminated ) func main(){ state := Running //导致print 输出不直观 fmt.Println("state ",state) } //给 State 类型添加String()方法,使输出更加直观具体 func(s State) String() string { switch s{ case Running : return "Running" case Stopped : return "Stopped" case Terminated: return "Terminated" default: return "Unknown" } } 8.将slice,map等包装为自定义类型 type Servers []Server func ListServers() Servers { return []Server{ {Name: "wzz1"}, {Name: "wzz2}, {Name: "Foo1"}, {Name: "Foo2"} } } func (s Servers) Filter(name string) Servers{ filtered := make(Servers,0) for _,server := range s{ if strings.Contains(server.Name,name) { filtered = append(filtered,server) } } return filtered } func main() { servers := ListServers() servers = servers.Filter("Foo") fmt.Printf("server %+vn",servers) } map 的设置节点用 setter, getter 包装,并且添加mu.lock() 因为map 是unsaft (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |