我为什么学习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.基础类型

  • 布尔型:值只能为true或false
var a bool = true
  • 数字类型:整形和浮点型
  • 字符串类型:go的字符串由单个字节进行拼接,使用UTF-8编码标识Unicode文本

2.派生类型(进阶篇会深入学习)

  • 指针(Pointer)
  • 数组
  • 结构化数据(struct)
  • 函数类型
  • 切片类型
  • 接口类型
  • map

变量声明

  • 1.变量由字母,数字和下划线组成,首字母不能为数字。go语言一次可声明多个变量,类似这样
var data01 , data02 type
  • 指定变量类型,默认值为0
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
// ""
  • 2.根据值进行判断数据类型
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
  • 4.声明多个变量
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

常量

  • 1.常量:程序运行时其值不会被改变的量称为常量
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语言中的指针类型数据