在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Go语言加快工作效率的使用技巧有哪些

153次阅读
没有评论

共计 3199 个字符,预计需要花费 8 分钟才能阅读完成。

今天丸趣 TV 小编给大家分享一下 Go 语言加快工作效率的使用技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

引入 package 的多种方式

有几种非常规方式来引入包(package)。接下来我会使用 fmt 来作为例子:

import format fmt – 为 fmt 创造一个别名。把代码中所有使用到 fmt 的内容用 format. 代替 fmt.

import . fmt – 允许包内的内容不加 fmt 前缀而被被直接引用

import _ fmt – 阻止编译器为引入 fmt 却不使用里面的内容做引发的警告,执行 package 中的初始化函数。提醒一句,在这种情况下 fmt 是不可调用的

Goimports

命令 goimports 可以更新您的 Go 导入行,添加缺少的行,并删除未引用的引导行。

它拥有和 gofmt(插入式替换)相同的能力,但是 goimports 额外增加了修复 imports 的功能。

组织

Go 是一种相对来说易学习的编程语言,但对于开发者来说,起初接触这门语言最困难的事情就是如何组织代码。scaffolding 是人们喜欢 Rails 的原因之一,它可以给新晋的开发者清晰的方向,让他们明白在哪里插入代码,应该遵循怎样的编程风格。

作为扩展,Go 使用 go fmt 这样的工具来提供开发者相同的功能。同样地,Go 的编译器非常严格,它不会去编译没有使用的变量,或者没有使用的 import 声明。

自定义构造函数

我经常听到别人问,“我什么时候应该使用像 NewJob 这样的自定义构造函数?”,我的回答是“大多数情形下你没必要这么做”。然而,当你需要在初始化的时候就设置值,且你有一些默认值的时候,这就最好使用一个构造函数。在这个例子中,构造函数就比较有意义了,因此我们用如下的代码可以构建一个默认的 logger:

package main
import (
  log 
  os 
type Job struct {
 Command string
 *log.Logger
func NewJob(command string) *Job { return  Job{command, log.New(os.Stderr,  Job:  , log.Ldate)}
func main() { NewJob( demo).Print(starting now...)
}

把代码分解到不同的 package 中

以工程 Gobot 为例,它可以被分割为一个核心 package 和一些其他 package。gobot 的开发者们准备每个部分放在自己的 package 里。经过讨论,他们选择把所有的官方库放在同一个 repository 下,让 import 路径变得干净而富有逻辑。

所以,他们不打算把路径设置为:

github.com/hybridgroup/gobot
github.com/hybridgroup/gobot-sphero
github.com/hybridgroup/gobot-...

而是设置为

github.com/hybridgroup/gobot
github.com/hybridgroup/gobot/sphero
github.com/hybridgroup/gobot/...

现在 package 的名字不再是冗长的 gobot-sphero,而变成了简要的 sphero。

集合(Sets)

在其他的程序语言中,经?;嵊幸恢质萁峁菇凶?sets,它允许把元素存入,但是不允许重复。Go 并不直接支持这种结构,但是这个结构在 Go 里面的实现并不困难。

// UniqStr returns a copy if the passed slice with only unique string results.
func UniqStr(col []string) []string { m := map[string]struct{}{}
 for _, v := range col { if _, ok := m[v]; !ok { m[v] = struct{}{}
 }
 }
 list := make([]string, len(m))
 i := 0
 for v := range m { list[i] = v
 i++
 }
 return list
}

Playground 链接

在这里,我会使用一些非常有意思的花招。首先,对空结构的映射:

m := map[string]struct{}{}

我们创建了一个 map,这可以确保 key 是独一无二的,而相关联的 value 其实是我们不关心的。我们当然可以使用:

m := map[string]bool{}

但是,使用空结构体可以达到同样的效率,同时不会占用额外的内存。

第二个花招的意味更为深远:

if _, ok := m[v]; !ok { m[v] = struct{}{}
}

这里做的事情就是确认 map m 中的某个值是否存在,而不关心 value 本身。如果发现没有对应的值,就去加一个。当然,不去验证直接加好像也没有什么区别。

一旦我们拥有了一个充满独一无二 key 的 map 以后,就可以把他们放到一个切片里,返回结果了。

这里有一段测试代码,正如你所见,这里使用了一个符合 Go 语言单元测试风格的表格测试:

func TestUniqStr(t *testing.T) { data := []struct{ in, out []string }{ {[]string{}, []string{}},
 {[]string{ ,  , }, []string{}},
 {[]string{ a ,  a}, []string{ a}},
 {[]string{ a ,  b ,  a}, []string{ a ,  b}},
 {[]string{ a ,  b ,  a ,  b}, []string{ a ,  b}},
 {[]string{ a ,  b ,  b ,  a ,  b}, []string{ a ,  b}},
 {[]string{ a ,  a ,  b ,  b ,  a ,  b}, []string{ a ,  b}},
 {[]string{ a ,  b ,  c ,  a ,  b ,  c}, []string{ a ,  b ,  c}},
 }
 for _, exp := range data { res := UniqStr(exp.in)
 if !reflect.DeepEqual(res, exp.out) { t.Fatalf( %q didn t match %q\n , res, exp.out)
 }
 }
}

经过测试发现,并非每次都能够成功,而是有概率的。因为 map 是使用 hashmap 实现的,使用 range 进行遍历的时候,其遍历顺序和字符串的内容没有必然联系,因此此 test 有可能失败。在进行 DeapEqual 比对的时候,可能会爆出类似于 [b c a] didn t match [a b c] 的错误。当然,在 Playground 中,每次执行的上下文环境一模一样,因此这里的 test 是总能通过的。

依赖包管理

很遗憾,Go 语言官方并不提供依赖包管理系统。这很可能是因为 go 语言植根于 C 语言的文化,因此它没有办法引入特定版本的包。

这会带来一些严重的问题:

当多个开发者共同维护一个项目时,不同开发者的依赖版本可能不同。

   2. 依赖也会有他们自身的依赖,所以很难确保所有的依赖都使用同一个版本。3. 你的多个项目基于了同一个依赖的不同版本。

对于最后一种情形,可以通过搭建一个_持续集成环境 (Continuousintegration) 来解决,但是前两者就相对困难。

以上就是“Go 语言加快工作效率的使用技巧有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,丸趣 TV 小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计3199字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 国产精品免费观看久久 | 18禁美女裸体免费网站 | 亚洲视频中文字幕在线观看 | 成人区精品一区二区不卡亚洲 | 精品欧美成人高清视频在线观看 | 国产亚洲精品久久久久久午夜 | 欧美成在线播放 | 深夜一级毛片 | 无套内射视频囯产 | 国产福利小视频在线播放观看 | 最新四虎4hu影库地址在线 | 免费无码中文字幕a级毛片 免费无码专区毛片高潮喷水 | 黑人玩弄人妻中文在线 | 91精品国产露脸对白 | 久久国产精品免费网站 | 国产真实伦视频在线观看 | 亚洲av无码成人精品区在线播放 | 伊人久久无码中文字幕 | 中文字幕精品一区二区三区在线 | 亚洲综合欧美日本另类激情 | 国产v亚洲v天堂无码 | 免费欧洲美女牲交视频 | 亚洲av无码久久精品色欲 | 日本黄色不卡视频 | 免费国产成人高清在线观看视频 | 亚洲最大激情中文字幕 | 无码少妇一区二区浪潮av | 四虎精品成人免费永久 | 日本aaaaa毛片在线视频 | 国产亚洲欧美另类久久久 | 日韩精品亚洲专区在线观看 | 久久se精品一区二区国产 | 无遮挡国产高潮视频免费观看 | 伊人色综合视频一区二区三区 | 九九热免费在线视频 | 天天色天天射天天干 | 毛片网在线观看 | 国产成人精品一区二区三在线观看 | 一区二区电影网 | 久久久久在线观看 | 日本一区二区免费不卡 |