Go语言精修(尚硅谷笔记)第三章

三、变量

变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,同样的道理,通过变量名可以访问到变量(值)。

Golang的变量如果没有赋初值,编译器会使用默认值, 比如 int 默认值 0 string默认值为空串, 小数默认为 0

  • 声明变量

基本语法: var 变量名 数据类型

var a int//这就是声明了一个变量,一个变量名是a
var num1 float32 //这也声明了一个变量,表示一个单精度类型的小数,变量名是num1
  • 初始变量

在声明变量的时候,就给值。

var a int = 45 //这就是初始化变量a
var b = 400 //如果声明时就直接赋值,可省略数据类型
b := 400 //类型推导
  • 给变量赋值
var num int //默认0
num = 780 //给变量赋值

3.1 整形

1 ) Golang各整数类型分:有符号和无符号,intuint 的大小和系统有关。

2 ) Golang的整型默认声明为 int 型

	//整型的使用细节
	var n1 = 100 // ? n1 是什么类型
	//这里我们给介绍一下如何查看某个变量的数据类型
	//fmt.Printf() 可以用于做格式化输出。
	fmt.Printf("n1 的 类型 %T \n", n1)

3.) 如何在程序查看某个变量的字节大小和数据类型 (使用较多)

	//如何在程序查看某个变量的占用字节大小和数据类型 (使用较多)
	var n2 int64 = 10
	//unsafe.Sizeof(n1) 是unsafe包的一个函数,可以返回n1变量占用的字节数
	fmt.Printf("n2 的 类型 %T  n2占用的字节数是 %d ", n2, unsafe.Sizeof(n2))

4 ) Golang程序中整型变量在使用时,遵守保小不保大的原则,即:在保证程序正确运行下,尽量 使用占用空间小的数据类型。【如:年龄】

var age byte = 90

3.) 浮点型常量有两种表示形式

十进制数形式:如: 5.12 . 512 (必须有小数点)

科学计数法形式:如: 5. 1234 e 2 = 5. 12 * 10 的 2 次方 5. 12 E- 2 = 5. 12 / 10 的 2 次方

package main
import (
	"fmt"
)

//演示golang中小数类型使用
func main() {
	
	
	//十进制数形式:如:5.12       .512   (必须有小数点)
	num6 := 5.12
	num7 := .123 //=> 0.123
	fmt.Println("num6=", num6, "num7=", num7)
	
	//科学计数法形式
	num8 := 5.1234e2 // ? 5.1234 * 10的2次方
	num9 := 5.1234E2 // ? 5.1234 * 10的2次方 shift+alt+向下的箭头
	num10 := 5.1234E-2 // ? 5.1234 / 10的2次方 0.051234
	
	fmt.Println("num8=", num8, "num9=", num9, "num10=", num10)
}

通常情况下,应该使用 float 64 ,因为它比float 32 更精确。[开发中,推荐使用 float 64

3.2 字符类型

1 ) 字符型 存储到 计算机中,需要将字符对应的码值(整数)找出来

存储:字符—>对应码值---->二进制–>存储

读取:二进制----> 码值 ---->字符 --> 读取

2 ) 字符和码值的对应关系是通过字符编码表决定的(是规定好)

3.) Go语言的编码都统一成了utf- 8 。非常的方便,很统一,再也没有编码乱码的困扰了

注意:

1 ) Go语言的字符串的字节使用UTF- 8 编码标识Unicode文本,这样Golang统一使用UTF- 8 编码,中文 乱码问题不会再困扰程序员。

2 ) 字符串一旦赋值了,字符串就不能修改了:在Go中字符串是不可变的。

3.3 数据类型转换

Golang 和java/c 不同,Go 在不同类型的变量之间赋值时需要显式转换。也就是说Golang中数据类型不能自动转换

3.3.1 基本语法

表达式 T(v) 将值 v 转换为类型 T

T : 就是数据类型,比如 int 32 ,int 64 ,float 32 等等

v : 就是需要转换的变量

被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化!

package main
import (
	"fmt"
)

//演示golang中基本数据类型的转换
func main() {

	var i int32 = 100
	//希望将 i => float
	var n1 float32 = float32(i)
	var n2 int8 = int8(i)
	var n3 int64 = int64(i) //低精度->高精度

	fmt.Printf("i=%v n1=%v n2=%v n3=%v \n", i ,n1, n2, n3)
	
	//被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化
	fmt.Printf("i type is %T\n", i) // int32
}

在转换中,比如将 int 64 转成 int 8 【- 128 - – 127 】 ,编译时不会报错,只是转换的结果是 溢出处理,和我们希望的结果不一样。 因此在转换时,需要考虑范围.

3.3.2 基本数据类型和string的转换

方式 1 :fmt.Sprintf(“%参数”, 表达式)

参数需要和表达式的数据类型相匹配

fmt.Sprintf() 会返回转换后的字符串

案例演示

package main
import (
	"fmt"
	_ "unsafe"
	"strconv"
)

//演示golang中基本数据练习转成string使用
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方法

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

	str = fmt.Sprintf("%f", num2)
	fmt.Printf("str type %T str=%q\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)
}

方式 2 :使用strconv 包的函数

package main
import (
	"fmt"
	_ "unsafe"
	"strconv"
)

//演示golang中基本数据练习转成string使用
func main() {

	//第二种方式 strconv 函数 
	var num3 int = 99
	var num4 float64 = 23.456
	var b2 bool = true

	str = strconv.FormatInt(int64(num3), 10)
	fmt.Printf("str type %T str=%q\n", str, str)
	
	// strconv.FormatFloat(num4, 'f', 10, 64)
	// 说明: 'f' 格式 10:表示小数位保留10位 64 :表示这个小数是float64
	str = strconv.FormatFloat(num4, 'f', 10, 64)
	fmt.Printf("str type %T str=%q\n", str, str)

	str = strconv.FormatBool(b2)
	fmt.Printf("str type %T str=%q\n", str, str)

	//strconv包中有一个函数Itoa
	var num5 int64 = 4567
	str = strconv.Itoa(int(num5))
	fmt.Printf("str type %T str=%q\n", str, str)

}

3.3.3 string类型转基本数据类型

使用时strconv包的函数

func ParseBool(str string)(value bool,err error)
func ParseFloat(s string,bitSize int)(f float64,err error)
func ParseInt(s string,base int,bitSize int)(i int64,err error)
func ParseUint(s string,b int,bitSize int)(n uint64,err error)
package main
import (
	"fmt"
	"strconv"
)

//演示golang中string转成基本数据类型
func main() {

	var str string = "true"
	var b bool
	// b, _ = strconv.ParseBool(str)
	// 说明
	// 1. strconv.ParseBool(str) 函数会返回两个值 (value bool, err error)
	// 2. 因为我只想获取到 value bool ,不想获取 err 所以我使用_忽略
	b , _ = strconv.ParseBool(str)
	fmt.Printf("b type %T  b=%v\n", b, b)
	
	var str2 string = "1234590"
	var n1 int64
	var n2 int
	n1, _ = strconv.ParseInt(str2, 10, 64)
	n2 = int(n1)
	fmt.Printf("n1 type %T  n1=%v\n", n1, n1)
	fmt.Printf("n2 type %T n2=%v\n", n2, n2)

	var str3 string = "123.456"
	var f1 float64
	f1, _ = strconv.ParseFloat(str3, 64)
	fmt.Printf("f1 type %T f1=%v\n", f1, f1)

}

3.4 标识符命名

1 ) 由 26 个英文字母大小写, 0 - 9 ,_ 组成

2 ) 数字不可以开头。var num int //ok var 3num int//error

3.) Golang中严格区分大小写。

var num int
var Num int

复制代码

说明:在golang中,num 和 Num 是两个不同的变量

4 ) 标识符不能包含空格。

var ab c int = 30 //错误

5 ) 下划线"_"本身在Go中是一个特殊的标识符,称为空标识符。可以代表任何其它的标识符,但是它对应的值会被忽略(比如:忽略某个返回值)。所以仅能被作为占位符使用,不能作为标识符使用

var _ int = 40 //error
fmt.Println(_)

6 ) 不能以系统保留关键字作为标识符(一共有 25 个),比如 break,if 等等.

注意事项

1 ) 包名:保持package的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,不要和标准库不要冲突 fmt

2 ) 变量名、函数名、常量名:采用驼峰法

举例:

var stuName string = “tom” 形式:xxxYyyyyZzzz.
var goodPrice float 32 = 1234. 5

3.) 如果变量名、函数名、常量名首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用 ( 注:可以简单的理解成,首字母大写是公开的,首字母小写是私有的),在golang没有public,private 等关键字。

3.5 系统保留字

在go中,为了简化代码编译过程中对代码的解析,其定义的保留关键字只有25个。

breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughifrangetype
continueforimportreturnvar

3.6 系统预定义标识符

除了保留关键字外,Go还提供了36个预定义的标识符,其包括基本数据类型和系统内嵌函数

appendboolbytecapclosecomplex
complex64complex128unit16copyfalsefloat32
float64imagintint8int16uint32
int32int64iotalenmakenew
nilpanicuint64printprintlnreal
recoverstringtrueuintuint8uintprt
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值