【Go学习笔记】2 - Go 基础
定义 变量,常量,Go内置类型,以及一些小技巧。
定义变量
Go语言使用 var 这个关键字定义变量。Go 把变量类型放到了 变量名后面。
# 定义VariableName 类型为 type 的变量
var variableName type
# 定义多个变量,用 逗号 分割。 定义三个类型都是type的变量
var vname1, vname2, vname3 type
# 定义变量并赋值
var variableName type = value
# 定义多个变量并赋值
var vname1, vname2 type = v1, v2
# 定义多变量,可以 忽略 类型声明。
var vname1, vname2 = v1, v2
还可以再简化,使用一个新的的符号 :=
vname1, vname2 := v1, v2
:= 这个符号 取代了var 和type 这种形式叫 简短声明。它有个限制,只能在函数内部使用。所以,定义全局变量的时候,使用 var 。
_ (下划线)
是个特殊的变量名。 任何赋予它的值都会被丢弃。
_, b := 34, 35
结果:b=35
说明:将35赋予b,同时丢弃了 34
如果声明了变量,但是未使用的话,会在编译阶段报错。
常量
常量可以是 数值, 布尔值 或是字符串。
# 语法: const constanName = value
const Pi = 3.1415
const i = 1000
const MaxThread = 10
const prefix = "astaxie_"
内置基础类型
布尔型
布尔值的类型为 bool 值是 true 或是 false 默认值:false
# 示例
var isActive bool // 全局变量声明
var enabled, disabled = true, false // 忽略类型的声明
func test(){
var available bool // 一般声明
valid := false // 简短声明
available = true // 赋值操作
}
数值类型
整数类型包括: 无符号和带符号两种。Go同时支持 int 和 uint 这两种类型的长度相同。
Go也有直接定义号的位数类型:rune int8 int16 int32 int64 和byte unit8, uint16, uint32,uint64。rune是ini32的别称。bype 是uint8的别称。
这些类型的变量之间不允许相互赋值,或是操作。
浮点数的类型有: float32 和 float64 默认是float64
复数:默认的类型是 complex128 (64实+64虚) 也有complex64 复数的形式:RE+IMi RE是实,IM是虚数,最后的 i 是虚数单位。
var c complex64 = 5+5i
fmt.Printf("value = %v",c)
# 结果:5+5i
字符串
Go支持 UTF-8 字符串用一对引号 (“ ” )
或是反引号 他的类型是 string
var frenchHello string
var emptyString string = ""
func test(){
no, yes, maybe := "no", "yes","maybe" // 简短声明,并赋值
JapaneseHello = "Konichiwa"
frenchHello = "Bonjour" // 常规赋值
}
在Go中,字符串是不可变的。如下会报错
var s string = "hello"
s[0] = 'c'
修改字符串
## 方法1
s := "hello"
c := []byte(s) // 将字符串 s 转换为 byte 类型
c[0] = 'c'
s2 := string(c) // 再转换为 string 类型
fmt.Printf("%s\n", s2) // 输出结果: cello
## 方法2
s := "hello"
s = "c" + s[1:] // 字符串不能修改,但是可以做切片。s[1:] 取第二个开始以后的。
fmt.Printf("%s\n",s) //输出结果:cello
可以用 + 操作 连接2个字符串
s := "hello"
a := " world"
c := s + a
fmt.Printf("%s\n",c) // 结果:hello world
声明多行字符串
# 使用 ` ` 反引号
m := `hello
world`
` 括起来的字符串是 Raw 字符串,即 字符串才代码中的形式就是打印时的形式,它没有转义,换行也是原样输出。
错误类型
Go 关键字 error 专门处理错误类型。Go的package中,有个 errors的包处理错误。
err := errors.New("emit macho dwarf: elf header corrupted")
if err != nil{
fmt.Print(err)
}