命令源码文件

包是有源码文件组成,源码文件分为三种,库源码文件,命令源码文件,测试源码文件

命令源码文件

定义:命令源码文件是程序的原型入口,是每个可独立运行的程序必须拥有的,我们可以通过构建和安装生成对应的可执行文件,后者一般与该命令源码文件的直接父目录同名

下面演示如何创建命令源码文件和执行该源码文件

创建一个文件夹 main

创建一个源码文件main.go

package main

import "fmt"

func main(){
    fmt.Println("hello world")
}

在命令行输入命令 go run main.go

1594482-7b6408030d19059d
image.png

千万注意一点 对于一个独立程序而言,命令源码文件只能有一个,如果有与命令源码同包的源码文件,应该声明属于main包

命令源码文件怎么接受参数

go 语言中用于接受和解析命令的参数的包叫做flag

flag.StringVar(&name,"name","everyone","the greenting object")

参数1 存储该命令参数的值的地址
参数2 指定该命令参数的名称
参数3 如果没有输入命令值,此值将会成为默认值
参数4 该命令的简短说明

var name = flag.String("name","everyone","the greenting object")

这个方法和上面的最大区别在于它会自动分配一个内存地址存储参数值的地址

flag.parse() 用于正确解析命令参数,并把它的值赋值给相应的变量

注意 这个函数的调用的时机,必须在所有命令参数存储体的声明和设置之后,并且在读取任何命令参数值之前进行

正因为如此,我们组好把flag.parse() 放在main 函数第一行

package main

import (
    "fmt"
    "flag"
)
var name string
func init() {
    flag.StringVar(&name,"name","everyone","这个是获取命令输入参数的")
}

func main(){
    flag.Parse()
    fmt.Printf("hello world, %s --",name)
}
怎么运行命令源码文件时传入参数呢?
go run main.go -name="xj"
1594482-ba8c12b29117c08e
image.png

命令缺省呢?

go run main.go
1594482-2174ced837607321
image.png

查看命令说明

go run main.go -help
1594482-5f57956bf8ee6e41
image.png
/var/folders/gk/zc__29js08g1g03xrzgl8m1m0000gn/T/go-build470567012/command-line-arguments/_obj/exe/main

这个是go run 命令构建上述命令源码文件临时生成的可执行文件

下面是完成的构建过程

1594482-f00d4da99e6a789d
image.png

附赠一个安装教程

既然有很多其他编程语言可以做同样的工作,如 Python,Ruby,Nodejs 等,为什么要选择 Golang 作为服务端编程语言?

以下是我使用 Go 语言时发现的一些优点:

并发是语言的一部分(译注:并非通过标准库实现),所以编写多线程程序会是一件很容易的事。后续教程将会讨论到,并发是通过 Goroutines 和 channels 机制实现的。
Golang 是一种编译型语言。源代码会编译为二进制机器码。而在解释型语言中没有这个过程,如 Nodejs 中的 JavaScript。
语言规范十分简洁。所有规范都在一个页面展示,你甚至都可以用它来编写你自己的编译器呢。:smile:
Go 编译器支持静态链接。所有 Go 代码都可以静态链接为一个大的二进制文件(译注:相对现在的磁盘空间,其实根本不大),并可以轻松部署到云服务器,而不必担心各种依赖性。
安装
Golang 支持三个平台:Mac,Windows 和 Linux(译注:不只是这三个,也支持其他主流平台)。你可以在 https://golang.org/dl/ 中下载相应平台的二进制文件。(译注:因为众所周知的原因,如果下载不了,请到 https://studygolang.com/dl 下载)

Mac OS
https://golang.org/dl/ 下载安装程序。双击开始安装并且遵循安装提示,会将 Golang 安装到 /usr/local/go 目录下,同时 /usr/local/go/bin 文件夹也会被添加到 PATH 环境变量中。

Windows
https://golang.org/dl/ 下载 MSI 安装程序。双击开始安装并且遵循安装提示,会将 Golang 安装到 C:\Go 目录下,同时 c:\Go\bin 目录也会被添加到你的 PATH 环境变量中。

Linux
https://golang.org/dl/ 下载 tar 文件,并解压到 /usr/local。

请添加 /usr/local/go/bin 到 PATH 环境变量中。Go 就已经成功安装在 Linux 上了

接着一篇解析讲解

如何自定义命令源码的说明

给 flag.Usage 重新赋值即可更改

go run main.go -help

原始的查看说明


1594482-1661d6195b86cb4f
image.png

下面我们重写flag.Usage

func main(){
    flag.Usage = func() {
        fmt.Fprintf(os.Stderr,"这个是重写后的参数说明 %s","question")
        flag.PrintDefaults()
    }
    flag.Parse()
    fmt.Printf("hello world, %s --",name)
}

执行上面相同的命令

1594482-803d79f163ef4a08
image.png

继续探讨

flag.String 和flag.StringVar flag.Parse 等等,其实是调用了flag.CommandLine 变量的对应方法,flag.CommandLine相当于默认的命令参数容器,所以对flag.CommandLine 重新赋值,可以更深层次的定制当前源码文件的参数使用说明

在init 方法的开头重新定义commandLine

func init() {
    flag.CommandLine = flag.NewFlagSet("",flag.ExitOnError)
    flag.CommandLine.Usage = func() {
        fmt.Fprintf(os.Stderr,"commandLine.Usage %s","question")
        flag.PrintDefaults()
    }
    flag.StringVar(&name,"name","everyone","这个是获取命令输入参数的")
}

flag.ExitOnError 是flag 包中定义的常量 告诉菜蔬容器,当命令后跟 --help 或者参数设置不正确的时候,当打印参数使用说明后已状态码2结束当前程序

1594482-7dda0bce10069fa0
image.png

我们把参数换成flag.PanicOnError 告诉它程序执行完成后,抛出一个恐慌

func init() {
    flag.CommandLine = flag.NewFlagSet("",flag.PanicOnError)
    flag.CommandLine.Usage = func() {
        fmt.Fprintf(os.Stderr,"commandLine.Usage %s","question")
        flag.PrintDefaults()
    }
    flag.StringVar(&name,"name","everyone","这个是获取命令输入参数的")
}

执行命令 go run main.go -help

1594482-4ba0f59e82d8aa22
image.png

自己创建命令参数容器

package main

import (
    "fmt"
    "flag"
    "os"
)
var name string
var customLine = flag.NewFlagSet("",flag.ExitOnError)
func init() {
    customLine.StringVar(&name,"name","everyone","这个是获取命令输入参数的")
}

func main(){
    customLine.Parse(os.Args[1:])
    fmt.Printf("hello world, %s --",name)
}
1594482-aa4d28314a7dbca9
image.png
MATLAB源代码MATLAB源码大集合220MB上千个源码文件: 2013全国大学生数学建模B题matlab代码.rar 802.11a OFDM MATLAB仿真代码!(推荐).rar MATLAB DCT水印源程序代码.rar MATLAB GUI 实例.rar matlab GUI实例.rar MATLAB GUI实现动态画图曲线的源程序代码.rar matlab.rar matlab7.0从入门到精通-光盘程序.rar Matlab_车牌识别.zip MATLAB中colorbar的设置 源程序代码.rar matlab中文字符的识别代码.rar MATLAB中的基本语法和语句示例代码.rar MATLAB使用欧拉Euler法求解微分方程组 源程序代码.rar MATLAB光通过三稜镜色散动画.rar Matlab十大算法源代码.rar Matlab图像处理与界面编程宝典源码.rar matlab图像处理代码.rar MATLAB图像处理实现直线识别(拟合角平分线).rar MATLAB图像处理实现螺纹识别 源程序代码.rar MATLAB图像配准程序.rar MATLAB在数学建模中的应用(上下 源程序).rar MATLAB夜间车牌识别程序.rar MATLAB实现不同插值方法的GUI界面设计 源程序代码.rar MATLAB实现偏微分方程的差分计算 源程序代码.rar MATLAB实现图像去噪 滤波 锐化 边缘检测.rar matlab实现图像拼接的代码.rar MATLAB实现学生成绩查询系统 源代码程序(1).rar MATLAB实现学生成绩查询系统 源代码程序.rar MATLAB实现灰度预测模型的源代码.rar MATLAB实现线性拟合和相关系数 源程序代码.rar matlab实现视频中动态目标跟踪.rar matlab实用程序300例.rar MATLAB寻找素数的源程序代码.rar MATLAB小波分析—张德丰(代码).rar MATLAB建模 人口增长模型 源程序代码.rar MATLAB文字连通域源程序代码.rar MATLAB智能算法30个案例分析 源代码.7z MATLAB求解非线性方程组 fsolve源程序代码.rar MATLAB生成Gif图片程序源代码.rar MATLAB绘制 维维安尼Viviani曲线 源代码程序.rar MATLAB计算粒子速度分布 源程序代码.rar MATLAB设计的简单滤波器程序源代码.rar Matlab语音信号滤波程序.rar matlab通信工程仿真源码(张德丰等编著).zip Matlab金融程序汇总.rar MATLAB霍夫曼Huffman编码译码GUI界面设计 源程序代码.rar mean+shift+tracking.rar MIMO-OFDM(simulinkANDmatlab).rar Motion_Detection.rar music_spectrum.rar OpenSURF_version1c.zip targettrackingusingkalman.rar VC++图像处理与识别实用案例精选.rar zhuantai.rar zxymath_matlab_program.doc 《MATLAB 7.0编程基础基础》源程序.rar 《MATLAB 神经网络43个案例分析》源代码&数据.rar 《MATLAB程序设计教程》源代码-2660.rar 《图像分割中常用的水平集方法的matlab源代码》.zip 【MATLAB GUI设计学习手记】源代码.rar 国外的车牌识别程序.rar 图像分割算法的Matlab源程序matlab.zip 图像压缩.rar 图像处理.rar 图像处理源程序.rar 图像复原matlab程序.rar 图像形态学处理.rar 图像融合+源代码+matlab.rar 图像融合程序代码.rar 图像识别.rar 图像配准算法.rar 图论算法及其MATLAB实现(全书+源代码).zip 基于Matlab的多功能通信信号源仿真.rar 基于仿射变换的数字图象置乱技术 MATLAB源程序代码.rar 完整的QPSK-MSK-QAM-OFDM调制解调m程序.rar 实验心得总结.rar 拉格朗日插值 MATLAB源程序代码.rar 指纹识别的matlab源码.rar 指纹识别的matlab源码.zip 掌握和精通matlab之gui设计.rar 数字信号处理. 理论、算法与实现(胡广书)的MATLAB程序.rar 文字图像识别.rar 牛顿Newton插值 MATLAB源程序代码.rar 现代通信系统(MATLAB版) 源码.zip 用MATLAB对两幅图片进行图像匹配.rar 电滤波效果查看器GUI设计--浙江
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值