**#注:本文章越过go的安装与环境配置。 **
1.go的初始认识
特点:
- 开源的编程语言
- 简洁
用来做什么呢?
- 搭载web服务器,存储集群或类似用途的巨型中央服务器。
- 游戏服务端的开发很不错
2.编写第一个简单的Hello word
package main//定义包名,必须在源文件中非注释的第一行指明这个文件属于那个包
//表示一个可独立执行的程序,每个go应用程序都包含一个名为main的包
import "fmt"
//fmt实现了格式化IO的函数
func main(){
//定义了程序的入口函数(如果有init()函数则会先执行该函数)
fmt.Println("Hello world")
}
注:func main(){
}中的 { 不能单独出现在一行
3.基础语法
3.1变量
- 变量时计算机语言中能存储计算结果或能表示值抽象概念
- 变量 :利用变量将数据的内存地址保存
- 变量必须经过声明才可以使用,且声明后必须使用
- 全局变量允许声明但不使用
- 声明变量的格式
var 变量名 变量类型
例:
var name string
var age int
var isOk bool
- 批量申明
var (
a string
b int
c bool
d float32
)
- 变量的初始化
- go语言在声明变量的时候,对变量的内存区域进行初始化操作
整型,浮点变量的初始默认值为0
字符串变量的默认值为空字符串
布尔型变量默认值false
切片,函数,指针变量的默认值为nil
- 变量初始化的标准格式`
var 变量名 类型 = 表达式
//例
var name string = "ashui"
var age int = 22
//一次初始化多个变量
var name, age = "ashui", 22
- 短变量声明
- 可用 := 声明并初始化变量
- 函数名和左边等号之间要用空格
- 如果变量已经用var声明过了,再用:=声明就会出现编译错误
ass := 1相当于
var ass int
ass = 1
package main
import("fmt")
var m = 100
func main(){
n := 10
m := 200
fmt.Println(m, n)
}
- 匿名变量
- 多重赋值时,若果想忽略某个值,用匿名变量
- 匿名变量用下划线—表示
package main
import(
"fmt"
)
func foo() (int, string){
return 10, "Q1mi"
}
func main(){
x, _ := foo()
_, y := foo()
fmt.Println("x=", x)
fmt.Println("y=", y)
}
输出>>>
x= 10
y= Q1mi
- 函数外的每个语句必须以关键词开始(var,const, func)
- := 不能使用在函数外
- —多用于占位,表示忽略值
c1:格式化字符串 - fmt.Sprintf (根据格式化参数生成格式化的字符串,并返回该字符串)
- 语法
fmt.Sprintf(格式化样式, 参数列表)
package main
import (
"fmt"
)
func main(){
var stockcode = 123
var enddata = "2020-12-31"
var url = "Code=%d & endData=%s"
var target_url = fmt.Sprintf(url, stockcode, enddata)
fmt.Println(target_url)
}
注:fmt.Sprintf()函数的返回值要先保存在一个变量中,在输出
- fmt.Printf()
package main
import (
"fmt"
)
func main(){
var stockcode = 123
var enddata = "2020-12-31"
var url = "Code=%d&endData=%s"
fmt.Printf(url, stockcode, enddata)
}
- 以上结果均为
Code=123&endData=“2020-12-31”
3.2 常量
- 把变量的var换成const
- 常量在定义的时候必须赋值
- c2.值类型和引用类型
- - 值类型:int , float , bool , string他们的变量直接指向内存中的值
- 使用=将一个变量的值复制给另一个变量,实际上时拷贝了该值
- 值类型变量的值储存在堆中
- 一个引用类型的变量r1存储的时r1的值所在的内存地址
- 这个内存地址为指针
3.2.1iota
- iota是go语言的常量计数器,只能用于常量表达式
- iota在const关键字出现时被重置为0
- iota能简化定义,在定义枚举时很有用
- 使用下划线—跳过某些值
func main(){
const(
n1 = iota
n2
_
n3
)
fmt.Println(n1, n2, n3)
输出结果:0 1 3
- iota声明中间插队
func main(){
const(
n1 = iota
n2
_
n3
)
const n4 = iota
fmt.Println(n1, n2, n3, n4)
}
输出:0 1 3 0
- 定义数量级
- 1<<10(表示将1的二进制表示向左移10位,由1变成了1000000000,也就是十进制的1024)
- 2<<2 2的二进制表示向左移2位,由10变成了1000,也就是十进制的8
func main(){
const(
_ = iota
KB = 1 << (10 * iota)
MB = 1 << (10 * iota)
)
fmt.Println(KB, MB)
}
输出:1024 1048576
- 多个iota定义在一行
func main(){
const(
a, b = iota + 1, iota + 2
c, d
e, f
)
fmt.Println(a, b, c, d, e, f)
}
输出:1 2 2 3 3 4
4.数据类型
- 数据类型的出现是为了把数据分成所需内存不同的数据
Go语言中的基本数据类型包括:
1.布尔型(bool): 只有true和false两个值
2. 整型(int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64): 表示整数值,其中int和uint的大小取决于底层计算机的字长
3. 浮点型(float32、float64): 表示小数值
4. 复数型(complex64、complex128): 由实数部分和虚数部分组成
5. 字符串型(string): 表示文本字符串
6. 字节数组(byte、rune): byte表示ASCII字符或二进制数据,rune表示Unicode字符除了以上基本数据类型,还有指针类型(pointer)、数组类型(array)、切片类型(slice)、字典类型(map)、通道类型(channel)等Go语言特有的数据类型。