🎼个人主页:【Y小夜】
😎作者简介:一位双非学校的大三学生,编程爱好者,
专注于基础和实战分享,欢迎私信咨询!
🎆入门专栏:🎇【MySQL,Javaweb,Rust,python】
🎈热门专栏:🎊【Springboot,Redis,Springsecurity,Docker,AI】
感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️
目录
🎦常量
常量是一个简单值的标识符,在程序运作时,不会被修改的量。
常量中的数据类型只可以是布尔类型,数字型(整数型,浮点型和复数)和字符串型。
不能被修改
😋自动推导
但是这里的自动推导和变量是不同的,这里是直接使用 = 就可以。
package main
import "fmt"
func main() {
const URL = "wwww"
fmt.Println(URL)
}
😋多个常量的定义
package main
import "fmt"
func main() {
const a, b, c = 3.14, "aaa", false
fmt.Println(a, b, c)
}
😋iota
iota是特殊常量,可以认为是一个可以被编译器修改的常量,iota是go语言的常量计数器。
package main
import "fmt"
func main() {
const (
a = iota
b = iota
c = iota
)
fmt.Println(a, b, c)
}
如果不给他赋值,其实也会自动赋值,比如
package main
import "fmt"
func main() {
const (
a = iota
b
c
)
fmt.Println(a, b, c)
}
也是同样的效果
如果中间不定义的话,他就会继承上一个,一旦恢复的话,就继续加,例如
package main
import "fmt"
func main() {
const (
a = iota
b
c
d = "hahah"
e
f = 100
g
h = iota
i
)
fmt.Println(a, b, c, d, e, f, g, h, i)
}
如果再定义一组常量的话,他会重新计数
package main
import "fmt"
func main() {
const (
a = iota
b
c
d = "hahah"
e
f = 100
g
h = iota
i
)
const (
j = iota
k
)
fmt.Println(a, b, c, d, e, f, g, h, i, j, k)
}
🎦基本数据类型
Go语言是一种静态数据类型,在Go语言中,数据类型用于声明函数和变量,数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才能申请大内存,就可以充分利用内存,编译器在进行编译的时候,就知道每个值的类型,这样编译器就知道要为了这个值分配多少内存,并且知道这段分配的内存表示什么。
😋布尔类型
默认值为 false
package main
import "fmt"
func main() {
var isFloat bool
fmt.Printf("%T\n", isFloat)
fmt.Println(isFloat)
}
😋数值型
package main
import "fmt"
func main() {
var age int = 18
fmt.Printf("%T, %d\n", age, age)
var name float64 = 3.14
fmt.Printf("%T, %f", name, name)
}
注:浮点数默认是六位小数打印。
如果想要几位小数,在f前面加上.几就行。(但是会丢失精度,四舍五入)
package main
import "fmt"
func main() {
var age int = 18
fmt.Printf("%T, %d\n", age, age)
var name float64 = 3.14
fmt.Printf("%T, %.2f", name, name)
}
并且uint代表无符号的,也就是非负数。
float 有时候用的内存空间不够时,精度也会丢失。
package main
import "fmt"
func main() {
var num1 float32 = -123.0000901
var num2 float64 = -123.0000901
fmt.Println(num1, num2)
}
byte 类似于uint8
😋字符串类型
package main
import "fmt"
func main() {
var str string
str = "Hello World"
fmt.Printf("%T\n,%s\n", str,str)
}
如果用单引号的话,效果可能会不一样,我们来看一下
package main
import "fmt"
func main() {
var str string
str = "Hello World"
fmt.Printf("%T,%s\n", str, str)
v1 := 'A'
v2 := 'B'
fmt.Printf("%T,%s\n", v1, v1)
fmt.Printf("%T,%s\n", v2, v2)
}
发现根本打印不出来他的值,这时候我们发现他是int类型的,我们改变一下
package main
import "fmt"
func main() {
var str string
str = "Hello World"
fmt.Printf("%T,%s\n", str, str)
v1 := 'A'
v2 := 'B'
fmt.Printf("%T,%d\n", v1, v1)
fmt.Printf("%T,%d\n", v2, v2)
}
其实他打印的是ASCII码对应的十进制的值。
打印中文字符,发现可以打印成功,原因是所有的中文在GBK编码表中,但全全世界的编码表是Unicode编码表
package main
import "fmt"
func main() {
var str string
str = "Hello World"
fmt.Printf("%T,%s\n", str, str)
v1 := 'A'
v2 := 'B'
fmt.Printf("%T,%d\n", v1, v1)
fmt.Printf("%T,%d\n", v2, v2)
v3 := '中'
fmt.Printf("%T,%d\n", v3, v3)
}
字符串连接:直接用Java进行连接就行,和Java是一样的。
package main
import "fmt"
func main() {
fmt.Printf("Hello," + "World")
}
转义字符是 \ ,这里不在讲了,和c语言一样。
🎦数据类型转换
由于Go语言不存在隐式类型的转换,所有的类型都必须显示的声明。
package main
import "fmt"
func main() {
a:=3
c:=float64(a)
fmt.Printf("%T\n", a)
fmt.Printf("%T\n", c)
}
试一试可以转换为布尔类型吗》但是不行的,无法正常转换
package main
import "fmt"
func main() {
a := 3
c := float64(a)
b = bool(a)
fmt.Printf("%T\n", a)
fmt.Printf("%T\n", c)
fmt.Printf("%T\n", b)
}
注:类型转换只能在定义正确的情况下,将大范围转换为小范围时,会出现精度丢失;