基本语法->面向接口->面向对象->函数式编程->Go语言工程化->并发编程
单任务爬虫->并发式爬虫->分布式爬虫
// a,b,c均为变量名称 3,4,"abc"均为初始值 xxx均为定义函数名
//注:这种定义类型只能同类型定义在同一行,反过来讲就是定义一个变量类型的同一行可以定义多个变量
func xxx(){
var a,b int 3,4
var c string "abc"
fmt.Println(a,b,c)
}
//输出:3 4 "abc"
// a,b,c,s均为变量名称 3,4,true,"abc"均为初始值 xxx均为定义函数名
//注:这种定义类型在同一行可以定义多个类型,Go语言自动识别定义类型
func xxx(){
var a,b,c,s = 3,4,true,"abc"
fmt.Println(a,b,c,s)
}
//输出:3 4 true "abc"
// a,b,c,s均为变量名称 3,4,true,"abc"均为初始值 xxx均为定义函数名
//注:这种定义类型在同一行可以定义多个类型,但只有在第一次定义变量才会使用 := 第二次对变量赋值直接使用 = 即可
func xxx(){
a,b,c,s := 3,4,true,"abc"
fmt.Println(a,b,c,s)
}
//输出:3 4 true "abc"
// a,b,c,s均为变量名称 3,4,true,"abc"均为初始值
//注:这种定义可以与1,2相同(定义在函数体之外)也可以用以下方法 但因为关键字原因不能在函数外使用第3种方法(:=)定义变量
.
.
.
import "fmt"
var aa=123
var bb=456
var cc=true
// 另一种方法
var (
aa = 123
bb = 456
cc = true
)
func xxx(){
fmt.Println(aa,bb,cc)
}
//输出:123 456 true
.
.
.
通用的,不过多描述
括号内加u为无符号整数,后接数字为规定长度的整数,uintptr为指针(长度随操作系统改变)
byte不过多叙述Go中的rune就是char类型(为避免1字节的char造成的坑,长度为32位)
float不过多描述 complex为复数类型 complex64中实部和虚部是32位的 在complex128中实部和虚部是64位的
func euler(){
//只输入i会返回变量未定义输入1i就可以定义为虚数i了
fmt.PrintIn(
cmplx.eXP(1i * math.Pi)+1)
}
//输出结果为:0+1.2246467991473515e-16i
func euler(){
fmt.Printf("%.3f\n",
cmplx.eXP(1i * math.Pi)+1)
}
//输出结果为:0.000+0.000i
用求直角三角形的斜边例子说明类型转换,两直角边分别为3和4
func triangle() {
var a,b int = 3,4
var c int
//Sqrt参数为float所以括号内的a*a+b*b改写成float64(a*a + b*b)
//如上改完还是出错,是因为返回类型为float但前面声明c为int所以要将c = math.Sqrt(float64(a*a + b*b))改成c = int(math.Sqrt(float64(a*a + b*b)))
//因为float是不准的,所以有可能出现4.9999等结果最后强制转换结果为4,解决方法会在后面说明
c = int(math.Sqrt(float64(a*a + b*b)))
fmt.Println(c)
}
//输出结果为5
func consts(){
//常量可以定义在函数外部包的内部
//常量数值没有规定类型可以作为各种类型使用
//常量可以在常量名后面规定类型,也可以省略,省略下的a,b就是个文本可以是int也可以是float
const filename = "abc.txt"
const a,b = 3,4
//上面写法也可以替换成
// const (
// filename="abc.txt"
// a,b=3,4
//)
var c int
c = int(math.Sqrt(a*a + b*b))
fmt.Println(filename, c)
}
//输出结果为abc.txt 5
func enums(){
//普通枚举类型
const(
cpp = 0
java = 1
python = 2
golang = 3
)
//也可以将定义更改为(自增值枚举类型)
//const(
// cpp = iota //iota为定义自增
// java
// python
// golang
//)
fmt.Println(cpp, java, python, golang)
}
//输出结果为 0,1,2,3
func enums(){
const(
cpp = iota //iota为定义自增
_ //_为跳过
python
golang
javascript
)
fmt.Println(cpp, javascript, python, golang)
}
//输出结果为 0,4,2,3
func enums(){
const (
b = 1 << (10 * iota) // <<移位操作,速度比乘除法快 将1的二进制位左移0位,右补0
kb //将1的二进制位左移10位,右补0
mb
gb
tb
pb
)
fmt.Println(b, kb, mb, gb, tb, pb)
}
//输出结果为 1 1024 1048576 1073741824 1099511627776 1125899906842624