2、变量、常量、数据类型

实例:实现一个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
	}

}

一、变量赋值

与其他主要编程语言的差异

  1. 赋值可以进行自动类型推断

a := 1 将自动推断为 int型

  1. 可以在一个var中初始化多个变量

var(
a int = 1
b = 2

  1. 在一个赋值语句中可以对多个变量进行同时赋值
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、类型转换
  1. go语言不允许隐式类型转换
  2. 别名与原有类型也不能进行原有类型转换
代码展示
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、类型的预定义值
  1. math.MaxInt64
  2. math.MaxFloat64
  3. math.MaxUint32
3、指针类型
  1. 不支持指针运算 (aPtr为指针,不能进行 aPtr = aPtr + 1运算)
  2. 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))
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Janson666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值