哈喽,大家好,我是 Go大叔,专注分享 Go 语言知识,一起进入 Go 的大门。
Go语言常量相关的知识点
一个人走的太慢,一群人才能走的更远。
Go语言常量
#include <stdio.h>
int main(int argc, const char * argv[])
{
const float PI = 998;
PI = 110; // 报错
printf("PI = %d\n", PI );
return 0;
}
package main
import "fmt"
func main() {
//const PI float32 = 3.14
//PI = 110 // 报错
//fmt.Println("PI = ", PI )
const PI = 3.14
PI = 110 // 报错
fmt.Println("PI = ", PI )
}
package main
import "fmt"
func main() {
// 多重赋值方式
const num1, num2 int = 100, 200
fmt.Println("num1 = ", num1)
fmt.Println("num2 = ", num2)
// 常量组方式
const (
num3 = 100
num4 = 200
)
fmt.Println("num3 = ", num3)
fmt.Println("num4 = ", num4)
// 常量组+多重赋值
const (
num5, num6 = 100, 200
num7 = 300
)
fmt.Println("num5 = ", num5)
fmt.Println("num6 = ", num6)
fmt.Println("num7 = ", num7)
}
package main
import "fmt"
func main() {
// 可以编译运行
const PI float32 = 3.14
}
package main
import "fmt"
func main() {
const (
num1 = 998
num2 // 和上一行的值一样
num3 = 666
num4 // 和上一行的值一样
num5 // 和上一行的值一样
)
fmt.Println("num1 = ", num1) // 998
fmt.Println("num2 = ", num2) // 998
fmt.Println("num3 = ", num3) // 666
fmt.Println("num4 = ", num4) // 666
fmt.Println("num5 = ", num5) // 666
const (
num1, num2 = 100, 200
num3, num4 // 和上一行的值一样, 注意变量个数必须也和上一行一样
)
fmt.Println("num1 = ", num1)
fmt.Println("num2 = ", num2)
fmt.Println("num3 = ", num3)
fmt.Println("num4 = ", num4)
}
枚举常量 C语言中枚举类型的本质就是整型常量 Go语言中没有C语言中明确意义上的enum定义, 但是可以借助iota标识符来实现枚举类型 C语言枚举格式:
enum 枚举名 {
枚举元素1,
枚举元素2,
… …
};
#include <stdio.h>
int main(int argc, const char * argv[])
{
enum Gender{
male,
female,
yao,
};
// enum Gender g = male;
// printf("%d\n", g); // 0
// enum Gender g = female;
// printf("%d\n", g); // 1
enum Gender g = yao;
printf("%d\n", g); // 2
return 0;
}
#include <stdio.h>
int main(int argc, const char * argv[])
{
enum Gender{
male = 5,
female,
yao,
};
// enum Gender g = male;
// printf("%d\n", g); // 5
// enum Gender g = female;
// printf("%d\n", g); // 6
enum Gender g = yao;
printf("%d\n", g); // 7
return 0;
}
Go语言实现枚举格式
const(
枚举元素1 = iota
枚举元素2 = iota
... ...
)
package main
import "fmt"
func main() {
const (
male = iota
female = iota
yao = iota
)
fmt.Println("male = ", male) // 0
fmt.Println("male = ", female) // 1
fmt.Println("male = ", yao) // 2
}
package main
import "fmt"
func main() {
const (
male = iota // 这里出现了iota
female // 这里会自动递增
yao
)
fmt.Println("male = ", male) // 0
fmt.Println("male = ", female) // 1
fmt.Println("male = ", yao) // 2
}
package main
import "fmt"
func main() {
const (
male = iota
female = 666 // 这里被中断, 如果没有显示恢复, 那么下面没有赋值的常量都和上一行一样
yao
)
fmt.Println("male = ", male) // 0
fmt.Println("male = ", female) // 666
fmt.Println("male = ", yao) // 666
}
package main
import "fmt"
func main() {
const (
male = iota
female = 666 // 这里被中断
yao = iota // 这里显示恢复, 会从当前常量组第一次出现iota的地方开始,每一行递增1, 当前是第3行,所以值就是2
)
fmt.Println("male = ", male) // 0
fmt.Println("male = ", female) // 666
fmt.Println("male = ", yao) // 2
}
package main
import "fmt"
func main() {
const (
a, b = iota, iota
c, d = iota, iota
)
fmt.Println("a = ", a) // 0
fmt.Println("b = ", b) // 0
fmt.Println("c = ", c) // 1
fmt.Println("d = ", d) // 1
}
package main
import "fmt"
func main() {
const (
male float32 = iota // 显示指定类型,后续自增都会按照指定类型自增
female
yao
)
fmt.Printf("%f\n", male) // 0.0
fmt.Printf("%f\n", female) // 1.0
fmt.Printf("%f\n", yao) // 2.0
fmt.Println("male = ", reflect.TypeOf(female)) // float32
}
分享、点赞、在看