Go语言进阶,交叉编译,数字与字符的转换,多变参数
对于编译在 Go语言零基础入门,从安装到运行代码 这篇文章里面有提到,这里详细说明下,因为在不同编译器、不同操作系统和系统架构上的编译都是有区别的,目前主流的OS就是Linux、Windows、Mac等
test.go
package mainimport ("fmt"
)func main() {fmt.Println("你好,寅恪光潜!")
}
编译
由于Go语言是编译型语言,所以我们在运行上面这个go文件的时候,都会进行编译。
C:\Users\Tony>go run test.go
你好,寅恪光潜!
这里看起来好像没有编译,其实也已编译,比如在Windows下面,编译之后的文件将存放在一个临时目录下面,我们想要查看具体在哪的话,加上参数--work
C:\Users\Tony>go run --work test.go
WORK=C:\Users\Tony\AppData\Local\Temp\go-build91450183
你好,寅恪光潜!
然后就可以在go-build91450183目录里面找到test.exe文件,cmd进入此目录的命令行运行test也将显示上述结果,当然了,还有就是前面介绍的build来显式编译,将在当前目录生成一个test.exe文件:
C:\Users\Tony>go build test.goC:\Users\Tony>test
你好,寅恪光潜!
Go支持交叉编译,比如说可以在Linux平台生成Windows使用的test.exe可执行文件。
#CGO_ENABLED=0表示不使用CGO,其中OS中的darwin表示Mac系统,GOARCH表示平台的架构,目前市场基本都是amd64也就是x64对应的64位操作系统,当然随着物联网的发展还有更多嵌入式系统arm,比如Android、IOS、TIZEN等
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.go
然后想在wsl下安装go来看下linux下生成exe文件,发现密码忘记了。
wsl下面安装Go
sudo apt install golang-go
然后需要管理员身份,忘记密码了,需要重置密码:
管理员身份运行PowerShell,直接root身份进入设置新密码
PS C:\WINDOWS\system32> wsl -u root
root@TonyComputer:/mnt/c/WINDOWS/system32# passwd tony
New password:输入新密码
Retype new password:再次确认
passwd: password updated successfully
数字与字符的转换
数字转换成字符或者字符转换成数字,其中数字转字符比较简单,直接string就可以,对于字符串的话需要使用一个特殊的数组rune,对于字符或字符串转换成ASCII码,在前面的一篇文章中出现过rune,有兴趣的可以了解下:Go语言解决孔明棋的玩法(加深对for循环的认识)
package mainimport ("fmt"
)func main() {num := 65str := string(num) // Avar a1 rune = 'D' // 68// 如果是很多的字符或特殊字符,使用反单引号a2 := []rune(`BaC好`)fmt.Printf("%v, %v,%v,%T\n", str, a1, a2, str) // A, 68,[66 97 67 22909],string//当然对于字符来说使用byte字节数组也是可以的,这个和rune的区别就是中文的时候占用的字节数不同a3 := []byte("ab好")fmt.Printf("%v", a3) //[97 98 229 165 189]
}
另外,上面说到ASCII码一般是针对英文字母,数字和少部分符号,256个字符,所以其他特殊符号或中文之类需使用rune要好点。
多变参数
平时大多接触的都是类似func test(a int) int {}这样的名称加类型,这里介绍的一种是名称后面带三个点的形式,如下:
package mainimport "fmt"func add(args ...int) int {sum := 0for _, arg := range args {sum += arg}fmt.Printf("%T", args) //[]intreturn sum
}func main() {fmt.Println(add([]int{1, 2, 3, 4, 5}...)) //15
}
其中args的类型是切片类型,数组是可变的,需要注意的是如果写成:fmt.Println(add([]int{1, 2, 3, 4, 5})) 将报错:
cannot use []int{…} (value of type []int) as type int in argument to add
这个和[]int类型还是有点区别。所以当写成这样:func add(args []int) int {} 那么调用时也只能是 fmt.Println(add([]int{1, 2, 3, 4, 5}))
如果参数类型指定了数组的长度,如:[5]int,那么调用的时候也需要指定,要一样才可以。
数组是值类型不是引用类型,所以赋值的时候,是一个拷贝,既然是拷贝,那么修改新变量,是不会修改到原变量的值。
func main() {a := [5]int{1, 2, 3, 4, 5}b := ab[1] = 11fmt.Println(a, b)
}
// [1 2 3 4 5] [1 11 3 4 5]
但是,如果是切片呢?那就成了引用!这个需要注意。
func main() {a := [5]int{1, 2, 3, 4, 5}b := a[1:4]b[1] = 11fmt.Println(a, b)
}
//[1 2 11 4 5] [2 11 4]
可以看到数组a中的值也同样被更改了,同步更新了,因为切片是引用,都指向一个地址。
Go语言进阶,交叉编译,数字与字符的转换,多变参数相关推荐
- c语言使用iconv函数实现字符编码转换
c语言使用iconv函数实现字符编码转换 linux下提供了iconv库来实现字符编码转换,先介绍下命令行: iconv [-f encoding] [-t encoding] [inputfile ...
- c语言同时代表数字和字符,C语言实现将字符和数字串到一起
C语言实现将字符和数字串到一起 C 语言 是相对比较低级的一种语言,所有的数据都是按照 整数.浮点数.数组.指针 一类的数据结构来表示的. 相比之下,较高级的语言中 数据类型之间的转换就更自由一些. ...
- c++语言转换为字符串函数,C++字符编码转换函数
1.MultiByteToWideChar 函数功能:该函数映射一个字符串到一个宽字符(unicode)的字符串.由该函数映射的字符串没必要是多 字节字符组. 函数原型: int MultiByteT ...
- C++中数字和字符的转换
参考:http://blog.csdn.net/xw20084898/article/details/21939811 http://nnssll.blog.51cto.com/902724/1982 ...
- C语言 数字与字符/字符串的相互转换
C语言 数字与字符/字符串转换 数字转字符 ASCII码操作 只能将数字转为字符,方法为将要转换的数字直接加上数字0的ASCII码,如9转换为9 + '0' 数字转字符串 itoa函数 itoa函数不 ...
- 数字、字符和字符串之间的相互转换
在数字和字符之间转换 一.整数转字符 1.在后面加'0'即可,如:'1'+'0' 这样做可行是因为字符0到字符9在ascii编码时是连续的,字符0的ascii值是48,字符1的ascii值是49,其他 ...
- C语言进阶——字符函数和字符串函数
作者:敲代码の流川枫 博客主页:流川枫的博客 专栏:C语言从入门到进阶 语录:Stay hungry stay foolish 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器--牛客 ...
- 【C语言进阶深度学习记录】二十六 C语言中的字符串与字符数组的详细分析
之前有一篇文章是学习了字符和字符串的,可以与之结合学习:[C语言进阶深度学习记录]十二 C语言中的:字符和字符串 文章目录 1 字符串的概念 1.1 字符串与字符数组 1.2 字符数组与字符串代码分析 ...
- C语言 字符串分类统计 输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数
C语言 字符串分类统计 输入一行字符,分别统计出其中英文字母.数字.空格和其他字符的个数 题目: 输入一行字符,分别统计出其中英文字母.数字.空格和其他字符的个数 样例输入: aklsjflj123 ...
最新文章
- 深入理解PHP原理之Opcodes
- python字符串命名_从输入字符串到命名复制python 2.7
- Google开源OCR项目Tesseract训练(自己训练的记录,未成功)
- Deep Learning for Computer Vision with Caffe and cuDNN
- docker 不挂断创建容器
- redis的set类型
- 服务器常规维修与判断方法,服务器常规维修与判断方法88119.doc
- Centos上禁用 rpcbind 111端口
- 使用MonoDevelop开发跨平台的应用程序
- 【转】vue双向绑定原理分析
- c软件查表获得电量代码_energy.c 源代码在线查看 - 基于单片机的多费率电能表源程序 资源下载 虫虫电子下载站...
- 股票什么时候买入什么时候卖出适合?
- Bluetooth 蓝牙介绍(四):低功耗蓝牙BLE Mesh网络Ⅱ —— Mesh网络
- Jsp中9大内建对象
- 南非世界杯-我在南非(二)
- 解决git bash中无法粘贴的问题
- 前端跨域问题—解决Firefox浏览器显示“已阻止载入混合活动内容”的方法
- static应用知识:代码块
- 计算机网络技术综合题大全
- 京东店铺的运营爆款打造