十条最有用的golang 编程技术

前端之家收集整理的这篇文章主要介绍了十条最有用的golang 编程技术前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Golang 方向是以高并发为主的开发语言,并且原生channel特性,拥有协程等并发框架支持,大大降低并发编程门槛,golang 是google 模仿erlang ,而erlang是用于程控交换机的。

对比之前用C++ ACE框架的并发模型(proactor),惊喜于Golang的高效,简捷。


Golang 十条有用的Go 编程技术:

  1. 使用单一的GOPATH,避免引用依赖不统一。当然可以使用godep这样的工具

  2. 将for-select 封装在函数

    func main(){

foo()

fmt.Println("ending")

}

func foo(){

for{

select {

case <- time.After(time.Second):

fmt.Println("hello")

default:

return

}

}

}

  1. 在初始化结构体时使用带有标签的语法,防止由于扩展结构体字段导致编译失败

    type T struct {

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 %+v\n",servers)


}


map 的设置节点用 setter, getter 包装,并且添加mu.lock() 因为map 是unsaft

原文链接:https://www.f2er.com/go/190656.html

猜你在找的Go相关文章