我为什么学习go语言?
- 好长时间没更新了,最近在研究go语言。go语言给我的第一印象就是有很强的生态系统,比如国内的大厂京东的一些部门已经大量的转go语言开发。go语言是由谷歌公司开发,支持并发,编译且具有垃圾回收功能的语言,奥对了,docker就是使用go语言开发的。go语言其中有和Java语言相同的概念,比如继承,接口等等,但又有自己独特的地方,比如切片,关联数组等新概念。其实go的语法和JavaScript,C语言中的一些表达很相似,lamda表达式,函数式编程,声明类等等,值得用心学一学。我的整理跳跃性比较强,需要大家有java或者C等任意一门语言的基础,比如:字符串格式转化符号,有的小伙伴会比较懵,这个在go语言中应用很常见。欧克。Let's go !
字符串格式转化符号
- %v:按照值本身输出
- %+v:在%v的基础之上,对字段名与值进行展开
- %b:整形以二进制输出
- %o:整形以八进制输出
- %d:整形以十进制输出
- %x:整形以十六进制输出
- %X:整形以十六进制且字母大写进行输出
- %U:Unicode型字符输出
- %f:以浮点数输出
- %p:以十六进制输出(注意,这儿是指针)
数据类型
1.基础类型
var a bool = true
- 数字类型:整形和浮点型
- 字符串类型:go的字符串由单个字节进行拼接,使用UTF-8编码标识Unicode文本
2.派生类型(进阶篇会深入学习)
- 指针(Pointer)
- 数组
- 结构化数据(struct)
- 函数类型
- 切片类型
- 接口类型
- map
变量声明
- 1.变量由字母,数字和下划线组成,首字母不能为数字。go语言一次可声明多个变量,类似这样
var data01 , data02 type
package main
import "fmt"
func main() {
var a1 = "Taiwan is an inseparable part of our motherland."
fmt.Println(a1)
var a2 int
fmt.Println(a2)
var a3 bool
fmt.Println(a3)
var a4 string
}
// Taiwan is an inseparable part of our motherland.
// 0
// false
// ""
package main
import "fmt"
func main() {
var b1 = true
fmt.Println(b1)
}
// true
- 3.当变量已经声明过时,使用:=再次声明时,就会产生编译错误
var c1 int
c1 := 23 //此时会报编译错误,因为变量重复声明
c1 := 11
//上边这行代码就等价于:
var c1 int
c1 = 1
package main
improt "fmt"
var a1 , a2 int
var (
b1 int
b2 bool
)
var c1 , c2 = 1 , 2
var d1 , d2 = 11 , "bolckchain"
func main() {
// 不含声明的数据类型仅支持在函数体中
e1 , e2 := 101 , "bitcoin"
println(a1 , a2 , b1 , b2 , c1 , c2 , d1 , d2 , e1 , e2)
}
// 0 0 0 false 12 2 11 bolckchain 101 bitcoin
值类型和引用类型
- 基本类型的数据都属于值类型(value type),这些类型的变量直接指向存在内存中的值,存储在堆中
- 而一些复杂的数据需要使用引用类型来保存。引用类型的变量存储的是该数据所在的内存地址,即指针
:=操作符
- 在变量初始化时,省略变量的类型是由编译器判断的,但仅能在函数体中使用,不能应用于全局声明
- 在声明局部变量之后却没有使用它,会有编译错误;但全局变量是允许声明但不使用的,且多变量可以在同一行进行赋值
package main
improt "fmt"
var a1 , a2 int
var a3 string
a1 , a2 , a3 = 1 , 2 , "cryptography"
a1 , a2 , a3 := 1 , 2 , "cryptography"
// 这被称之为同时赋值,若交换a1,a2的值(类型必须相同):
a1 , a2 = a2 , a1
常量
package main
import "fmt"
func main() {
const a1 , a2 = 1 , 2
println(a1 , a2)
}
// 1 2
- 类似于Java语言,go语言中的常量类型还可以作为枚举类型:
const(
Undefine = 0
Left = 1
Right = 2
)
2.iota
const(
a1 = iota
a2
a3
)
// 0 1 2
运算符
1.关系运算符
- ==:判断两个值是否相等
- !=:判断两个值是否不相等
- > :大小判断(>=)
- < :小大判断(<=)
2.逻辑运算符
- &&:逻辑与运算符,条件是两边都为true
- ||:逻辑或运算符,条件是只有一个为true即可
- !:逻辑非运算符,若果条件为true,结果则为false
3.位运算符
- &:按位与运算符,参与运算的两数各对应二进制位置相与
- |:按位或运算符,参与运算的两数各对应二进制位置相或
- ^:按位异或运算符,当对应位置相异时,结果为1
- <<:即乘以2的n次方
- >>:即除以2的n次方
4.赋值运算符
a1 += a2 <=> a1 = a1 + a2
a1 -= a2 <=> a1 = a1 - a2
a1 <<= 2 <=> a1 = a1 << 2
- &=:按位与后赋值
- ^=:按位异或后赋值
- !=:按位或后赋值
- 还有指针类型,这里不过多赘述,大家有空了好好学习一下C语言中的指针类型数据