哈喽,大家好,我是 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
}


分享、点赞、在看