go语言中的数据类型

简介: go语言中的数据类型

go语言中的数据类型


Go 语言中的数据类型可以分为以下几类:


  1. 基本类型
  • 布尔型:bool,取值为 true 或 false
  • 数字类型:包括整数类型(int、int8、int16、int32、int64)、浮点数类型(float32、float64)、复数类型(complex64、complex128)
  • 字符串:用双引号或反引号括起来的字符序列


2 复合类型

  • 数组:由一组固定大小的相同类型元素组成
  • 切片:比数组更灵活的动态数组,长度不固定
  • 结构体:由一组具有不同类型的字段组成
  • 指针:指向内存地址的变量
  • 函数类型:由函数返回值和参数类型组成


  1. 接口类型
  • 接口:定义了一组方法签名的抽象类型,可以用于实现多态

注意,在 Go 语言中有些类型是预定义的别名类型,如 byte 和 rune,它们

实际上是 uint8 和 int32 的别名。还有一种特殊的类型 nil 表示空值,可以表示指针、切片、映射、通道、函数和接口类型的零值。


  • 代码演示:
package main

import (
  "fmt"
)

// 定义一个结构体
type Person struct {
  Name string // 姓名
  Age  int    // 年龄
}

// 定义一个接口
type Speaker interface {
  Speak() string // 定义了一个方法 Speak(),返回字符串
}

// 实现接口方法
func (p Person) Speak() string {
  // 实现了接口方法,返回一个包含姓名和年龄的字符串
  return fmt.Sprintf("My name is %s and I am %d years old.", p.Name, p.Age)
}

func main() {
  // 基本类型
  var b bool = true // 布尔型变量 b,赋值为 true

  var i int = 10                      // 整数类型变量 i,赋值为 10
  var i8 int8 = 127                   // int8 类型变量 i8,赋值为 127
  var i16 int16 = 32767               // int16 类型变量 i16,赋值为 32767
  var i32 int32 = 2147483647          // int32 类型变量 i32,赋值为 2147483647
  var i64 int64 = 9223372036854775807 // int64 类型变量 i64,赋值为 9223372036854775807

  var f32 float32 = 3.14              // float32 类型变量 f32,赋值为 3.14
  var f64 float64 = 3.141592653589793 // float64 类型变量 f64,赋值为 3.141592653589793

  var c64 complex64 = 3 + 4i   // complex64 类型变量 c64,赋值为 3 + 4i
  var c128 complex128 = 3 + 4i // complex128 类型变量 c128,赋值为 3 + 4i

  var str1 string = "Hello, Go!" // 字符串变量 str1,赋值为 "Hello, Go!"
  str2 := `Hello, Go!`           // 字符串变量 str2,赋值为 "Hello, Go!"

  // 复合类型
  var arr [3]int = [3]int{1, 2, 3}        // 数组 arr,包含 3 个 int 元素
  slice := []int{1, 2, 3}                 // 切片 slice,包含 3 个 int 元素
  person := Person{Name: "John", Age: 30} // 结构体类型变量 person,包含姓名和年龄字段
  var ptr *int                            // 指针 ptr,指向 int 类型的内存地址
  funcType := func() {}                   // 函数类型变量 funcType,空函数

  // 接口类型
  var speaker Speaker // 接口类型变量 speaker
  speaker = person    // 将 person 赋值给 speaker

  // 打印输出
  fmt.Println("布尔型:", b)
  fmt.Println("整数类型:", i, i8, i16, i32, i64)
  fmt.Println("浮点数类型:", f32, f64)
  fmt.Println("复数类型:", c64, c128)
  fmt.Println("字符串:", str1, str2)
  fmt.Println("数组:", arr)
  fmt.Println("切片:", slice)
  fmt.Println("结构体:", person)
  fmt.Println("指针:", ptr)
  fmt.Println("函数类型:", funcType)
  fmt.Println("接口类型:")
  fmt.Println(speaker.Speak())
}

  • 运行结果
布尔型: true
整数类型: 10 127 32767 2147483647 9223372036854775807
浮点数类型: 3.14 3.141592653589793
复数类型: (3+4i) (3+4i)
字符串: Hello, Go! Hello, Go!
数组: [1 2 3]
切片: [1 2 3]
结构体: {John 30}
指针: <nil>
函数类型: 0x1401a0
接口类型:
My name is John and I am 30 years old.

  • 运行结果解释
布尔型: true:布尔型变量 b 的值为 true。
整数类型: 10 127 32767 2147483647 9223372036854775807:分别是整数类型变量 i、i8、i16、i32、i64 的值。
浮点数类型: 3.14 3.141592653589793:分别是浮点数类型变量 f32、f64 的值。
复数类型: (3+4i) (3+4i):分别是复数类型变量 c64、c128 的值。
字符串: Hello, Go! Hello, Go!:分别是字符串类型变量 str1、str2 的值。
数组: [1 2 3]:数组 arr 的内容。
切片: [1 2 3]:切片 slice 的内容。
结构体: {John 30}:结构体 person 的内容,包含姓名 John 和年龄 30。
指针: <nil>:指针 ptr 的值为 nil,表示未指向任何内存地址。
函数类型: 0x1401a0:函数类型变量 funcType 的内存地址。
接口类型: My name is John and I am 30 years old.:调用接口方法 Speak() 后的输出结果,输出了 person 的姓名和年龄信息。

相关文章
|
2月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
169 1
|
4月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
289 1
|
10月前
|
编译器 Go
揭秘 Go 语言中空结构体的强大用法
Go 语言中的空结构体 `struct{}` 不包含任何字段,不占用内存空间。它在实际编程中有多种典型用法:1) 结合 map 实现集合(set)类型;2) 与 channel 搭配用于信号通知;3) 申请超大容量的 Slice 和 Array 以节省内存;4) 作为接口实现时明确表示不关注值。此外,需要注意的是,空结构体作为字段时可能会因内存对齐原因占用额外空间。建议将空结构体放在外层结构体的第一个字段以优化内存使用。
|
10月前
|
运维 监控 算法
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
4月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
376 0
|
4月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
241 0
|
4月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
218 0
|
4月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
312 0
|
4月前
|
数据采集 Go API
Go语言实战案例:多协程并发下载网页内容
本文是《Go语言100个实战案例 · 网络与并发篇》第6篇,讲解如何使用 Goroutine 和 Channel 实现多协程并发抓取网页内容,提升网络请求效率。通过实战掌握高并发编程技巧,构建爬虫、内容聚合器等工具,涵盖 WaitGroup、超时控制、错误处理等核心知识点。
|
4月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。