go语言是静态强类型语言,与C语言类似,数据类型常用的主要有布尔类型(true、false),数字类型(整形int ,浮点类型float32,float64),字符类型(byte 注:byte类型本身就是uint8类型,一个字节存储的是ASCII码,比如 var i byte = ‘a’ 其实存储的是数字97) 以及字符串类型(string)。
变量名由字母,下划线,数字构成,不能与数字开头,区分大小写,这点和C语言一样。不同之处在于,go语言首字母大写表示可以被外部包访问,小写则不能被外部包访问。变量声明以关键字var开头,var 变量名 数据类型 也可以一次声明多个 var 变量名1,变量名2 数据类型
package main
import "fmt"
func main() {
//go语言如果没有初始化,有默认值,int类型是0, float类型是0.0 bool类型是false byte类型是‘’ string是“”
var i int
var f float32
var b bool
var c byte
var str string
//fmt.Printf 与c语言的printf很像
fmt.Printf("i:%d f:%f b:%t c:%c str:%s\n", i, f, b, c, str)
//go语言支持类型自动推导 赋值操作符 := 很方便可以初始化变量并且编译器自动推导数据类型 在 makefile的语法中也有类似用法 注:(:=不能用在已经声明的变量上,不然编译会报错)
i1 := 10
f1 := 3.4
b1 := true
c1 := 'a'
//隐藏一个结束符‘\0’ len(str1)等于4
str1 := "abc"
fmt.Printf("i1:%T f1:%T b1:%T c1:%T str1:%T\n", i1, f1, b1, c1, str1)
//支持多重赋值
i2, i3 := 2, 3
fmt.Println(i2, i3)
//数据交换很方便了
i2, i3 = i3, i2
fmt.Println(i2, i3)
}
常量以关键字const开头,const 常量名 数据类型 (注意不能使用:=)
package main
import "fmt"
func main() {
const a int = 10
fmt.Println("a = ", a)
//同样支持自动推导
const b = 3.14
fmt.Printf("b type %T\n", b)
}
另外多个变量定义可以用
var(
a int
b float32
)
const(
c1 int = 20
c2 float32 = 3.14
)
多个变量定义同样支持自动推导
go语言有一个iota自动增长,可以用来定义类似C语言的枚举类型
package main
import "fmt"
func main() {
//从const开始iota第一次赋值是0,以后依次递增
const (
e1 = iota // 0
e2 = iota // 1
e3 = iota // 2
)
fmt.Println(e1, e2, e3)
//再次遇到const重新置零
const a = iota // 0
fmt.Println(a)
const (
e4 = iota // 0
e5 // 1
e6 // 2
)
fmt.Println(e4, e5, e6)
//iota赋值时同一行数值一样
const (
e7 = iota // 0
e8, e9 = iota, iota // 1
e10 = iota // 2
)
fmt.Println(e7, e8, e9, e10)
}
字符串操作跟C++很像支持下标操作
package main
import "fmt"
func main() {
str := "abcd"
fmt.Printf("str[0]:%c str[2]:%c", str[0], str[2])
}