济南做网站比较好的公司知道吗,为什么做美食视频网站,企业所得税税负率,wp标题 wordpress变量var 关键字进行声明变量一个变量的声明声明一个变量#xff0c;并指定类型#xff0c;不立即赋值。
变量会被自动初始化为其类型的 “零值” #xff08;例如#xff0c;数值为 0#xff0c;字符串为 #xff0c;布尔值为 false#xff0c;指针为 nil并指定类型不立即赋值。
变量会被自动初始化为其类型的 “零值” 例如数值为 0字符串为 布尔值为 false指针为 nil。这个go语言进行声明后直接回进行转化成“零值”还是非常灵性的避免的C/C 基本数据类型定义出来不进行赋值时随机值的情况。
package main
import fmt//一个变量的声明定义
func test1(){fmt.Println(声明赋值分开进行)//var 进行声明变量 var count int//变量的赋值count18//变量的数用fmt.Println(count,count)fmt.Println(-----------------------------)fmt.Println(声明赋值放到一起)//声明赋值var num int 19//变量的数用fmt.Println(num,num)fmt.Println(-----------------------------)
}func main(){test1()
}多个变量的声明
package main
import fmt//一个变量的声明定义
func test1(){fmt.Println(声明赋值分开进行)//var 进行声明变量 var count int//变量的赋值count18//变量的数用fmt.Println(count,count)fmt.Println(-----------------------------)fmt.Println(声明赋值放到一起)//声明赋值var num int 19//变量的数用fmt.Println(num,num)fmt.Println(-----------------------------)
}//多个变量的声明定义
func test2(){var (count int 30num int 31)fmt.Println(count,count)fmt.Println(num,num)fmt.Println(-----------------------------)
}
func main(){test1()test2()
}var支持的类型推断var是可以进行类型推断的也就是说在定义变量的时候如果使用的是var关键字是不用进行声明类型的var是很聪明的即使我们不写他也能根据后面的赋值来进行推断。这就很像C中的auto 但是auto还是没有var智能因为auto只能一次声明定义推断一种变量类型。
//var支持的类型判断
func test3(){var (count 30num 31name xiao ying)fmt.Println(count,count)fmt.Println(num,num)fmt.Println(name,name)fmt.Println(-----------------------------)
}使用:短变量声明操作符这是 Go 语言中非常常用且 idiomatic (符合语言习惯) 的一种方式。它只能在函数内部使用。: 操作符会做两件事声明一个新的变量。初始化这个变量。它会自动进行类型推断所以你不需要写类型。还有一个非常重要的点: 的一个重要特点
在一个 : 声明中左侧至少要有一个是新声明的变量才可以使用 :。
package mainimport fmt// 注意: 不能用在函数外部
// a : 10 // 这行会编译错误func main() {// 等同于 var name string ysname : ys// 等同于 var age int 30age : 30// 等同于 var isStudent bool trueisStudent : truefmt.Printf(Name: %s, Age: %d, IsStudent: %v\n, name, age, isStudent)// 输出: Name: ys, Age: 30, IsStudent: true// 也可以同时声明和初始化多个变量// err 是一个新变量conn 不是假设之前已声明这时可以用 :conn, err : connectToDB() // 这是一个非常常见的用法
}数据类型基本数据类整数类型整数类型故名思意就是用于存放整数值的整数类型又分为 有符号整数、无符号整数以及其他整数类型有符号整数类型类型有无符号占用存储空间表数范围int8有1字节-2⁷ ~ 2⁷-1 (-128 ~ 127)int16有2字节-2¹⁵ ~ 2¹⁵-1 (-32768 ~ 32767)int32有4字节-2³¹ ~ 2³¹-1 (-2147483648 ~ 2147483647)int64有8字节-2⁶³ ~ 2⁶³-1无符号整数类型类型有无符号占用存储空间表数范围uint8无1字节0 ~ 255uint16无2字节0 ~ 2¹⁶-1uint32无4字节0 ~ 2³¹-1*uint64无8字节0 ~ 2⁶³-1*其他整数类型类型有无符号占用存储空间表数范围int有32位系统-4字节64位系统-8字节-2³¹ ~ 2³¹-1-2⁶³ ~ 2⁶³-1uint无32位系统-4字节64位系统-8字节0 ~ 2³²-10 ~ 2⁶⁴-1rune有等价int32-2³¹ ~ 2³¹-1byte无等价uint80 ~ 255上面这么多整型在实际的开发中我们应该如何进行选择呢golang中的思想是保小不保大在程序运行的过程中尽量使用小的数据类型。浮点类型浮点数的组成是 符号位指数位尾数位类型存储空间总位数指数位数尾数位数最大指数(约)float324字节328232¹²⁷float648字节6411522¹⁰²³注意①存储空间是由底层内存决定的不是由操作系统决定的②尾数只是一个大概容易出现精度损失字符类型特别说明golang 中是不存在专门的字符类型的而是通过ASCII值来进行代表对应的字符的golang中是使用UTF8编码。但是通常使用 byte 来进行存储字符因为byte类型代表的范围是0~255实际ASCII表中的字符只有0~127 完全可以进行覆盖。
package main
import fmtfunc main(){var c1 byte afmt.Println(c1)var c2 byte }fmt.Println(c2)fmt.Println(c120)var c3 byte afmt.Printf(c4对应的字符为:%c,c3)//var c4 byte 中//fmt.Println(c4)}通过上面的现象我们可以验证我们的结论字符的本质就是ASCII值如果将注释掉的代码进行放开则会出现报错汉字字符底层对应的是Unicode码值
对应的码值为20013byte类型溢出能存储的范围可以用int
总结Golang的字符对应的使用的是UTF-8编码Unicode是对应的字符集UTF-8是Unicode的其中的一种编码方案转义字符转义符含义Unicode值\b退格 (backspace)\u0008\n换行\u000a\r回车\u000d\t制表符 (tab)\u0009\双引号\u0022\单引号\u0027\\反斜杠\u005c布尔类型布尔类型也叫bool类型bool类型数据只允许取值true和false
布尔类型占1个字节。字符串类型
package main
import fmt
func main(){//1.定义一个字符串var s1 string 你好全面拥抱Golangfmt.Println(s1)//2.字符串是不可变的指的是字符串一旦定义好其中的字符的值不能改变var s2 string abc//s2 def//s2[0] tfmt.Println(s2)//3.字符串的表示形式//1如果字符串中没有特殊字符字符串的表示形式用双引号//var s3 string asdfasdfasdf//2如果字符串中有特殊字符字符串的表示形式用反引号 var s4 string package mainimport fmtfunc main(){//测试布尔类型的数值var flag01 bool truefmt.Println(flag01)var flag02 bool falsefmt.Println(flag02)var flag03 bool 5 9fmt.Println(flag03)}fmt.Println(s4)//4.字符串的拼接效果var s5 string abc defs5 hijkfmt.Println(s5)//当一个字符串过长的时候注意保留在上一行的最后var s6 string abc def abc def abc def abc def abc def abc def abc def abc defabc def abc def abc def abc def abc def abc def abc def abc def abc def abc def abc deffmt.Println(s6)
}复杂数据类型指针学习指针必须首先进行了解一下内存指针中存放的就是变量的地址指向对应的变量
package main
import(fmt
)
func main(){var age int 18//符号变量 就可以获取这个变量内存的地址fmt.Println(age) //0xc0000a2058//定义一个指针变量//var代表要声明一个变量//ptr 指针变量的名字//ptr对应的类型是*int 是一个指针类型 可以理解为 指向int类型的指针//age就是一个地址是ptr变量的具体的值var ptr *int agefmt.Println(ptr)fmt.Println(ptr本身这个存储空间的地址为,ptr)//想获取ptr这个指针或者这个地址指向的那个数据fmt.Printf(ptr指向的数值为%v,*ptr) //ptr指向的数值为18
}对应的内存