Chapter002 Golang变量以及数据类型

上一章 Chapter001 Golang标准库API以及学习资料
下一章 Chapter003 Golang运算符速查表

一、变量
1.指定变量类型,申明后不是用默认值

(1)int 默认 0
(2)string默认 空串
(3)float默认 float64 0
(4)bool faulse

2.根据值判断类型
var num = 10.11
3.省略var

且‘=’左边的变量不应该是已经申明的,即不能重复申明,不然会报错。

name:="tom”
4.可多变量申明

① 直接法

var n1,n2,n3 int 

② 对应法

var n1,n2,n3 = 100,"tom",888

③ 类型推导法

 n1,n2,n3 := 100,"tom",888

④ 一次性申明全局变量
即在函数外声明变量

二、常量
(一)声明

1、一般写法

const 常量名 [类型] = value  //类型可以不写,因为有类型推导

2、专业写法

const (
	a = iota // a=0
	b  // b=1 后面依次加一
	c  // c=2
)
(二)注意事项

1、常量在申明时必须赋值
2、常量不能修改
3、只有基本数据类型
4、golang中没有常量名必须大写的规定
5、仍然可以通过首字母大小写来控制常量的访问范围

三、 “+” 的使用

(1)数值:数学加法
(2)字符串:拼接

四、数据类型介绍
(一)基本数据类型以及介绍
1.数值型

(1)整数型

  1. 有些有符号位eg: int8
    在这里插入图片描述
  2. 定义变量下 保小不保大,节省空间,但是要溢出,结果可能不同,所以考虑范围。
  3. 1bite = 8bit
  4. 查看a变量的数据类型和占用 字节 大小
    数据类型
fmt.Printf("%T",a)

字节(引包)

package main
import (
	"unsafe"
)
func main(){
var a int64 = 60.23
fmt.Printf("%d",unsafe.Sizeof(a))
}

(2)浮点型 float32 float64(小数类型)
5. 浮点数都是有符号位
6. 尾数位可能精度损失
7. 科学计数法

num :=5.1234e2 //10^2
num :=5.1234E2 //10^2
num :=5.1234E-2 //10^(-2)

在这里插入图片描述

2.字符型(char)
  1. 无专门字符型,只能用byte,保存单个字符,所以汉字存不下一位,可以用rune保存(int32别名),表示一个unicode码点。
    (go:utf-8)
var c1 byte = 'a' 
  1. 直接输出字符,则输出码值
fmt.Printf("c1=",c1)
  1. 输出字符值,则格式化输出
fmt.Printf("c1=%c",c1)
  1. 汉字
var c3 byte = "北" //溢出
fmt.Printf("c1=%c",c1)
var c3 int = "北" //成功
fmt.Printf("c1=%c",c1)

如果保存的字符是在ASCII,直接保存到byte,若>225,则考虑int
注意输出值时,格式化输出
查看码值 http://www.mytju.com/classcode/tools/encode_utf8.asp

3.布尔bool
  1. 真假逻辑,只占一个字节
var b = false
  1. 应用:
    if
    for
4.字符串 string
  1. go的字符串由字节组成
var adress string = "中国 hello"
  1. golang字符串是不可变的,一旦赋值不可更改
eg: adress[0] = 'a' 是错的
  1. 双引号识别转义字符
  2. 反引号以字符原生形式输出,包括换行和特殊字符,例如输出源代码,防止攻击。

str:=`
package main
import (
	"fmt"
	"unsafe"
)
func main(){
	var b =false
	fmt.Println("b=",b)
}
`
fmt.Printfln(str)
  1. 当拼接很长时,可以分行写,但每一行必须以+结尾。
    在这里插入图片描述
(二)数据结构
(1)指针
  1. 指针变量存的是一个地址,指针指向的空间存的才是值
var ptr *int = &num //ptr指针,指向num,类型为int型指针
  1. 值类型:都有对应的指针类型,形式为 *数据类型,指针类型要和所指的数据结构类型要一致
    值类型包括:基本数据类型int系列、float系列、bool系列、string系列、数组和结构体struct
  2. 练习 + 简单案例说明:
package main
import (
	"fmt"
	_ "fmt"
)
func main(){
	//基本数据类型在内存之间的布局
	var i int = 10
	//i的地址
	fmt.Println("i的地址",&i)
	//ptr一个指针,类型为int, 指向i,ptr本身也有一个地址
	var ptr *int = &i
	fmt.Printf("ptr=%v\n",ptr)
	fmt.Print("ptr 的地址是%v\n",&ptr)
	fmt.Printf("ptr 指向的值=%v\n", *ptr)

	fmt.Println("练习1:输出一个变量的地址\n")
	var num2 int = 9
	fmt.Printf("num2 adress = %v\n",&num2)

	fmt.Printf("练习题2:将num3的地址赋给指针str2并通过ptr去修改num的值:\n")
	var num3 int = 99
	var str2 *int = &num3
	*str2 = 100
	fmt.Printf("修改后的值是%v\n",num3)
}

tips:

  1. 值类型和引用类型
    1)值类型:
    ①基本数据类型int系列、float系列、bool系列、string系列、数组和结构体struct
    ②变量直接分配,内存在栈中分配
    2)应用类型:
    ①指针、slice切片、map、管道chan、接口interface等
    ②变量存储一个地址,地址对应空间才是真正存储的值,内存通常在堆区分配,当没有任何变量引用这个地址时,则地址对应数据空间成为垃圾,由GC回收。
  2. 标识符的命名和规范
    1)概念:凡是命名的地方就是标识符
    2)规范:a到z A到Z 0到9 和下划线(是空标识符,用于占用,即不可单独使用
    3)数字不可开头
    4)区分大小写
    5)不可有空格
    6)保留关键字不可作为标识符
    在这里插入图片描述
    预定义标识符
    在这里插入图片描述
    7)包名:保持package和所在文件夹目录一致,名字简短有意义,不要和标准库冲突
    8)要使用其他包里面自定义函数或者其他变量时时 ,引包要写该函数存在的go文件的路径
package main
import(
	"fmt"
	"go_code/chapter1/demo/model"
)

9)驼峰命名法

(2)数组

https://blog.csdn.net/qq_43681877/article/details/104084507

(3)结构体

https://blog.csdn.net/qq_43681877/article/details/104095171

(4)管道

https://blog.csdn.net/qq_43681877/article/details/104168996

(5)函数

https://blog.csdn.net/qq_43681877/article/details/103074131

(6)切片

https://blog.csdn.net/qq_43681877/article/details/104084507

(7)接口

https://blog.csdn.net/qq_43681877/article/details/104106952

(8)map

https://blog.csdn.net/qq_43681877/article/details/104088927

(三)数据类型转换(基本数据类型)
var i int32 = 100 //赋值
var n1 float32 = float32(i) //转换
  1. 被变量转换的是变量存储的数据,变量本身的数据结构没有变
  2. int64->int8,不会报错,但是会按照溢出处理
  3. 基本数据类型与string的转换
    ①数据类型转string
    (1)fmt.Sprintf("%参数",表达式) ————推荐
    查看官方文档 https://studygolang.com/pkgdoc
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
//数据相互转换
package main
import (
	"fmt"
	_ "fmt"
	_ "unsafe"
)
func main(){
	var num1 int =90
	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=%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"
	_ "fmt"
	"strconv"
	_ "unsafe"
)
func main(){
	var num1 int =90
	var num2 float64 = 23.456
	var b bool = true
	var myChar byte = 'h'
	var str string  //空的字符串

	//方法二 strconv函数
	var num3 int =90
	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)

	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)

}

②string转数据类型
https://blog.csdn.net/qq_43681877/article/details/104083633

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杰西啊杰西

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

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

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

打赏作者

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

抵扣说明:

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

余额充值