Go语言学习
0. 编程快捷手法
多选之后:shift+tab整体左移 tab整体右移
1. Go语言前瞻
就业方向:1)区块链研发工程师,2)Go服务器、游戏软件工程师,3)Golang分布式/云计算软件工程师。应用领域:区块链;美团后台流量支撑程序(支撑后台流量:排序推荐搜索等,提供负载均衡,条件分流,统计运行指标);云计算、云服务
为什么选择Go语言:1)计算机硬件更新频繁,不能合理利用多核多CPU的优势。2)软件系统复杂度越高,缺乏一个足够的简洁高效的编程语言【现有编程语言风格不统一,计算能力不够,不够处理大并发】。3)运行速度快编译速度慢,存在内存泄漏等困扰。
Go语言的特点:1)既能够达到静态编译语言的安全性能,有达到动态语言开发维护的高效率。2)继承C语言的很多理念包括表达式语法,控制结构,基础数据类型,参数传值,指针等等。3)引入包的概念用于组织格式,Go语言都要归属于一个包。4)垃圾回收机制,内存自动回收。5)天然的并发【goroutine(轻量级线程)实现大并发处理,高效利用多核;基于CPS并发模型(communicating sequential processes)】6)吸收了管道通信机制,形成独有的管道channel,实现不同goroutine之间相互通信。7) 函数返回多个值。
//写函数同时返回和和差
func getSumAndSub(n1 int, n2 int) (int, int) {
sum := n1 + n2
sub := n1 - n2
return sum, sub
}
8)切片slice,延时执行defer等创新。
2. Go及Goland安装流程及配置
略
3. Go基本了解
官方编程指南:文档 - Go 编程语言 (google.cn)
标准库文档:Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国 (studygolang.com)
Go携带包包所在地址:…\go1.18.8.windows-amd64\go\src
Golang执行流程分析
存在两种执行流程:1)编译执行分开处理:.go—编译---->可执行文件(.exe)-----运行----->结果
2)编译执行一并处理.go -------go run------->结果
两种执行流程的区别:1)可执行文件在没有go环境的机器上仍然能够执行。2)go run 需要go环境。3)编译时编译器会将所依赖的库文件包含在可执行文件中导致exe文件变大。
Go程序开发注意事项:1)源文件必须以.go为拓展名。2)应用程序的执行入口是main函数。3)严格区分大小写。4)语句不需要分号【内部自动添加】。5)一行行编译,因此多条语句不能写在同一行。6)定义的变量或者import的包没有使用到代码不能编译通过。
Go语言的转移字符::\t:制表符,用于排版 ;\n:换行符 ;\:\因此在输入文件路径是要改成\\;\":表示一个“用于输出引号 ; \r:回车
fmt.Println("HelloWorld~~~")
fmt.Println("Hello\tWorld") //制表符\t
fmt.Println("F:\\Goland_place") //输出\\
fmt.Println("xzc says \"helloworld\"") //输出”“
fmt.Println("xzc123456\rxzc456") //\r回车,从当前行的最前面开始输出,覆盖掉以前的内容相同长度的内容
fmt.Println("姓名\t年龄\t住址\t籍贯\nxzc\t20\t20\t北京")
/*****输出*******/
Hello World
F:\Goland_place
xzc says "helloworld"
xzc456456
姓名 年龄 住址 籍贯
xzc 20 20 北京
//行注释
/*块注释*/
4. Go编程
4.1 变量
变量的声明,初始化和赋值基本语法:【var 变量名 数据类型 = 值】
程序中+号的使用:1)两边都是数值型,则做加法运算。2)两边都是字符串,则做字符串拼接。
注意事项:
1)变量表示内存中的一个存储空间,该空间由自己的名称和类型。2)变量使用的三种方式:a.指定变量类型,不赋值则使用默认值;b.根据值自行判断变量类型;c.省略var,:=左边的变量不能是已经声明过的。3)多变量声明。
/*go的变量使用方式*/
func bianLiang() {
/*定义变量+声明变量+赋值使用*/
//一. 不赋值输出默认值 ,int的默认值为0
var i int
fmt.Println("变量i=", i)
//二. 类型推导:自行判断
var num = 10.10
fmt.Println("变量num=", num)
//三. 省略var,使用:=
name := "tom" //等价于var name string name = "tom"
fmt.Println("变量name", name)
/*多变量声明*/
//一次性声明相同变量
var n1, n2, n3 int
fmt.Println("变量n1,n2,n3分别是", n1, n2, n3)
//声明不同变量,直接赋值
//x1, x2, x3 := 100, "tom", 10.11
//var x1, x2, x3 = 100, "tom", 10.11
var (
x1 = 100
x2 = "tom"
x3 = 10.11
)
fmt.Println(x1, x2, x3)
}