- 1. more than one character in rune literal
- 2. go run: cannot run non-main package
- 3. too many arguments to return have (error) want ()to
- 4. 字典
- 5. 时间戳
- 6. Strconv
- 7. Go语言-命令行参数(os.Args, flag包)
- 8. const关键字(常量)
- 9. Golang io.Copy()用法及代码示例
- 10. go变量大小写
- 11. Go/Golang build error: //go:build comment without // +build comment
- 12. golang 报错illegal rune literal
- 13. 更新依赖包
go:embed 的使用
简介
go:embed 是 go 1.16版本添加的新特性,可以在 go 生成的应用程序中嵌入静态文件(文件,文件夹)。部署的时候,直接扔一个二进制文件即可,不用再包含一些静态文件,考虑文件相对位置,因为它们已经被打包到生成的应用程序中了。
导入 embed 的 go 源文件可以使用 //go:embed 指令在编译时从包目录或子目录中将读取的内容转换成 string, []byte, 或者 embed.FS 类型的变量。
nil
其他语言的null
fmt.Printf()和fmt.Println()的区别
获取一个变量类型
1 | fmt.Println(reflect.TypeOf(var)) |
1 | fmt.Println("sss") |
设置代理
go env -w GOPROXY=”https://goproxy.io,direct“
go编译报错
more than one character in rune literal
在go语法中,双引号是常用的来表达字符串,如果你使用了单引号,编译器会提示出错
单引号只能包含一个字符,例如’b’ ,程序会输出98表示字符b的ascii码。
如果非要使用单引号输出必须使用string函数转换
1 | fmt.Println(string('b') ) |
go run: cannot run non-main package
Go的错误信息提示的很直接了当,main方法只能放在package main中,go run 是执行命令,必须要一个main用来调用,install可以直接编译成包文件,也可以编译出exe(如果有main函数的话)
too many arguments to return have (error) want ()to
没在函数中添加返回值
1 | func XXX() (string, error){ |
字典
1 | var XXX map[string]string |
时间戳
分别使用 time.Now 的 Unix 和 UnixNano, 来获取从 Unix 纪元起,到现在经过的秒数和纳秒数。
1 | package main |
1 | $ go run epoch.go |
Strconv
主要提供字符串和其他类型之间转换的函数。常见的比如将字符串
转换成整型, 这个可能在脚本类语言没有影响, 但在强类型语言中极其重要
字符串转整型
1 | s := "2" |
整型转字符串#
1 | i := 21111 |
FormatInt系列函数
1 | t := 12132123132 |
Go语言-命令行参数(os.Args, flag包)
os.Args
程序获取运行他时给出的参数,可以通过os包来实现。先看代码:
1 | package main |
可以看到,命令行参数包括了程序路径本身,以及通常意义上的参数。
程序中os.Args的类型是 []string ,也就是字符串切片。所以可以在for循环的range中遍历,还可以用 len(os.Args) 来获取其数量。
如果不想要输出os.Args的第一个值,也就是可执行文件本身的信息,可以修改上述程序:
1 | for idx, args := range os.Args[1:] { |
flag包
1 | package main |
flag包相比单纯的通过os.Args切片分析命令行参数,提供了更强的能力。
使用flag包,首先定义待解析命令行参数,也就是以”-“开头的参数,比如这里的 -b -s -help等。-help不需要特别指定,可以自动处理。
这里指定了两个参数,-b和-s:
1 | var b = flag.Bool("b", false, "bool类型参数") |
flag使用前,必须首先解析:
1 | flag.Parse() |
const关键字(常量)
Go语言中的常量使用关键字 const 定义,用于存储不会改变的数据,常量是在编译时被创建的,即使定义在函数内部也是如此,并且只能是布尔型、数字型(整数型、浮点型和复数)和字符串型。由于编译时的限制,定义常量的表达式必须为能被编译器求值的常量表达式。
1 | const name [type] = value |
Golang io.Copy()用法及代码示例
Golang io.Copy()用法及代码示例%E6%88%96%E5%BC%95%E5%8F%91%E9%94%99%E8%AF%AF%E4%B8%BA%E6%AD%A2%E3%80%82)
用法:
1 | func Copy(dst Writer, src Reader) (written int64, err error) |
在此,“dst”是目标,“src”是将内容复制到目标的源。
返回值:它返回复制到“dst”的int64类型的字节总数,并且还返回从src复制到dst(如果有)时遇到的第一个错误。如果复制没有错误,则返回“nil”。
go变量大小写
1 | Go语言通过首字母的大小写来控制访问权限。 无论是方法,变量,常量或是自定义的变量类型,如果首字母大写,则可以被外部包访问,反之则不可以。 而结构体中的字段名,如果首字母小写的话,则该字段无法被外部包访问 |
Go/Golang build error: //go:build comment without // +build comment
If version is lower than 1.17 – need to to update golang on new version for fix it.
Go to https://go.dev/doc/install and follow instructions for update.
go版本过低导致的,更新版本即可
yum更新go版本
1 | yum remove go |
https://blog.csdn.net/qq_29695701/article/details/82744684
golang 报错illegal rune literal
illegal这个单词报错比较常见,【不合法】,golang对引号使用还是很严格的,使用双引号包裹字符串,否则报上面那个错误。
更新依赖包
1 | go mod 更新单个包的文件 |