设为首页 加入收藏

TOP

Go类型全解:常量与变量大全!(二)
2023-09-23 15:44:02 】 浏览:395
Tags:全解 常量与
t visible" // 不可导出的常量

常量溢出和默认类型

一个类型不确定常量所表示的值可能会溢出其默认类型。在这种情况下,只有当这个常量被用于一个可以容纳该值的上下文时,编译才会成功。

const big = 1 << 100 // 默认类型为 int,但值会溢出
var bigInt = big >> 99 // big 被用于一个 int64 上下文,没有溢出

字符串常量

字符串常量是包含在双引号中的一系列字符。

const hello = "Hello, world!"

布尔常量

布尔常量只有两个可能的值:truefalse

const flagTrue = true
const flagFalse = false

枚举常量

通过使用 iota,你可以创建一组递增的整数常量,通常用于枚举。

type Weekday int

const (
    Sunday Weekday = iota
    Monday
    Tuesday
    // ...
    Saturday
)

复数常量

Go 支持复数类型,并且你可以创建复数常量。

const complexConst = 1 + 2i

强制类型转换

你可以通过强制类型转换将一个常量转换为另一种类型。

const integer = 42
const floatType = float32(integer)

计算表达式中的常量

常量也可以是计算表达式的结果,但表达式必须只包含常量值。

const calculated = 3 * 2  // 6

常量数组和切片

需要注意的是,在 Go 中,数组大小需要是常量。但切片和映射的大小可以动态改变,因此它们不能是常量。

const arraySize = 5
var arr [arraySize]int  // 合法

五、变量

变量是存储数据值的存储单元,其值可以在运行时改变。在 Go 语言中,变量的使用非常灵活但又具有严格的类型安全性。

变量声明和赋值

基本声明

使用 var 关键字进行变量声明。

var x int

同时声明和赋值

var y int = 42

或者使用短变量声明形式:

z := 42

多变量声明

var a, b, c int

或者

var (
    d int
    e float64
)

类型描述

基本类型

包括 int, float64, bool, string 等。

var integerVar int = 10
var floatVar float64 = 10.99
var boolVar bool = true
var stringVar string = "Hello, Go"

数值类型

Go 支持多种数值类型,包括 int8, int16, int32, int64, uint8, uint16, uint32, uint64, float32, float64 等。

var smallInt int8 = 127
var largeInt int64 = 9223372036854775807
var unsignedInt uint16 = 65535
var floatNum float32 = 3.141592

字符和字符串

Go 有 runebyte 类型来表示 Unicode 字符和 ASCII 字符。

var asciiChar byte = 'A'
var unicodeChar rune = '你'
var str string = "Hello, World!"

布尔类型

布尔类型只有两个值:truefalse

var isActive bool = true
var isCompleted bool = false

指针

Go 支持指针类型,但不支持指针运算。

var pointer *int
x := 42
pointer = &x

数组和切片

var arrayExample [5]int = [5]int{1, 2, 3, 4, 5}
var sliceExample []int = arrayExample[1:4]

映射(Maps)

var countryCapitalMap map[string]string
countryCapitalMap = make(map[string]string)
countryCapitalMap["France"] = "Paris"

结构体(Structs)

type Employee struct {
    ID     int
    Name   string
    Salary float64
}

var emp Employee

接口(Interfaces)

type Shape interface {
    Area() float64
}

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return 3.14159 * c.Radius * c.Radius
}

var s Shape = Circle{5.0}

函数类型

Go 中,函数也是一种类型,可以作为参数传递。

type AddFunc func(a int, b int) int

var add AddFunc = func(a int, b int) int {
    return a + b
}

通道(Channels)

var messageChannel chan string = make(chan string)

复合类型

例如数组、切片、映射、通道、结构体和接口。

数组

var arr [5]int

切片

var slice []int

映射

var mapping map[string]int

通道

var ch chan int

结构体

type Person struct {
    name string
    age int
}

var p Person

接口

type Geometry interface {
    Area() float64
}

var g Geometry

值的可寻址性

Go 语言中有些变量是可寻址的,意味着你可以获取这个变量的内存地址。

var myVar int = 42
var p *int = &myVar

变量作用域

在 Go 中,变量可以有不同的作用域:全局作用域、包内作用域、函数作用域、代码块作用域等。

var globalVar int  // 全局作用域

func myFunction() {
    var functionVar int  // 函数作用域
    {
        var blockVar int  // 代码块作用域
    }
}

七、常量和变量的高级用法

在 Go 编程中,常量和变量不仅仅是数据存储的简单方式。它们有各种高级用法,可以用来优化代码、提高效率或实现复杂的编程模式。

常量的高级用法

枚举和 iota

Go 通过 iota 关键字支持枚举类型的实现。这在一组常量声明中是非常有用的。

const (
    Monday = iota + 1  // Monday = 1
    Tuesday            // Tuesday = 2
    Wednesday          // Wednesday = 3
)

类型别名

使用类型别名,你可以将常量限制为自定义类型。

type Weekday int

const (
    Sunday Weekday = iota
    Monday
    // ...
)

无类型和有类型常量

无类型的常量可以用在多种场合,它们会根据上下文进行类型推断。

const x = 42  // 无类型常量
var i int = x
var f float64 = x

变量的高级用法

变量的作用域

G

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Go学习笔记4 下一篇一文简单了解函数类型

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目