Go 语言核心概念解析:开启高效编程之门(三)

发布于:2025-07-13 ⋅ 阅读:(10) ⋅ 点赞:(0)

🎼个人主页:【Y小夜】

😎作者简介:一位双非学校的大三学生,编程爱好者,

专注于基础和实战分享,欢迎私信咨询!

🎆入门专栏:🎇【MySQLJavawebRustpython

🎈热门专栏:🎊【SpringbootRedisSpringsecurityDockerAI】 

感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️

目录

🎦常量

😋自动推导

😋多个常量的定义

😋iota

🎦基本数据类型

😋布尔类型

😋数值型

😋字符串类型

🎦数据类型转换


🎦常量

常量是一个简单值的标识符,在程序运作时,不会被修改的量。

常量中的数据类型只可以是布尔类型,数字型(整数型,浮点型和复数)和字符串型

不能被修改

😋自动推导

但是这里的自动推导和变量是不同的,这里是直接使用 = 就可以。

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)
}

 注:类型转换只能在定义正确的情况下,将大范围转换为小范围时,会出现精度丢失;


网站公告

今日签到

点亮在社区的每一天
去签到