GO语言学习之路3

本文介绍了Go语言中的数据类型及其默认值,强调了类型转换的必要性,并通过示例展示了如何进行显式转换。同时,讲解了将基本数据类型转换为字符串以及字符串转换回基本数据类型的两种方法。此外,还探讨了Go语言中的值类型和引用类型的区别,以及标识符的命名规范。最后,文中提及了指针的使用,展示了如何通过指针修改变量的值。
2021/12/27

1、在go中,数据类型都有一个默认值,在go中又叫零值。
		整形		0
		浮点型		0
		字符串		""
		布尔类型	false
		
2、golang在不同类型的变量之间赋值时需要显式转换,不会自动转换

	表达式T(v):将值v转换为类型T
	希望把i => float
				var i int32 = 100
				var n1 float32 = float32(i)
			=> int8
				var i int32 = 100
				var n2 int8 = int32(i)
	//在转换中如果从高精度转化为低精度,编译不会报错,只是转换的结果是按溢出处理,
    //和我们希望的结果不一样
	
	Demo1:
		func main() {
			var n1 int32 = 12
			var n2 int64
			var n3 int8

			n2 = n1 + 20  //n1是int32,n1+20 也是int32, 把int32 赋值给 int64 .错误
			n3 = n1 + 20  //n1是int32,n1+20 也是int32, 把int32 赋值给 int8 .错误
		}
		//可以通过显式转换修改
		n2 = int64(n1) + 20 
		n3 = int8(n1) + 20 
	
	Demo2:
		func main() {
			var n1 int32 = 12
			var n3 int8
			var n4 int8
			n3 = int8(n1) + 127   //超出int8范围  溢出
			n4 = int8(n1) + 128	  //超出int8范围  溢出
			fmt.Println(n3)
		}
		//编译报错
		
3、基本数据类型转换为string类型
	(1)fmt.Sprintf("%参数", 表达式)
	(2)使用strconv包的函数
	
	======使用第一种方式转换======
	func main() {
		var num1 int = 99
		var num2 float64 = 23.456
		var b bool = true
		var myChar byte = 'h'

		var str string // 默认空串
		//使用第一种方式来转换
		str = fmt.Sprintf("%d", num1)
		fmt.Printf("str type %T str = %v \n", str, str)

		str = fmt.Sprintf("%f", num2)
		fmt.Printf("str type %T str = %v \n", str, str)

		str = fmt.Sprintf("%t", b)
		fmt.Printf("str type %T str = %q \n", str, str)

		str = fmt.Sprintf("%c", myChar)
		fmt.Printf("str type %T str = %q \n", str, str)
	}
	
	======使用第二种方式转换======
	func main() {
		var num1 int = 99
		var num2 float64 = 23.456
		var b bool = true

		var str string // 默认空串
		//使用第二种方式来转换
		str = strconv.FormatInt(int64(num1), 10)
		fmt.Printf("str type %T str = %q \n", str, str)

		str = strconv.Itoa(num1)
		fmt.Printf("str type %T str = %q \n", str, str)//int转字符串多一个函数itoa

		str = strconv.FormatFloat(num2, 'f', 5, 64)
		fmt.Printf("str type %T str = %q \n", str, str)

		str = strconv.FormatBool(b)
		fmt.Printf("str type %T str = %q \n", str, str)
	}
	
4、string类型转换为基本数据类型
	func main() {
		var str string = "true"
		var b bool
		b, _ = strconv.ParseBool(str) //函数有两个返回值, value bool , err error
		fmt.Printf("b byte %T, b = %v \n", b, b)

		var str2 string = "123456"
		var num1 int64
		num1, _ = strconv.ParseInt(str2, 10, 64)
		fmt.Printf("num1 byte %T, num1 = %v \n", num1, num1)

		var str3 string = "123.2222"
		var num2 float64
		num2, _ = strconv.ParseFloat(str3, 64)
		fmt.Printf("num2 byte %T, num2 = %v \n", num2, num2)
	}
	
	////////////在将string类型转换成基本数据类型时,要确保string类型能够转成有效的数据
	比如我们可以把"123"转成一个整数,但是不能把"hello",转换成一个整数。
	**如果这样做,golang直接将其转成0
	**如果转换为bool值,则输出为false
	//如果转换不成功,就会返回数据类型的默认值
	func main() {
		var str string = "hello"
		var num int64
		num, _ = strconv.ParseInt(str, 10, 64) //函数有两个返回值, value bool , err error
		fmt.Printf("num byte %T, num = %v \n", num, num)
	}//"num byte int64, num = 0"

5、golang的指针与C语言类似(不过多说明)

	func main() {
		var num int = 123
		fmt.Println("num address = ", &num)//取num的地址

		var numPtr *int
		numPtr = &num
		*numPtr = 456
		fmt.Println("num data = ", num)//通过指针修改值 
	}
	
	//所有值类型都有对应的指针类型。
		值类型包括: 基本数据类型: int系列, float系列, bool, string, 数组和结构体struct
		
6、值类型和引用类型	
		值类型:基本数据类型: int系列, float系列, bool, string, 数组和结构体struct
		//=============>>>>变量直接存储值,内存通常在栈中分配
		
		引用类型:指针, slice切片, map, 管道chan, interface等都是引用类型
		//=============>>>>变量存储的是一个地址,这个地址对应的空间才是真正存储数据的值,
		//=============>>>>内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由GC来回收

7、标识符的命名规范
	规则:  1、由大小写字母,数字,下划线组成
			2、数字不可以开头
			3、golang严格区分大小写
			4、标识符不能包含空格
			5、下划线本身在golang中是一个特殊的标识符,称为空标识符,可以代表任何其他的标识符
			但是它对应的值会被忽略,比如忽略某个返回值,所以单独只能作为占位符,不能作为标识符
			6、不能用关键字做标识符
			
			//规范
			//公有的变量,函数,常量名  首字母大写
			//私有的变量,函数,常量名  首字母小写

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值