Golang入门笔记(2)—— 变量和数据类型

        变量 相当于 内存中表示一个栈空间的存储的表示,我的历史理解是这样的。也不知道在Go语言这里对不对?变量是程序语言的基本组成之一,应该是在程序中很常见的一个单位。

        变量的使用主要步骤为: 1.声明; 2.赋值; 3.使用;

package main

import "fmt"

// 定义在函数外的变量,叫全局变量 ,类似与c语言的成员变量。 java的属性?

var name string = "汪大为"
var age int = 20

//设计者认为,上面一个一个定义变量的写法太繁琐,可以用var()一次性声明
var (
	stock = "TSLA"
	price = ""
)

func main() {

	// 定义在函数内部{}的变量叫局部变量。
	//1.第一种变量的使用方式。

	var num int = 18
	fmt.Println("num = ", num)

	//int声明不赋值的时候,默认值是0.
	var num2 int
	fmt.Println("num2=", num2)

	var num3 = 18 // var的类型推断。
	fmt.Println("num3", num3)

	//4. var 省略形式,也可以做类型的自动推断。   := 冒号等号,不能写为 = 号。  多个:可以解决 sex的变量定义的问题。
	sex := "男" //利用:, 定义一个sex变量
	fmt.Println("sex :", sex)

	//连续声明变量 ,后面一个string 会对 你我他三个变量都生效。
	var i, you, it string
	i = "我"
	you = "你"
	it = "它"

	fmt.Println(i)
	fmt.Println(you)
	fmt.Println(it)

	// 这种语法,java8 都是没有的。挺好的。
	var a, b, c, d = 10, "b", 11, 12
	fmt.Println(a)
	fmt.Println(b)
	fmt.Println(c)
	fmt.Println(d)

	// 这样连续 推断变量也是可以的。
	a2, b2 := "你猜猜a", 19
	fmt.Println(a2)
	fmt.Println(b2)

}

        讲了变量肯定不能少了变量的数据类型。Go和Java一样是一门强类型的语言。Go的变量数据类型有:

Go是一门强类型语言 数据类型的分布

Go分为基本数据类型和派生复杂数据类型。

       除基本类型外的,其他类型当前浏览了一下留个印象就可以了,比较初学阶段。 目前重点关注一下基本数据类型:

        整数类形 int 细分可以有  int8 和 uint8,int16和uint16,int32和uint32,int64和uint32 ,外加一个byte整数类型。golang的整数类型,默认声明为int类型,即有符号;
        这里的数字代表的是多少bit ,int 8 不一定就是8位,这个还要看操作系统如果是32位操作系统那就是8 ,如果64位操作系统还要乘以2;

        而且整形分有无符号,u开头 为 “unsign” 无符号,常用的int32类型可写为rune 相当于java的int 。浮点数类型两个 float32 和 float64。讲到这个无符号uint ,这里简单说一下负数的二进制表示的解读。

1.如何获取一个数的二进制表示:
有符号 int  第一位是0 则是正数,第一位是1 则为负数。
对于负数的绝对值,是符号位以外的部分取反后再加1。

需求: 我们想用8bit的二进制表示-3
做法: -3,负号的首位 毋庸置疑 设置为1 ,
现在就处理剩下7个bit

先表示3 000 0011
取反    111 1100  
加1     111 1101
添加上符号位  1111 1101


2.逆向过程,从一个二进制表示的负数  1111 1101 ,获取易读的表示(我觉得十进制更易读)

先看首位 是1,那么就写个负号 ,
再看剩下的7位数取反  0000010  ,这是2
再加1, 为得到绝对值为3,负号则乘以-1,我们可知其值为 -3.



        

package main

// 多个导入形式的import 语言,比java 省字符。
import (
	"fmt"
	"unsafe"
)

// 设计者认为,上面一个一个定义变量的写法太繁琐,可以用var()一次性声明
var ()

func main() {

	// Printf 格式化函数。 %T 值类型。     unsafe.Sizeof(num3) 计算占用字节数
	var defaultNum = 28
	fmt.Printf("默认数值就是 %T ,对应的字节数:%s", defaultNum, unsafe.Sizeof(defaultNum))

	// var num int8 = 128   cannot use 128 (untyped int constant) as int8 value in variable declaration (overflows)
	var num1 uint8 = 128
	fmt.Print(num1)
	var num2 uint16 = 228
	fmt.Print(num2)
	var num3 uint32 = 328
	fmt.Print(num3)
	var num4 uint64 = 428
	fmt.Print(num4)
	var num5 rune = 528
	fmt.Print(num5)

	//byte类型
	var age byte = 8
	fmt.Println("age = ", age) // fmpl 通过idea快速打印出来。

	//浮点类型的表示。
	var num6 float32 = 3.14
	fmt.Println("float32 = ", num6)
	var num7 float32 = 314e-2
	fmt.Println("科学及算法表示3.14, 314* 10^-2 =", num7)
	var num8 float64 = 3.14e+2
	fmt.Println("科学及算法表示314, 3.14* 10^2 =", num8)

	//浮点数的精度损失,所以默认是 float64
	var value1 float32 = 88.123456789
	fmt.Println(value1) //88.123456789
	var value2 float64 = 88.123456789
	fmt.Println(value2) //88.123456789

	// 目前感觉,用简写的var推断,感觉更为方便
	value3 := 88.123456789
	fmt.Println(value3) //88.123456789

}

        布尔类型和char字符型,毫无意外归为基本数据类型,这点这块我暂时没有遇到哪个语言打破过(也有可能小弟我才疏学浅)。

        和Java不同的是,string 类型竟然被当作基本数据类型,这一点上,简直和 javascript 是一个妈妈养大的一样。javascript 的string也是一个primitive type ,这两这块长得一样,就是javascript 没有char类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值