对于编译在 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语言进阶,交叉编译,数字与字符的转换,多变参数相关推荐

  1. c语言使用iconv函数实现字符编码转换

    c语言使用iconv函数实现字符编码转换 linux下提供了iconv库来实现字符编码转换,先介绍下命令行: iconv [-f encoding] [-t encoding] [inputfile ...

  2. c语言同时代表数字和字符,C语言实现将字符和数字串到一起

    C语言实现将字符和数字串到一起 C 语言 是相对比较低级的一种语言,所有的数据都是按照 整数.浮点数.数组.指针 一类的数据结构来表示的. 相比之下,较高级的语言中 数据类型之间的转换就更自由一些. ...

  3. c++语言转换为字符串函数,C++字符编码转换函数

    1.MultiByteToWideChar 函数功能:该函数映射一个字符串到一个宽字符(unicode)的字符串.由该函数映射的字符串没必要是多 字节字符组. 函数原型: int MultiByteT ...

  4. C++中数字和字符的转换

    参考:http://blog.csdn.net/xw20084898/article/details/21939811 http://nnssll.blog.51cto.com/902724/1982 ...

  5. C语言 数字与字符/字符串的相互转换

    C语言 数字与字符/字符串转换 数字转字符 ASCII码操作 只能将数字转为字符,方法为将要转换的数字直接加上数字0的ASCII码,如9转换为9 + '0' 数字转字符串 itoa函数 itoa函数不 ...

  6. 数字、字符和字符串之间的相互转换

    在数字和字符之间转换 一.整数转字符 1.在后面加'0'即可,如:'1'+'0' 这样做可行是因为字符0到字符9在ascii编码时是连续的,字符0的ascii值是48,字符1的ascii值是49,其他 ...

  7. C语言进阶——字符函数和字符串函数

    作者:敲代码の流川枫 博客主页:流川枫的博客 专栏:C语言从入门到进阶 语录:Stay hungry stay foolish 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器--牛客 ...

  8. 【C语言进阶深度学习记录】二十六 C语言中的字符串与字符数组的详细分析

    之前有一篇文章是学习了字符和字符串的,可以与之结合学习:[C语言进阶深度学习记录]十二 C语言中的:字符和字符串 文章目录 1 字符串的概念 1.1 字符串与字符数组 1.2 字符数组与字符串代码分析 ...

  9. C语言 字符串分类统计 输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数

    C语言 字符串分类统计 输入一行字符,分别统计出其中英文字母.数字.空格和其他字符的个数 题目: 输入一行字符,分别统计出其中英文字母.数字.空格和其他字符的个数 样例输入: aklsjflj123 ...

最新文章

  1. 深入理解PHP原理之Opcodes
  2. python字符串命名_从输入字符串到命名复制python 2.7
  3. Google开源OCR项目Tesseract训练(自己训练的记录,未成功)
  4. Deep Learning for Computer Vision with Caffe and cuDNN
  5. docker 不挂断创建容器
  6. redis的set类型
  7. 服务器常规维修与判断方法,服务器常规维修与判断方法88119.doc
  8. Centos上禁用 rpcbind 111端口
  9. 使用MonoDevelop开发跨平台的应用程序
  10. 【转】vue双向绑定原理分析
  11. c软件查表获得电量代码_energy.c 源代码在线查看 - 基于单片机的多费率电能表源程序 资源下载 虫虫电子下载站...
  12. 股票什么时候买入什么时候卖出适合?
  13. Bluetooth 蓝牙介绍(四):低功耗蓝牙BLE Mesh网络Ⅱ —— Mesh网络
  14. Jsp中9大内建对象
  15. 南非世界杯-我在南非(二)
  16. 解决git bash中无法粘贴的问题
  17. 前端跨域问题—解决Firefox浏览器显示“已阻止载入混合活动内容”的方法
  18. static应用知识:代码块
  19. 计算机网络技术综合题大全
  20. 京东店铺的运营爆款打造

热门文章

  1. VIOOVI视与视的ECRS工时分析软件分享:产品单位标准工时怎么计算?
  2. 用Github和Coding双线绑定自定义域名
  3. 防止产品发布灾难的7个软件测试技巧
  4. 医疗物联网平台架构图
  5. CNN中的maxpool到底是什么原理?
  6. OA里面的公文如何用WPS打开?
  7. nginx重定向和反向代理
  8. linux查看软连接实际地址,linux 软连接怎么查看原始地址?
  9. 交换机与路由器的基础理论(第一天)
  10. 游戏配音怎能少了这些步骤