목차
Go 언어 데이터 유형
1.4.注意
1.5.数字字面量语法
2.浮点型
3.复数
4.布尔值
5.字符串
5.1.定义一个字符串类型的变量
5.2.字符串转义
5.3.字符串转义-实例演示
5.4.字符串操作
5.5.字符串操作-实例演示
6.字符
6.1.定义一个字符变量
6.2.字符类型有两种
6.2.1.uint8-类型字符
6.2.2.rune-类型字符
7.字符串拓展
7.1.字符串遍历-方法1-使用循环依次取出字符串中的元素
7.2.字符串遍历-方法2-rune-类型遍历可以使用 for range 循环
7.3.字符串修改
8.类型转换
8.1.类型转换-语法
8.1.类型转换-实例演示
백엔드 개발 Golang Go 언어에는 어떤 데이터 유형이 있나요?

Go 언어에는 어떤 데이터 유형이 있나요?

Dec 20, 2022 pm 12:00 PM
golang 언어로 가다 데이터 유형

Go 언어의 데이터 유형은 다음과 같습니다. 1. 부울 유형, 값은 상수 true 또는 false만 가능합니다. 2. 정수 및 부동 소수점 숫자를 지원하고 복소수를 지원하는 숫자 유형; , 고정 길이 문자로 연결된 문자열 4. 배열 유형 7. 채널 유형 10. 인터페이스 유형 . 지도 유형 .

Go 언어에는 어떤 데이터 유형이 있나요?

이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.

Go 언어 데이터 유형

Go 프로그래밍 언어에서 데이터 유형은 함수와 변수를 선언하는 데 사용됩니다.

데이터 유형의 출현은 데이터를 필요한 메모리 크기가 다른 데이터로 나누는 것입니다. 프로그래밍 시 빅데이터를 사용해야 하는 경우에만 대용량 메모리를 적용해야 메모리를 최대한 활용할 수 있습니다.

Go 언어에는 카테고리별로 다음과 같은 데이터 유형이 있습니다.

Go 언어에는 기본 정수, 부동 소수점 유형, 부울 유형 및 문자열 외에도 배열, 슬라이스, 구조, 함수, 맵, 채널 등이 있습니다.
일련 번호 유형 및 설명
1 Boolean
Boolean의 값은 상수 true 또는 false만 될 수 있습니다. 간단한 예: var b bool = true.
2 Number 유형
정수 유형 int 및 부동 소수점 유형 float32, float64, Go 언어는 정수 및 부동 소수점 숫자를 지원하고 비트 연산이 보수 코드를 사용하는 복소수를 지원합니다.
3 문자열 유형:
문자열은 일련의 고정 길이 문자로 연결된 문자 시퀀스입니다. Go의 문자열은 단일 바이트로 연결됩니다. Go 언어 문자열의 바이트는 UTF-8 인코딩을 사용하여 유니코드 텍스트를 식별합니다.
4 파생 유형:
포함:
  • (a) 포인터 유형(포인터)

  • (b) 배열 유형

  • (c) 구조 유형(struct)

  • 엔 (D) 채널 유형
  • (e) 기능 유형
  • (F) 슬라이싱 유형
  • (g) 인터페이스 유형(인터페이스)
  • (h) 맵 유형


1. 정수

정수
1.1. 정수는 두 가지 범주로 구분됩니다

점유된 메모리 길이에 따라 구분됩니다
  • int8、int16、int32、int64
    로그인 후 복사
더하기 또는 빼기 기호가 있는지 여부에 따라 구분됩니다 - 부호 없는 정수
  • uint8、uint16、uint32、uint64
    로그인 후 복사
C 언어와의 비교
  • uint8 对应 byte 型
    int16 对应 C 语言中的 short 型
    int64 对应 C 语言中的 long 型
    로그인 후 복사
1.2. 정수 설명

Typeint8int16int32int64 uint8uint16uint32uint64
Description
부호 있는 8비트 정수( -1 28~127)
부호 있는 16비트 정수(-32768~32767)
부호 있는 32비트 정수(-2147483648~2147483647)
서명된 64비트 정수( -9223372036854775808 ~ 9223372036854775807 )
부호 없는 8비트 정수(0~255)
부호 없는 16비트 정수(0~6553 5)
unsign ed 32비트 정수형( 0~4294967295)
부호 없는 64비트 정수형(0~18446744073709551615)
1.3.

Type

Descriptionint 32비트 운영 체제에서는 int32, 64비트 운영 체제에서는 int64uint32비트 운영 체제에서는 uint32, 64비트 운영 체제에서는 uint32입니다. uint64uintptr포인터를 저장하는 데 사용되는 부호 없는 정수 유형

1.4.注意

1.在使用 int 和 uint 类型时,不能假定它是 32 位或 64 位的整型,而是考虑 int 和 uint 可能在不同平台上的差异
2.获取对象的长度的内建 len() 函数返回的长度可以根据不同平台的字节长度进行变化
3.实际使用中,切片或 map 的元素数量等都可以用 int 来表示
4.在涉及到二进制传输,读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用 int 和 uint
로그인 후 복사

1.5.数字字面量语法

  • Number literals syntax

  • Go1.13 版本之后引入了 数字字面量语法,这样便于开发者以二进制、八进制或十六进制浮点数的格式定义数字

  • 内存地址是以十六进制数进行保存的

v := 0b00101101, 代表二进制的 101101,相当于十进制的 45
v := 0o377,代表八进制的 377,相当于十进制的 255
v := 0x1p-2,代表十六进制的 1 除以 2²,也就是 0.25
로그인 후 복사
  • 允许用下划线 _ 来分隔数字
v := 123_456 表示 v 的值等于 123456。
로그인 후 복사
  • 可以借助 fmt 函数来将一个整数以不同进制形式展示
package main

import "fmt"

func main() {
    // 定义十进制数
    var a int = 10
    fmt.Printf("%d \n", a) // 占位符 %d 表示使用十进制显示为 10
    fmt.Printf("%b \n", a) // 占位符 %b 表示使用二进制显示为 1010

    // 定义八进制数,需要以 0 开头
    var b int = 077
    fmt.Printf("%o \n", b) // 占位符 %o 表示使用八进制显示为 77

    // 定义十六进制数,需要以 0x 开头
    var c int = 0xff
    fmt.Printf("%x \n", c) // 占位符 %x 表示使用十六进制显示为 ff,小写字母显示
    fmt.Printf("%X \n", c) // 占位符 %X 表示使用十六进制显示为 FF,大写字母显示
}
로그인 후 복사

2.浮点型

  • Go 语言支持两种浮点型数:float32 和 float64 ,这两种浮点型数据格式遵循 IEEE 754 标准
float32 的浮点数的最大范围约为 3.4e38,可以使用常量定义:math.MaxFloat32
float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:math.MaxFloat64
打印浮点数时,可以使用 fmt 包配合 %f
로그인 후 복사
  • 实例演示:
package main
import (
    "fmt"
    "math"
)
func main() {
    fmt.Printf("%f\n", math.Pi)
    fmt.Printf("%.2f\n", math.Pi)
}
로그인 후 복사

3.复数

  • complex64 和 complex128
  • 复数有实部和虚部,complex64 的实部和虚部为 32 位,complex128 的实部和虚部为 64 位
var c1 complex64
c1 = 1 + 2i
var c2 complex128
c2 = 2 + 3i
fmt.Println(c1)
fmt.Println(c2)
로그인 후 복사

4.布尔值

  • Go 语言中以 bool 类型进行声明布尔型数据
1.布尔型数据只有 true 和 false 两个值,布尔类型变量的默认值为 false。
2.Go 语言中不允许将整型强制转换为布尔型.
3.布尔型无法参与数值运算,也无法与其他类型进行转换
로그인 후 복사

5.字符串

  • Go 语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样
  • Go 语言字符串使用 UTF-8 编码,可以在 Go 语言的源码中直接添加非 ASCII 码字符

5.1.定义一个字符串类型的变量

  • 使用 双引号 定义 单行字符串 变量

  • 使用 反引号 定义 多行字符串 变量

  • 使用 单引号 定义 单个字符 变量

  • 实例演示

package main

import "fmt"

func main() {
    // 使用 双引号 定义 单行字符串 变量
    s1 := "hello" //定义英文字符串
    s2 := "你好"    // 可以识别非 ASCII 码,默认支持 utf-8 编码

    // 使用 反引号 定义 多行字符串 变量
    s3 := `
11111
22222   // 多行字符串里的双斜杠也表示注释
33333
`

    // 使用 单引号 定义 单个字符 变量
    s4 := 'h'

    fmt.Println("\n单行字符串01", s1)
    fmt.Println("\n单行字符串02", s2)
    fmt.Println("\n多行字符串", s3)
    fmt.Println("\n字符定义", s4)
}
로그인 후 복사

5.2.字符串转义

  • Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等
转义符 含义
\r 回车符 (返回行首)
\n 换行符 (直接跳到下一行的同列位置)
\t 制表符
' 单引号
" 双引号
\ 反斜杠

5.3.字符串转义-实例演示

package main

import (
    "fmt"
)

func main() {
    // 转义符的使用
    fmt.Println("\n# 转义符的使用 str := \"c:\\go\"")
}
로그인 후 복사

5.4.字符串操作

方法 方法说明
len(str) 求长度
+或fmt.Sprintf 拼接字符串
strings.Split 分割
strings.contains 判断是否包含
strings.HasPrefix,strings.HasSuffix 前缀/后缀判断
strings.Index(),strings.LastIndex() 子串出现的位置
strings.Join(a[]string, sep string) join操作

5.5.字符串操作-实例演示

package main

import (
    "fmt"
    "strings"
)

// 字符串操作
func main() {
    // 字符串求长度
    s3 := "zhongguojueqi"
    fmt.Println("\n字符串-求长度: ", len(s3))
    
    // 字符串拼接
    s4 := "nihaoshijie"
    fmt.Println("\n字符串-拼接01: ", s3+s4)
    
    s5 := fmt.Sprintf("%s---%s", s3, s4)
    fmt.Println("\n字符串-拼接02: ", s5)
    
    // 字符串分割
    s6 := strings.Split(s3, "o")
    fmt.Println("\n字符串-分割: ", s6)
    
    // 字符串包含判断
    s7 := strings.Contains(s3, "o")
    fmt.Println("\n字符串-包含判断01: ", s7)
    fmt.Println("\n字符串-包含判断02: ", strings.Contains(s3, "o"))
    
    // 字符串前缀, 后缀判断
    fmt.Println("\n字符串-前缀判断: ", strings.HasPrefix(s3, "zhong"))
    fmt.Println("\n字符串-后缀判断: ", strings.HasSuffix(s3, "qi"))
    
    // 字符串索引查找
    fmt.Println("\n字符串-索引查找-第一个字符 o 的索引: ", strings.Index(s3, "o"))
    fmt.Println("\n字符串-索引查找-最后一个字符 o 的索引: ", strings.LastIndex(s3, "o"))
    
    // 字符串-join操作
    s8 := []string{"aaa", "bbb", "ccc", "ddd"}
    fmt.Println("\n字符串-join 操作: ", strings.Join(s8, " + "))
}
로그인 후 복사

6.字符

6.1.定义一个字符变量

  • 组成字符串的元素叫做 字符,使用单引号进行定义字符类型变量,字符串使用双引号定义
  • 可以通过遍历或者单个获取字符串元素获得字符
func runeDemo01() { // 字符定义
    a := '中'         // 默认识别为 rune 类型的字符变量
    b := "中"         // 定义一个字符串
    var c byte = 'a' // 定义一个byte类型字符
    var d rune = 'a' // 定义一个rune类型字符
    fmt.Println(a, b)
    fmt.Printf("%v,%T\n", c, c)
    fmt.Printf("%v,%T\n", d, d)
}
로그인 후 복사

6.2.字符类型有两种

6.2.1.uint8-类型字符

  • go 语言中一般的英文数字字符使用 ASCII 码的一个字符,占据 8 位 bit 的内存空间,也就是常用的 byte 型

6.2.2.rune-类型字符

  • go 语言中处理中文日文或者其他复合字符时,需要用到 rune 类型,rune 类型实际是一个 int32,代表一个 UTF-8 字符(Unicode编码)

7.字符串拓展

7.1.字符串遍历-方法1-使用循环依次取出字符串中的元素

// 字符串遍历-traversalString
package main

import (
    "fmt"
)

func traversalString01() {
    s := "hello世界"
    for i := 0; i < len(s); i++ { // 中英文使用 for循环加 len() 方法遍历循环,但遇到中文会有乱码
      fmt.Printf("%v(%c) ", s[i], s[i])
    }
    fmt.Println()
    fmt.Println([]byte(s))
}
-----------------------
104(h) 101(e) 108(l) 108(l) 111(o) 228(ä) 184(¸) 150() 231(ç) 149() 140()
-----------------------
로그인 후 복사

7.2.字符串遍历-方法2-rune-类型遍历可以使用 for range 循环

package main

import (
    "fmt"
)

// 遍历字符串 traversalString
func traversalString02() {
    s := "hello世界"
    fmt.Println()
    for _, r := range s { // 按照 rune 类型遍历
        fmt.Printf("%v(%c) ", r, r)
    }
    fmt.Println()
    fmt.Println([]rune(s))

}
-----------------------
104(h) 101(e) 108(l) 108(l) 111(o) 19990(世) 30028(界)
-----------------------
로그인 후 복사
  • 结果分析:
1.因为 UTF8 编码下一个中文汉字由 3~4 个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出中第一行的结果
2.字符串底层是一个 byte 数组,所以可以和 []byte 类型相互转换
3.字符串是不能修改的 字符串是由 byte 字节组成,所以字符串的长度是 byte 字节的长度
4.rune 类型用来表示 utf8 字符,一个 rune 字符由一个或多个 byte 组成。
로그인 후 복사

7.3.字符串修改

  • 字符串是固定值无法修改,如果要修改字符串,需要先将其转换成 []rune 或 []byte,完成后再转换为 string 类型。无论哪种转换,都会重新分配内存,并复制字节数组
func changeString() {
    s1 := "big"
    // 强制类型转换
    byteS1 := []byte(s1)
    byteS1[0] = 'p'
    fmt.Println(string(byteS1))

    s2 := "白萝卜"
    runeS2 := []rune(s2)
    runeS2[0] = '红'
    fmt.Println(string(runeS2))
}
로그인 후 복사

8.类型转换

  • Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用

8.1.类型转换-语法

T(表达式)
로그인 후 복사
  • 其中,T 表示要转换的类型,表达式包括变量、复杂算子和函数返回值等

8.1.类型转换-实例演示

func sqrtDemo() {
  var a, b = 3, 4
  var c int
  // math.Sqrt()接收的参数是float64类型,需要强制转换
  c = int(math.Sqrt(float64(a*a + b*b)))
  fmt.Println(c)
}
로그인 후 복사
  • 说明

计算直角三角形的斜边长时使用 math 包的 Sqrt() 函数,该函数接收的是 float64 类型的参数
而变量 a 和 b 都是 int 类型的,这个时候就需要将 a 和 b 强制类型转换为 float64 类型

【相关推荐:Go视频教程编程教学

위 내용은 Go 언어에는 어떤 데이터 유형이 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Go 's Crawler Colly의 큐 스레드의 문제는 무엇입니까? Go 's Crawler Colly의 큐 스레드의 문제는 무엇입니까? Apr 02, 2025 pm 02:09 PM

Go Crawler Colly의 대기열 스레딩 문제는 Colly Crawler 라이브러리를 GO 언어로 사용하는 문제를 탐구합니다. � ...

GO에서 플로팅 포인트 번호 작업에 어떤 라이브러리가 사용됩니까? GO에서 플로팅 포인트 번호 작업에 어떤 라이브러리가 사용됩니까? Apr 02, 2025 pm 02:06 PM

Go Language의 부동 소수점 번호 작동에 사용되는 라이브러리는 정확도를 보장하는 방법을 소개합니다.

VSCODE에서 자동으로 삭제되는 Golang 제네릭 기능 유형 제약 조건을 해결하는 방법은 무엇입니까? VSCODE에서 자동으로 삭제되는 Golang 제네릭 기능 유형 제약 조건을 해결하는 방법은 무엇입니까? Apr 02, 2025 pm 02:15 PM

VSCODE 사용자의 GOLANG 제네릭 기능 유형 제약 조건을 자동으로 삭제하면 VSCODE를 사용하여 Golang 코드를 작성할 때 이상한 문제가 발생할 수 있습니다. 언제...

Go Language Slice : 단일 요소 슬라이스 인덱스 1 인터셉트시 오류를보고하지 않는 이유는 무엇입니까? Go Language Slice : 단일 요소 슬라이스 인덱스 1 인터셉트시 오류를보고하지 않는 이유는 무엇입니까? Apr 02, 2025 pm 02:24 PM

Go Language Slice Index : 오류없이 단일 요소 슬라이스가 인덱스 1에서 차단하는 이유는 무엇입니까? Go Language에서 슬라이스는 바닥을 참조 할 수있는 유연한 데이터 구조입니다 ...

다중 프로세스 로그를 작성할 때 동시성이 안전하고 효율적인지 확인하는 방법은 무엇입니까? 다중 프로세스 로그를 작성할 때 동시성이 안전하고 효율적인지 확인하는 방법은 무엇입니까? Apr 02, 2025 pm 03:51 PM

다중 프로세스 로그 쓰기에서 동시성 보안 문제를 효율적으로 처리합니다. 여러 프로세스는 동시에 동일한 로그 파일을 작성합니다. 동시성을 안전하고 효율적으로 보장하는 방법은 무엇입니까? 이것은 ...

GO의 어떤 라이브러리가 대기업에서 개발하거나 잘 알려진 오픈 소스 프로젝트에서 제공합니까? GO의 어떤 라이브러리가 대기업에서 개발하거나 잘 알려진 오픈 소스 프로젝트에서 제공합니까? Apr 02, 2025 pm 04:12 PM

GO의 어떤 라이브러리가 대기업이나 잘 알려진 오픈 소스 프로젝트에서 개발 했습니까? GO에 프로그래밍 할 때 개발자는 종종 몇 가지 일반적인 요구를 만납니다.

Goland의 사용자 정의 구조 레이블이 적용되지 않는 문제를 해결하는 방법은 무엇입니까? Goland의 사용자 정의 구조 레이블이 적용되지 않는 문제를 해결하는 방법은 무엇입니까? Apr 02, 2025 pm 12:51 PM

GO 언어 개발을 위해 Goland를 사용할 때 Goland의 사용자 정의 구조 태그 문제와 관련하여 종종 구성 문제가 발생합니다. 그들 중 하나는 ...

Golang을 사용하여 캐디 같은 배경 실행, 중지 및 재 장전 기능을 구현하는 방법은 무엇입니까? Golang을 사용하여 캐디 같은 배경 실행, 중지 및 재 장전 기능을 구현하는 방법은 무엇입니까? Apr 02, 2025 pm 02:12 PM

Golang에서 기능을 실행, 중지 및 재 장전하는 방법은 무엇입니까? 프로그래밍 과정에서 우리는 종종 백그라운드 작업을 구현하고 중지해야합니다 ...

See all articles