一、Go语言简介

Go语言既可以到达静态编译语言的安全和性能,又可以高效开发。
1、从C语言继承了很多理念,包括表达式的语法、控制结构、基础数据类型、参数传值、指针等。
2、引入了包的概念,GO的一个文件都要归属一个包
3、垃圾回收机制,内存自动回收
4、天然并发(利用goruntine,实现大并发处理,高效利用多核)
5、吸收了管道通信机制,go特有的管道channel
6、函数可以返回多个值
7、新的创新,例如切片slice、延时执行defer等
Golang官网:https://go.dev
Golang中文API网站:https://studygolang.com/

二、第一个Go程序

编译
go build hello.go
运行
hello.exe
直接执行
go run hello.go

package main//
import "fmt"func main() {fmt.Println("hello world")
}

三、Go程序开发的注意事项

注意事项
1、GO源文件以go结尾
2、Go应用程序的执行入口是main方法
3、Go语言严格区分大小写
4、Go方法由一条条语句构成,每个语句后不需要分号(Go语言会在每行后自动加分号),这也体现了Golang的简洁性
5、Go编译器是一行一行进行编译的,因此一行接卸一个语句,不可以多条语句写在同一行
6、Go语言定义的变量或者import的包,如果没有找到,代码不能编译通过
7、大括号都是成对出现的,缺一不可

四、Go语言的变量

package mainimport ("fmt""unsafe"
)func main() {printi()fmt.Println("hello world")
}//申请全局变量
var q1 = 1
var q2 = 1
var q3 = 1var (q11 = 1q22 = 1q33 = 1
)func printi() {//第一种定义变量 指定变量类型,声明后不赋值则用默认值var name int = 1//第二种自行判断 根据值自行判断变量类型var num = 10.11fmt.Println(unsafe.Sizeof(name))//第三种 省略var 省略var,:=左侧的变量不应该是已经声明过的变量age := 18//使用变量fmt.Println(name, num, age)//多个变量申请var n1, n2, n3 intfmt.Println(n1, n2, n3)//多个变量申请var n11, n22, n33 = 1, 2, 3fmt.Println(n11, n22, n33)n111, n222, n333 := 1, 2, 3fmt.Println(n111, n222, n333)}

变量使用注意事项
1、变量表示内存的一个存储区域
2、该区域有自己的名称(变量名)和类型(数据类型)
3、Golang变量使用的三种方式
第一种,指定变量类型,声明后不赋值则用默认值
第二种,根据值自行判断变量类型
第三种,省略var,:=左侧的变量不应该是已经声明过的变量
4、多变量声明,一次性声明多个变量
5、该区域的数据值可以在同一类型范围内不断变化
6、变量在同一个作用域内不可以重名
7、变量=变量名+值+数据类型
8、Golang的变量如果没有赋初值,编译器会默认使用初值

在Go中函数以外的变量就是全局变量

五、数据类型

基本数据类型数值型整数类型(int,int8,int16,int32,int64,uint,uint8,uint16,uint32,uint64,byte) 默认值0uint无符号 int有符号浮点类型(float32,float64) 默认值0浮点数存放形式为符号位+指数位+尾数位尾数部分可能丢失,造成精度损失字符型(byte存单个字母字符)如果我们保存的字符在ASCII表,则保存到byte如果保存的字符的对应值大于255,可以考虑使用int类型保存如果需要按照字符的方式输出,需要格式化输出%c布尔型(bool) 默认值false字符串(string) 使用的UTF-8编码 默认值""字符串赋值了不可修改双引号和反引号两种表示形式反引号(``)将字符串的原生形式输出,不会进行转义用加号实现字符串的拼接
派生/复杂数据类型指针(pointer)数组结构体(struct)管道(Channel)函数(也是一种类型)切片(slice)接口(interface)map

1、Golang整数类型分为有符号和无符号两种 大小与系统有关
2、Golang的类型默认为int类型
3、在程序中查看某个变量字节大小和数据大小
fmt.Println(unsafe.Sizeof(name))
4、Golang程序中整型变量在使用时采用保小不保大的原则,保证程序运行的情况下,尽量使用空间较少的数据类型
5、bit是计算机中最小的存储单位,byte是基础存储单元

六、Golang基本数据类型的转换

Go在不同类型的变量之间赋值需要进行显示转换,不能自动转换
基本语法T(v) T是数据类型 v是要转换的数据 意思是将v转换为T类型

func transformdata() {var i int32 = 100var name = float32(i)fmt.Print(name)}

1、Go数据类型转换,可以从低精度转到高精度
2、被转换的是变量存储的数据,变量本身的数据类型没有发生变化
3、在转换中int64转int8不会报错但是会溢出,和我们预期的结果不一样

格式:通用%v	值的默认格式表示%+v	类似%v但输出结构体会添加字段名%#v	值的Go语法表示%T	值的类型的Go语法表示%%	百分号布尔%t 单词true或false整数%b	二进制%c	对应的unicode码值%d	十进制%o	八进制%q	对应单引号括起来的go语法字符值,必要时会采用安全的转义符表示%x	十六进制	小写abc%X	十六进制 大写ABC%U	unicode格式浮点数与复数%b	无小数部分、二进制指数的表示%e	科学计数法 小写e%E	科学计数法 大写E%f	有小数部分但是无指数部分%F	等价于%f%g 根据实际情况采用%e或%f%G 根据实际情况采用%E或%F字符串%s	直接输出字符串或字节数组

基本数据类型和string类型的转换

func transformString() {var age int = 10/*方法一参数需要和表达式的类型匹配函数会返回转换后的字符串*/var string1 = fmt.Sprintf("%d", age)fmt.Println(string1)//	方法二 strconv函数 10代表小数保留的位数var num1 int = 99var str = strconv.FormatInt(int64(num1), 10)fmt.Println(str)// 方法三 Itoa函数将int转成stringvar num2 int=123str =strconv.Itoa(num2)fmt.Println(str)}

string数据类型 转基本数据类型
如果转换失败,则返回默认值

使用strconv包的函数进行转换
ParseBool(value bool,error)
ParseFloat()
ParseInt()
ParseUint()func datatoString() {var str string = "true"var b bool//1、strconv.ParseBool(str) 函数会返回两个值//2、只想获取到value bool 不想获取err 所以用_忽略b, _ = strconv.ParseBool(str)fmt.Printf("%T %v", b, b)var str1 string = "123"var num1 int64//第一个参数是字符串 第二个参数是十进制 第三个参数是位数num1, _ = strconv.ParseInt(str1, 10, 64)fmt.Printf("%d,%T", num1, num1)var str2 string = "123.123"var num2 float64//第一个参数是字符串 第二个参数是十进制 第三个参数是位数num2, _ = strconv.ParseFloat(str2, 64)fmt.Printf("%d,%T", num2, num2)
}