当前位置: 首页 > news >正文

网站建设方案书范本网站seo诊断报告怎么写

网站建设方案书范本,网站seo诊断报告怎么写,网站关键词布局图,手游传奇网站发布这里会整理可能会使用到的命令行参数,比如 go build、go run,诸如此类。了解这些内容对我们工作会有什么帮助吗?更多的时候,是能让我们理解代码编译的意图,或者,给我们一种排查问题的手段。 比方说&#x…

这里会整理可能会使用到的命令行参数,比如 go build、go run,诸如此类。了解这些内容对我们工作会有什么帮助吗?更多的时候,是能让我们理解代码编译的意图,或者,给我们一种排查问题的手段。

比方说,-race 属性,go 语言 string 类型思考 博客中也有说到这个属性,用来检测数据动态竞争。-test 属性,go使用benchmark分析json库性能 中也有用到这个属性,等等吧。

go build

编译 go 的可执行文件,最终代码发布上线,肯定需要执行这个指令。或者在项目的 makefile 里就已经写好了这个指令,或者在 dockerfile 里。

ldflags -X

执行 go build 的时候,可能就会遇到指定这个属性的情况。这个属性可以用来动态设置代码中的变量,我们先通过一个例子来了解一下它的作用。

下面的例子中,声明了两个包变量,分别是版本号和应用名称。拿版本号来说,应用每次部署都需要生成一个新的版本号,我们需要在上线前把这个参数做指定。但如果靠硬编码的方式来处理,每次上线都需要手动修改这个变量。

这种情况,我们可以通过编译时动态设置的方式,来修改这个变量的值。-X 的作用在这个时候就体现出来了,在执行 go build 的时候指定这两个值。

package mainimport "fmt"var version string = ""
var name string = ""func main() {fmt.Println(version)fmt.Println(name)
}

go build 执行时进行包变量赋值, 指定的赋值方式:importpath.name=value。通过包路径.变量名 的引用方式来定位包变量。结合例子,我们在编译的时候指定了了变量 name 和 version 的值。

通过上述的例子,可以看出,-X 并不限制包变量是否可导出,不可导出的变量也可以进行赋值。

go build -ldflags "-X main.name=test -X main.version=1.2.0" main.go

这种指定包变量的场景,经常会在一些框架代码中使用,可以指定 git 的版本号,也可以指定部署的机房环境。通过这种方式,我们不再需要通过配置文件来修改这些变量,简化了我们的开发。

如果要给项目的其他包变量赋值,只需要替换包的名字就可以了。包的路径名称其实就是 import 的路径名称,这个 import 的路径名称其实是和 go.mod 中 module 的声明对齐的。

在这里插入图片描述

重新创建一个 hello 包,在包中声明了一个 hello 变量,然后,在 main 中调用 hello 包中的打印方法。我们演示一下给项目的其他包中赋值的过程。

类似的,就是替换一下包名。编译执行,输出的结果为 test。

go build -ldflags "-X github.com/think-next/lesson/ldflags/hello.hello=test" main.go

在这里插入图片描述

go tool nm

对于代码中包级别定义的变量,我们还可以通过 go tool nm 进行查看。那上面的例子来说,在控制台可以查看 hello 包中的定义的符号。

我们首先对项目做 go build ,然后使用 go tool 工具解析编译后的可执行文件。然后执行 go tool nm 来解析包级别的变量

go build main.go

使用 grep 过滤关键字中包含 hello 的行,-i 属性是忽略大小写匹配。

➜  ldflags git:(master) ✗ go tool nm main | grep -i hello111d0c0 D github.com/think-next/lesson/ldflags/hello..inittask112d0d0 D github.com/think-next/lesson/ldflags/hello.hello

技巧

上面的例子中, -X 中指定的变量都是硬编码的常量,但如果是正常业务,这些常量一定是自定义的变量。

编译的时候,自动获取当前 git 的版本号,自动获取当前 go 的版本号… 比如说,下面例子中的 main.version 要赋值的是当前编译 go 的版本号,我们该如何执行呢

go build -ldflags "-X main.name=test -X main.version=1.2.0" main.go

通过 shell 语句可以实现,使用 (goversion)来获取当前的go的版本号。(go version) 来获取当前的 go 的版本号。(goversion)来获取当前的go的版本号。$() 在 shell 中表示 命令替换,就是完成括号里面的指令,用指令的执行结果来替换。

但下面的指令无法正常执行,究其原因,是因为 go version 执行的结果中包含空格。对于输出结果中包含空格的情况,该如何解决呢。

go build -ldflags "-X main.name=test -X main.version=$(go version)" main.go

使用单引号将执行指令括起来,就可以正常输出了。这让我想起来了,awk 打印单双引号的例子。这些奇怪的 case,主要看作者在开发工具的时候,是如何解析参数的。

go build -ldflags "-X main.name=test -X 'main.version=$(go version)'" main.go
http://www.qdjiajiao.com/news/10240.html

相关文章:

  • 做网站的工具怎么使用真正永久免费网站建设
  • 手机端网站尺寸seo关键词推广话术
  • 网站seo与网站没关网络推广营销培训机构
  • 搜狗优化好的网站网站优化的方法有哪些
  • wordpress nginx 固定链接 404江苏网站seo
  • 外贸人才网招聘网北京seo关键词排名优化软件
  • 简述网站栏目管理排名检测
  • python做网站的案例域名大全查询
  • 服饰营销型网站建设西安seo王
  • 郑州网站优化外包关键字是什么意思
  • 怎么建设网站近期10大新闻事件
  • 云建站优势某网站搜索引擎优化
  • 济宁网站建设软件开发武汉搜索推广
  • 怎么策划一个网站seo排名如何
  • 建设企业网站官方登录什么是seo网站优化
  • 常州做网站网络公司网站建设
  • 郑州网站建设费用seo搜索工具栏
  • 网站建设公司ipo视频网站搭建
  • 湖州织里童装批发网站论坛推广平台有哪些
  • 做智能网站系统网络广告营销的案例
  • 尼罗发表小说做的的网站是哪个自媒体seo优化
  • div css旅游网站中文模板设计厦门百度推广排名优化
  • 绍兴做外贸网站的公司三只松鼠营销策划书
  • 濮阳网站建设网站最新新闻国内大事件
  • 做网站公司南京长沙网站建站模板
  • 重庆待遇好的互联网公司seo全网营销的方式
  • 深圳做app网站的公司哪家好什么是关键词搜索
  • 如何把自己做的网站挂网上简述网站建设的基本流程
  • 政府网站建设依据关键词在线采集
  • wordpress大主题优化大师怎么样