Go作为专门为并发和大数据设计的语言,在编程界占据越来越重要的地位!不论是c/c++,php,java,重构首选语言就是Go
至于go语言的详细优缺点,将在以后深入学习后进行总结。现在首要任务是将Go语言基础用法学会。进而开发出相应的应用或网站
Go语言的hello world
我们在学习任何一门语言时一般都是从hello world学起
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
在hello world的代码中 我们看到,在一个go file中主要的三部分有 声明包名,引用包部分 ,main函数主体。
Go语言变量定义
package main
import "fmt"
//包内变量
var (aa = 3
ss = "kkk")//集中定义变量
//bb := true
func variableZeroValue() {
var a int
var s string
fmt.Printf("%d %q\n",a,s)
}
func variableInitialValue() {
var a,b int = 3,4
//定义后的变量一定要用
var s string = "abc"
fmt.Println(a ,b, s)
}
func variableTypeDeduction() {
var a,b,c,s = 3,4,true,"def"
fmt.Println(a,b,c,s)
}
func variableShorter() {
a,b,c,s := 3,4,true,"def"
b = 5
fmt.Println(a,b,c,s)
}
func main() {
fmt.Println("hello world")
variableZeroValue()
variableInitialValue()
variableTypeDeduction()
variableShorter()
fmt.Println(aa,ss)
}
在仔细阅读上述代码后,需要在变量定义中注意的问题有
- go语言通过var进行定义变量,先给出变量名,再指定变量类型(刚开始觉得反人类,但是go语言的这种定义更符合逻辑,毕竟在写代码时最先想到的是变量名再想到变量类型)
- go语言可以在赋值时自己匹配变量类型,且与其它语言不同的是,变量声明后会有默认赋值操作。
- go语言变量定义后一定要用!(真的是,对程序很好的规范,对后期维护减少了很多麻烦)
- go语言可以定义包内全局变量 ,虽然全局变量被视为洪水猛兽,但是Go语言的包机制,可以让全局变量的危险系数大大降低。
Go语言的内建变量
Go语言与其它语言重复的内建变量不做赘述。需要注意的是(u)就是unsigned代编有符合或无符号
go语言中让人陌生的主要是
1、uintptr Go语言的指针类型,没错 ,go语言也是有指针的,鉴于指针不容易一次说清,我会专门详解指针
2、rune 细心一点发现Go语言怎么没有char类型。其实 rune就是Go语言的char类型,而且是char32位
3、complex 复数类型。相信学过python的同学可能对这个比较熟悉。我还是详解一下复数
我们在高中就学过这个复数的概念,引入复数后,对坐标轴的方向不单单是单一方向,而使得点进入二维,就像3+4i,突破一维数轴。每个数字单乘i后 相当于进行了一次逆时针的90°旋转。至于深层次的数学概念与应用也不详细展开了。为了更好的理解Go语言复数类型。我们以验证欧拉函数为例。(有兴趣的可以深究一下欧拉公式)
func euler() {
c := 3 + 4i
fmt.Println(cmplx.Abs(c))
//验证欧拉公式
fmt.Println(cmplx.Pow(math.E , 1i*math.Pi)+1)
}
Go语言的类型转换
很多语言都可以隐式的进行类型转换,比如C语言,可以默认的从低精度到高精度转,浮点数除整数后,结果默认为浮点数
但是Go语言没有隐式强制类型转换,必须显示转换
func triangle() {
var a ,b int = 3,4
var c int
//go语言没有隐式强制类型转换,必须显示强制类型转换
c = int(math.Sqrt(float64(a*a+b*b)))
fmt.Println(c)
}
Go语言常量与枚举类型
与其它语言类似,Go语言的常量也是使用const关键字。
func consts() {
//go语言常量的定义
const filename = "abc.txt"
const a,b = 3,4
var c int
c = int(math.Sqrt(a*a+b*b))
fmt.Println(filename,c)
}
利用常量类型可以进而定义枚举类型
func enums() {
const (
cpp = iota
java
python
golang
)
const (
//作为表达式使用
b = 1<<(10*iota)
kb
mb
gb
tb
pb
)
fmt.Println(cpp,java,python,golang)
fmt.Println(b,kb,mb,gb,tb,pb)
}
其中,iota作为自增,一般是0,1,2、、利用这个特性,我们可以对iota进行表达式的编辑,进而达到相应的目的。