实例:实现一个Fibonacci数列
1,1,2,3,5,8,13, …
代码展示
package fib
import (
"testing"
)
//全局变量的申明
//var c int
func TestFibList(t *testing.T){
//变量初始化的几种形式
//第一种
//var a int = 1
//var b int = 1
//第二种
//var (
// a int = 1
// b int = 1
//)
//第三种
//c = 1
a := 1
b := 1
//fmt.Print(a)
t.Log(a)
for i:=0;i<5 ;i++ {
//fmt.Print(" ",b)
//t.Log(b)
t.Log(b)
tem := a
a = b
b = tem + a
}
}
一、变量赋值
与其他主要编程语言的差异
- 赋值可以进行自动类型推断
a := 1 将自动推断为 int型
- 可以在一个var中初始化多个变量
var(
a int = 1
b = 2
)
- 在一个赋值语句中可以对多个变量进行同时赋值
func TestExchange(t *testing.T){
//测试程序的名称必须是Test***,如TestExchange
var (
c int = 1
d int = 2
//tem int
)
t.Log(c,d)
//tem = c
//c = d
//d = tem
//t.Log(c,d)
//直接进行赋值
c,d = d,c
t.Log(c,d)
}
二、常量使用
1、快速设置连续值
const (
Monday = iota+1 //之后的每个常量都是前一个加1
Tuesday
Wednesday
Thursday
Friday
Satuday
Sunday
)
2、对比特位进行赋值
const (
readable = 1<<iota //第一位为1 (0001)——1
writable //第二位为1 (0010)——2
excutable //第三位为1 (0100)——4
)
代码展示
package contant_test
import "testing"
const (
Monday = iota+1
Tuesday
Wednesday
Thursday
Friday
Satuday
Sunday
)
const (
//依次为二进制位赋值为1
readable = 1<<iota // 0001
writable //0010
excutable //0100
forth //1000
)
func TestContant(t *testing.T) {
t.Log(Monday,Tuesday,Wednesday,Thursday,Friday,Satuday,Sunday)
var num int =7//0111
t.Log(num&readable==readable,num&writable==writable,num&excutable==excutable,num&forth==forth)
t.Log(num&writable)
//输出结果 (0001)1 true (0010)2 true (0100)4 true false 0 (0000)
}
三、基本数据类型
1、类型转换
- go语言不允许隐式类型转换
- 别名与原有类型也不能进行原有类型转换
代码展示
package type_test
import "testing"
type MyInt int64
func TestImplicit(t *testing.T){
var a int =1
var b int64
//不支持隐式类型转换,必须采用显式类型转换
b = int64(a)
var c MyInt
//也不支持别名的隐式类型转换
c = MyInt(b)
t.Log(a,b,c)
}
2、类型的预定义值
- math.MaxInt64
- math.MaxFloat64
- math.MaxUint32
3、指针类型
- 不支持指针运算 (aPtr为指针,不能进行 aPtr = aPtr + 1运算)
- string是值类型,其默认的初始化值为空字符串,而不是nil(len(str)为0)
代码展示
func TestPoint(t *testing.T) {
var a int = 1
//取地址
aPtr := &a
t.Log(a,aPtr)
//aPtr = aPtr + 1 错误,不支持指针运算
//输出值的类型,a为int型,aPtr为*int型
t.Logf("%T %T",a,aPtr) //格式化输出其类型
var str string //未初始化时string值为空,不是nil
t.Log("*"+str+"*")
t.Log(len(str))
}