golang

golang type关键字使用

霸气de小男生 提交于 2019-12-05 01:34:50
type是go语法里的重要而且常用的关键字,type绝不只是对应于C/C++中的typedef。搞清楚type的使用,就容易理解go语言中的核心概念struct、interface、函数等的使用。以下我用例子代码总结描述,请特别留意代码中的注释。 //1、定义结构体 //结构体定义 type person struct { name string //注意后面不能有逗号 age int } func main() { //结构体初始化 p := person{ name: "taozs" , //注意后面要加逗号 age: 18 , //或者下面的}提到这儿来可以省略逗号 } fmt.Println(p.name) } //初始化字段不一定要全部指定,比如下面也是可以的,name默认取长度为0的空字符串 p := person{ age: 18 , } //2、类型等价定义,相当于类型重命名 type name string name类型与string等价 例子: type name string func main() { var myname name = "taozs" //其实就是字符串类型 l := []byte(myname) //字符串转字节数组 fmt.Println(len(l)) //字节长度 } 不过,要注意的是,type绝不只是用于定义一系列的别名

Golang use of .(type) outside type switch 关于参数类型

柔情痞子 提交于 2019-12-05 01:34:15
Golang 中如何获取interface参数的类型? 执行使用以下语句: fmt.Println( "type:" , v.( type )) 提示错误: use of .(type) outside type switch 正确的使用方法是必须在switch case中。 举例如下: package main import ( "fmt" ) func main() { CheckType( "tow" , 88 , "three" ) } func CheckType(args ... interface {}) { for _,v := range args { switch v.( type ) { case int : fmt.Println( "type:int, value:" , v) case string : fmt.Println( "type:string, value:" , v) default : fmt.Println( "type:unkown,value:" ,v) } } } 编译,执行 $ go build arm.go $ ./arm 结果: type:string, value: tow type:int, value: 88 type:string, value: three 来源: CSDN 作者: 翔云123456 链接:

GOlang中对flag.Prase()的疑问

落爺英雄遲暮 提交于 2019-12-05 01:33:28
最近在学习Golang中的flag库的使用,遇到了如下代码: import "fmt" var infile *string = flag.String("i", "infile", "File contains values for sorting") var outfile *string = flag.String("o", "outfile", "File to receive sorted values") var algorithm *string = flag.String("a", "qsort", "Sort algorithm") func main() { flag.Parse() if infile != nil { fmt.Println("infile =", *infile, "outfile =", *outfile, "algorithm =", *algorithm) } } 其中定义的3句接受参数的变量在flag.Prase()之前,所以我就在疑惑这样做为什么可以在调用flag.Prase()之后相应的参数会被解析到呐3个变量之上。 在百度、谷歌搜索了一圈也没啥进展,于是抱着凡事还得靠自己的心态有自习看了一遍代码! 我勒个擦,那3个变量原来是指针类型的变量= =,都怪我第一次没注意,没有留意到那个*的存在。 这样子的我的问题就迎刃而解了

golang flag 用法示例

感情迁移 提交于 2019-12-05 01:30:04
file.go package main import "flag" import "fmt" import "os" func main() { if len(os.Args) < 2 { fmt.Println("too less param") return } var ip = flag.Int("flagname", 1234, "help message for flagname") var real string flag.StringVar(&real, "dir", "this is a test","help msg for dir") flag.Parse() fmt.Println(*ip) fmt.Println(real) } go build file.go ./file -flagname 3333 -dir ccccccccccccccc //out put // 3333 // ccccccccccccccc 来源: CSDN 作者: frozen_flash 链接: https://blog.csdn.net/u011363248/article/details/19192017

golang编程之获取命令行参数及环境变量

假装没事ソ 提交于 2019-12-05 01:28:16
http://blog.chinaunix.net/uid-24774106-id-3990722.html 我们写习惯了C代码,都知道了解析输入参数argc argv,获取环境变量env,常见的C语言main函数有: int main ( int argc , char * argv [ ] , char * * envp ) 我们首先给出C语言的获取命令行参数和环境变量的代码: manu@manu - hacks : ~ / code / c / self / env$ cat env . c #include < stdio . h > #include < stdlib . h > int main ( int argc , char * argv [ ] , char * * envp ) { int i ; printf ( "there are %d input param\n" , argc ) ; printf ( "they are :\n" ) ; for ( i = 0 ; i < argc ; i + + ) { printf ( "%s\n" , argv [ i ] ) ; } printf ( "env LIST--------------------------------------\n" ) ; char * * p = envp ; for

Golang学习笔记--flag包

喜你入骨 提交于 2019-12-05 01:26:31
原文链接: http://www.cloudnoter.com/?p=131 flag包是用来处理命令参数的。总得来说,其通过将命令行标志与某一具体变量进行绑定,开发人员通过使用该变量进行业务逻辑处理。 一、FlagSet是该包的核心类型: type FlagSet struct { // Usage is the function called when an error occurs while parsing flags. // The field is a function (not a method) that may be changed to point to // a custom error handler. Usage func() name string parsed bool actual map[string]*Flag // 存放命令行中实际输入的标志映射 formal map[string]*Flag // 存放该实例可以处理的命令行标志映射 args []string // arguments after flags 存放非标志的参数列表(即标志后面的参数) exitOnError bool // does the program exit if there's an error? errorHandling ErrorHandling output

golang flag 加强版

拥有回忆 提交于 2019-12-05 01:24:48
flag plus 让flag单个标记支持多个参数 https://code.csdn.net/leezjl/flagp/tree/master 添加 flagp.StringSlice(name string, value []string, usage string) 添加 flagp.StringSliceVar(p *[]string, name string, value []string, usage string) Example b := flagp .Bool ( "b" , false, "bool" ) dirs := flagp .StringSlice ( "d" , []string{}, "需要操作的文件/目录, tab切起来" ) n := flagp .Int ( "n" , 0 , "number" ) xFiles := flagp .StringSlice ( "x" , []string{}, "需要忽略的文件/目录, tab切起来" ) flagp .Parse () flagp .Usage () fmt .Println ( "dirs = " , *dirs, "xFiles = " , *xFiles, "n = " , *n, "b = " , *b) $ go run upfl.go -b -d hehe/ xx/ -n

Golang之flag包的使用

泪湿孤枕 提交于 2019-12-05 01:22:36
1.1 flag简介 import “flag” flag包实现了命令行参数的解析。 要求: 使用flag.String(), Bool(), Int()等函数注册flag,下例声明了一个整数flag,解析结果保存在*int指针ip里: import "flag" var ip = flag.Int("flagname", 1234, "help message for flagname") 如果你喜欢,也可以将flag绑定到一个变量,使用Var系列函数: var flagvar int func init() { flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname") } 或者你可以自定义一个用于flag的类型(满足Value接口)并将该类型用于flag解析,如下: flag.Var(&flagVal, "name", "help message for flagname") 对这种flag,默认值就是该变量的初始值。 在所有flag都注册之后,调用: flag.Parse() 来解析命令行参数写入注册的flag里。 解析之后,flag的值可以直接使用。如果你使用的是flag自身,它们是指针;如果你绑定到了某个变量,它们是值。 fmt.Println("ip has value ", *ip)

golang中os包用法

大城市里の小女人 提交于 2019-12-05 01:21:58
os包中实现了平台无关的接口,设计向Unix风格,但是错误处理是go风格,当os包使用时,如果失败之后返回错误类型而不是错误数量. os包中函数设计方式和Unix类似,下面来看一下. func Chdir(dir string) error //chdir将当前工作目录更改为dir目录. func Getwd() (dir string, err error) //获取当前目录,类似linux中的pwd func Chmod(name string, mode FileMode) error //更改文件的权限(读写执行,分为三类:all-group-owner) func Chown(name string, uid, gid int) error //更改文件拥有者owner func Chtimes(name string, atime time.Time, mtime time.Time) error //更改文件的访问时间和修改时间,atime表示访问时间,mtime表示更改时间 func Clearenv() //清除所有环境变量( 慎用 ) func Environ() []string //返回所有环境变量 func Exit(code int) //系统退出,并返回code,其中0表示执行成功并退出,非0表示错误并退出,其中 执行Exit后程序会直接退出

golang中os/exec包用法

亡梦爱人 提交于 2019-12-05 01:21:44
exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout,并且利用pipe连接i/o. func LookPath(file string) (string, error) //LookPath在环境变量中查找科执行二进制文件,如果file中包含一个斜杠,则直接根据绝对路径或者相对本目录的相对路径去查找 func main() { f, err := exec.LookPath("ls") if err != nil { fmt.Println(err) } fmt.Println(f) // /bin/ls } type Cmd   //表示一个正在准备或者正在运行的外部命令 type Cmd struct { Path string   //运行命令的路径,绝对路径或者相对路径 Args []string   // 命令参数 Env []string //进程环境,如果环境为空,则使用当前进程的环境 Dir string   //指定command的工作目录,如果dir为空,则comman在调用进程所在当前目录中运行 Stdin io.Reader  //标准输入,如果stdin是nil的话,进程从null device中读取(os.DevNull),stdin也可以时一个文件