02.内建变量类型

在 Go 语言中,内建变量类型、强制类型转换和浮点数操作是非常重要的概念。

内建变量类型

Go 语言有多种内建变量类型,包括基本类型和复合类型。

基本类型

  • 布尔型: bool(值为 truefalse
  • 整型:
    • 有符号整型: int8, int16, int32, int64
    • 无符号整型: uint8(别名 byte),uint16, uint32, uint64
    • 特殊整型: int, uint(根据平台不同,可能是 32 位或 64 位),uintptr
      • 无长度 int 的实际长度取决于操作系统位数(32/64)
        uintptr 为指针类型
  • 浮点型: float32, float64
  • 复数型: complex64, complex128
    • complex 为复数(1+1i)
  • 字符串: string
  • byte,rune

    rune 为 Go 语言的字符型相当于其他语言的 char ,长度为4字节 int32

复合类型

  • 数组: [n]T
  • 切片: []T
  • 映射: map[K]V
  • 结构体: struct { ... }
  • 指针: *T
  • 通道: chan T
  • 函数: func(...T) T

强制类型转换

golang有严格的类型匹配,不同的类型之间通常需要手动转换(interface类型除外),编译器不会进行自动转换

 修改后:

 

浮点数进度

  浮点数有两种表示方式:float32float64,分别表示 32 位和 64 位的浮点数。float64 提供更高的精度。

  浮点数运算会丢失精度,解决方法很多,在测试代码中提供了一种,思路为:如果要保留m位小数,对m + 1位加0.5后四舍五入

代码

package main

import (
    "fmt"
    "math"
    "math/cmplx"
)

func variableZeroValue() {
    //赋空值
    var a int
    var s string
    fmt.Printf("%d %q\n", a, s)
}

func variableInitialValue() {
    //初始变量,Go语言非常严格,定义了就要用到
    //定义多个变量可赋初值也可不赋
    var a, b int = 3, 4
    var s string = "abc"
    fmt.Println(a, b, s)
}

func variableTypeDeduction() {
    //推断类型
    var a, b, c, d = 3, 4, true, "def"
    println(a, b, c, d)
}

func variableShorter() {
    a, b, c, d := 3, 4, true, "def"
    b = 7
    fmt.Println(a, b, c, d)
}

var name = "jj"
var age = 24
var (
    name1 = "aa"
    age1  = 22
)

func euler() {
    //验证欧拉公式
    fmt.Printf("%.3f\n",
        cmplx.Exp(1i*math.Pi)+1)
    //cmplx.Pow(math.E, 1i*math.Pi) + 1)
}

func triangle() {
    var a, b int = 3, 4
    var c int
    c = int(math.Sqrt(float64(a*a + b*b)))
    fmt.Println(c)
}

func main() {
    fmt.Println("Hello World")
    variableZeroValue()
    variableInitialValue()
    variableTypeDeduction()
    variableShorter()
    fmt.Println(name, age)
    fmt.Println(name1, age1)
    euler()
    triangle()
}

 

posted @ 2024-07-06 02:18  JJJhr  阅读(4)  评论(0编辑  收藏  举报