学习Golang原因,也是因为自己比较懒,早在6月份时候就想要去学习Golang,一直拖到现在才开始.首先因为区块链技术领域中有很多框架/系统的编写使用golang来写,追述其根源也引起自己学习的第二个原因,这是一个能够支持极高并发的语言,其诞生所解决的痛点便是高性能服务器,且语言简洁优美.其对于并发在底层与其他语言(java等)是不同的操作,现在还只有一些模糊的概念在心里,并不能讲的非常清楚,愿自己通过这次学习,最后能一一解答心中疑惑.
好了出发,hello golang!
变量定义
变量的定义,首先需要 var
开头,表示这是一个变量,紧跟着是一个变量名列tem
,再紧跟着是变量的类型string
.语言结束不需要分号.
var tem string
,在go中所有变量的定义如果没有赋值,默认会为其赋值,string为”“,int为0.且关键是,会发现在我们定义完变量之后,其变量名下会有报错红线,这是因为go语言中非常严谨的原因,不允许定义没有使用的变量,既变量定义完后必须使用.
func variableZeroValue() {
var a int
var s string
fmt.Printf("%d %q\n",a,s) //如果不打印的话,就会a与b变量名上会报错
}
func variableInitiaValue() {
var a,b int = 1,2 //可以看到,赋值时是可以一次赋多值
var s string = "hello golang" // 在编译器中发现类型上画有黄线,提示go其实可以自动识别类型,它会根据我们的值去判断类型
fmt.Println(a,b,s)
}
func variableTypeDeduction() {
var a,b = 1,2
var s = "hello golang"
fmt.Println(a,b,s) //自动判断类型,省略变量类型
}
/**
变量定义简单写法
*/
func variableShorter() {
a,b,c := 1,"hello",false //可以使用 := 的形式来定义变量(推荐使用)
//a:=2 //报错 一个变量 只能有一次 := 的定义,所有语言都一样,变量定义在一个作用域中只能定义一次
fmt.Println(a,b,c)
}
/**
方法外部定义,也是可以的,但是注意,其作用域是包下,而不是类似Java中的整个类的全局变量,比全部变量范围要大
*/
package main
import "fmt"
var temp = 1 //方法外定义变量 只能使用 var关键字定义,这是因为golang规定,一个类中开头必须为 var 或 func
var temp2 = "hello"
var ( //变量定义比较多的情况下可以使用 var() 在括号内部定义变量,少写var
t = 1
o = "hello"
)
变量定义总结
- 使用var关键字
- 使用默认值
var a,b,c string
- 赋值
var a int = 1
- 在函数外定义变量,其作用域是整个包下
- 使用var()集定义变量
- 使用默认值
- 编译器自动决定类型
- var a,b,c = 1,”hello”,true
- 使用:=定义变量
- a,b,c := 1,”hello”,false
- 只能在函数内使用
常量与枚举定义
常量的定义需要用到const关键字,使用方法和var类似,只是const是用来定义常量的
/**
产量的定义
*/
func constTest() {
const a = 1
}
/**
函数外常量定义
*/
const name = 1
/**
枚举定义
*/
func enums() {
/**
通过 const括号集定义一个枚举
*/
const (
up = 1
down = 2
)
/**
其值可以使用 iota这个关键字来进行 下面的自增,
如果想要跳过,可以使用_占位
*/
const (
cpp = iota
_
java
python
golang
)
fmt.Println(cpp, java, python, golang)
/**
当然iota可以参与运算规则,下面所有都遵守这个规则
*/
// b,kb,mb,gb,tb,pb
const (
b = 1 << (10 * iota)
kb
mb
gb
tb
pb
)
fmt.Println(b,kb,mb,gb,tb,pb)
}
常量与枚举定义总结
- 使用const关键字,const关键字用法与var类似
- 枚举定义,直接使用const()集
- 枚举中可以使用iota关键字,来进行自增操作
- iota可以参与运算
作者所有的学习源码在 go学习源码github地址,如果觉得有用的话帮小智贡献一个star😁