最近打算读一读 go程序设计语言这本书, 读语言类的书是一件十分头疼的事情, 因为读一本书就意味着,看着一堆钳子 锥子工具的图片, 概念背了一大堆,仍然不知道怎么用,还是要通过实践。 还是习惯任务驱动的方式。 内容略读, 给自己提一些小的任务,逐渐提升,自认为是一件比较靠谱的学习方法。

练习 1.1 打印命令行的所有内容,包括命令本身的名字

这个练习的本意是想了解for循环的种类。 其实主要有两种,等我一会 把代码敲完ha。

5分钟后

别嫌弃简单了,可以说明问题的。 其实go 语言里面只有for循环, 你不用有其他的想法, 这个联系可以展示两种主要的。以这道题为例,一种是这种形式的:


s, sep := "", ""
for i := 0; i < len(os.Args); i++ {
s += sep + os.Args[i]
sep = " "
}
fmt.Println(s)

这种事比较传统的方式, 另一种是range

  s, sep := "", ""
for _, arg := range os.Args {
s += sep + arg
sep = " "
}

里 面的_表示忽略其中的索引,由于go里面不允许使用无用的局部变量,所以一般返回值的不适用的话采取这种策略

其实虽然go只支持for循环,本人认为基本够用了.比如你要用while循环, for循环可以只保留条件变量,像下面的这种类似while的形式

for condition{

}

当然,死循环也是可以的,省略 for循环三个部分,像下面的样子

for{

}

现在可以给出可运行的代码了

package main

import (
"fmt"
"os"
) func main() {
s, sep := "", ""
for _, arg := range os.Args {
s += sep + arg
sep = " "
} fmt.Println(s)
}

练习 1.2 打印每个参数的索引和值。 这个就没啥意思了。写了, 咱看看下一个小题, 应该挺有意思

练习 1.3 做实验测量潜在低效的版本和使用了 strings.Join的版本的运行时间差异,所谓潜在低效版本就是程序用的这种操作符的形式。

好, 那我们就做个性能测试吧, 看看这两种方式相差是多少。 go语言自带的benchmark 测试工具, 不会的同学自行百度哈。等我一下,把程序敲完。

package main

import (
"fmt"
"strconv"
"strings"
"time"
) func main() { var arr [10000]string
for i := 0; i < 10000; i++ {
arr[i] = strconv.Itoa(i)
} t1 := time.Now()
s := ""
for _, st := range arr {
s += st
}
elapsed := time.Since(t1)
fmt.Println("+ time : ", elapsed) t2 := time.Now()
s2 := strings.Join(arr[0:], "")
elapsed2 := time.Since(t2)
fmt.Println("Join time:", elapsed2) if s != s2 {
fmt.Println("error")
} else {
fmt.Println("sucess")
}
}

两种方式把10000个数字拼在一起,对比一下时间。

最后结果相差还是挺巨大的!!,看

  • time : 78.96146ms

    Join time: 73.106µs

go 程序设计语言 命令行参数的更多相关文章

  1. 【嵌入式开发】C语言 命令行参数 函数指针 gdb调试

    . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21551397 | http://www.hanshul ...

  2. C语言 命令行参数 函数指针 gdb调试

    . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21551397 | http://www.hanshul ...

  3. c语言命令行参数

    int main(int argc, char * argv[]) { ..... } argc: 代表启动程序时,命令行参数的个数.C和C++语言规定,可执行程序程序本身的文件名,也算是一个命令行参 ...

  4. 关于C语言命令行参数问题

    1 int main(int argc,char** argv) 参数: argc:命令行参数的个数 argv:保存命令行参数:argv[0]保存本程序自己的名称 现在自己只知道这些以后再有学习继续补 ...

  5. R 语言命令行参数处理

    在unix.windows外部需要调用R脚本执行,然后又需要输入不同的参数,类似shell脚本的命令行参数输入,可以使用Rcript命令实现. 命令格式:Rscript [options] [-e e ...

  6. R语言命令行参数

        批量画图任务中,需要在R中传入若干参数,之前对做法是在perl中每一个任务建立一个Rscript,这种方式超级不cool,在群里学习到R的@ARGV调用方式,差不多能够达到批量任务的要求: a ...

  7. 我也要学C语言-第十九章:命令行参数

    C语言的语法规定main函数是带连个参数的,因为当初是考虑是在控制台下写程序.于是用户可以给参数微控程序.其实现在的WINDOWS程序也可以带参数.一般正规军写的应该程序一般都带命令行参数,帮助文档, ...

  8. go语言之行--文件操作、命令行参数、序列化与反序列化详解

    一.简介 文件操作对于我们来说也是非常常用的,在python中使用open函数来对文件进行操作,而在go语言中我们使用os.File对文件进行操作. 二.终端读写 操作终端句柄常量 os.Stdin: ...

  9. [日常] Go语言圣经-命令行参数

    1.编译 go build hello.go 2.go get gopl.io/ch1/helloworld 命令,就会从网上获取代码,并放到对应目录中 下载的代码会放在$GOPATH/src/gop ...

  10. 《Java 程序设计》课堂实践项目-命令行参数

    <Java 程序设计>课堂实践项目 课后学习总结 目录 改变 命令行参数实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有修改.加了 ...

随机推荐

  1. 网络监测工具之Zabbix的搭建与测试方法(三) ---Zabbix Agent

    安装客户端 在官方网站下载最新版本zabbix agent v6.2.6,然后默认安装,其中配置服务端的界面如下图: 其他一律默认即可. 启用发现功能 如上图所示,开启发现规则,默认搜索zabbix ...

  2. 小型web产品的功能测试要点或测试大纲

    本文参考配置啦:-- Web类产品功能测试大纲,黑盒测试参考测试范围 [官网]:无 应用场景 黑盒测试,功能测试中常常需要考虑很多问题,这里根据本人的工作经验遇到的进行了系列总结.给出了一个常用的测试 ...

  3. 百度智能云 API调用PythonSDK

    百度智能云 API调用PythonSDK 这是一个用于百度云部分开放AI功能的Python库.主要为ORC功能,可以对各种图像文件进行文字识别,包括车牌.手写文字.通用文字.人脸发现.人脸比对和人流量 ...

  4. [OpenCV实战]31 使用OpenCV将一个三角形仿射变换到另一个三角形

    目录 1 什么是仿射变换? 2 使用OpenCV进行三角形仿射变换 2.1 定义输入和输出 2.2 计算边界框 2.3 裁剪图像和更改坐标 2.4 计算仿射变换矩形 2.5 应用仿射变换到三角形 2. ...

  5. Java读取文件后文件被占用

    Java读取文件响应后文件一直被占用问题 原因: 由于是封装的函数,请求和响应对象都是 形参地址 虽然在此函数里关闭了输出流,但是由于有返回值,调用未结束,输出流无法提前关闭 解决: 1:调用函数后, ...

  6. 每个Java程序员都必须知道的四种负载均衡算法

    前言 一般来说,我们在设计系统的时候,为了系统的高扩展性,会尽可能的创建无状态的系统,这样我们就可以采用集群的方式部署,最终很方便的根据需要动态增减服务器数量.但是,要使系统具有更好的可扩展性,除了无 ...

  7. 1.5万字总结 Redis 常见面试题&知识点

    以下内容来源于于我开源的 JavaGuide (Java学习&&面试指南,Github 130k star,370人共同参与爱完善), 万字总结,质量有保障! 这篇文章最早写于2019 ...

  8. SQL29 计算用户的平均次日留存率

    SQL29 计算用户的平均次日留存率 困难 通过率:48.58% 时间限制:1秒 空间限制:256M 描述 题目:现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率.请你取出相应数据. 示例 ...

  9. LIS求解(包括优化)

    首先,让我来看看LIS问题 Description 一个数的序列 bi,当 b1 < b2 < ... < bS 的时候,我们称这个序列是上升的.对于给定的一个序列(a1,a2,.. ...

  10. 【RocketMQ】消息拉模式分析

    RocketMQ有两种获取消息的方式,分别为推模式和拉模式. 推模式 推模式在[RocketMQ]消息的拉取一文中已经讲过,虽然从名字上看起来是消息到达Broker后推送给消费者,实际上还是需要消费向 ...