Go에는 몇 가지 데이터 유형이 있나요?
Go에는 네 가지 데이터 유형이 있습니다. 1. 정수, 부동 소수점 숫자, 복소수, 부울 값, 문자열 및 상수를 포함한 기본 유형 2. 배열 및 구조를 포함한 집계 유형(엔티티로 구성된 집계 데이터 유형) 0개 이상의 모든 유형의 값으로 구성됩니다. 각 값은 구조체의 멤버라고 합니다. 3. 포인터, 슬라이스, 맵, 함수 및 채널을 포함한 참조 유형. 행동의 추상화 및 일반화는 추상화의 한 유형입니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.
Go의 데이터 유형은 기본 유형, 집계 유형, 참조 유형 및 인터페이스 유형의 네 가지 주요 범주로 나뉩니다.
- 기본 유형은 정수, 부동 소수점 수, 복소수, 부울 값, 문자열, 상수로 구분됩니다.
- 집계 유형에는 배열, 구조가 포함됩니다.
- 참조 유형에는 포인터, 슬라이스, 맵, 함수, 채널이 포함됩니다
- 인터페이스 유형
기본 유형
// int8 is the set of all signed 8-bit integers. // Range: -128 through 127. type int8 int8 // int16 is the set of all signed 16-bit integers. // Range: -32768 through 32767. type int16 int16 // int32 is the set of all signed 32-bit integers. // Range: -2147483648 through 2147483647. type int32 int32 // int64 is the set of all signed 64-bit integers. // Range: -9223372036854775808 through 9223372036854775807. type int64 int64 // uint8 is the set of all unsigned 8-bit integers. // Range: 0 through 255. type uint8 uint8 // uint16 is the set of all unsigned 16-bit integers. // Range: 0 through 65535. type uint16 uint16 // uint32 is the set of all unsigned 32-bit integers. // Range: 0 through 4294967295. type uint32 uint32 // uint64 is the set of all unsigned 64-bit integers. // Range: 0 through 18446744073709551615. type uint64 uint64 // byte is an alias for uint8 and is equivalent to uint8 in all ways. It is // used, by convention, to distinguish byte values from 8-bit unsigned // integer values. type byte = uint8 // rune is an alias for int32 and is equivalent to int32 in all ways. It is // used, by convention, to distinguish character values from integer values. type rune = int32 // int is a signed integer type that is at least 32 bits in size. It is a // distinct type, however, and not an alias for, say, int32. type int int // uint is an unsigned integer type that is at least 32 bits in size. It is a // distinct type, however, and not an alias for, say, uint32. type uint uint
// float32 is the set of all IEEE-754 32-bit floating-point numbers. type float32 float32 // float64 is the set of all IEEE-754 64-bit floating-point numbers. type float64 float64
// complex64 is the set of all complex numbers with float32 real and // imaginary parts. type complex64 complex64 // complex128 is the set of all complex numbers with float64 real and // imaginary parts. type complex128 complex128 // The complex built-in function constructs a complex value from two // The complex built-in function constructs a complex value from two // floating-point values. The real and imaginary parts must be of the same // size, either float32 or float64 (or assignable to them), and the return // value will be the corresponding complex type (complex64 for float32, // complex128 for float64). func complex(r, i FloatType) ComplexType // The real built-in function returns the real part of the complex number c. // The return value will be floating point type corresponding to the type of c. func real(c ComplexType) FloatType // The imag built-in function returns the imaginary part of the complex // number c. The return value will be floating point type corresponding to // the type of c. func imag(c ComplexType) FloatType
// bool is the set of boolean values, true and false. type bool bool // true and false are the two untyped boolean values. const ( true = 0 == 0 // Untyped bool. false = 0 != 0 // Untyped bool. )
// string is the set of all strings of 8-bit bytes, conventionally but not // necessarily representing UTF-8-encoded text. A string may be empty, but // not nil. Values of string type are immutable. type string string
// iota is a predeclared identifier representing the untyped integer ordinal // number of the current const specification in a (usually parenthesized) // const declaration. It is zero-indexed. const iota = 0 // Untyped int.
집계 유형
- 배열과 구조체는 집계 유형입니다.
- 그 값은 다음과 같습니다. 여러 요소나 멤버 필드의 값으로 구성됩니다.
- 배열은 동형 요소로 구성됩니다. 각 배열 요소는 정확히 동일한 유형이지만 구조는 이종 요소로 구성됩니다.
- 배열과 구조는 모두 메모리 크기가 고정된 데이터 구조입니다.
- 반면에 슬라이스와 맵은 필요에 따라 동적으로 증가하는 동적 데이터 구조입니다.
a := [2]int{1, 2} b := [...]int{1, 2} c := [2]int{1, 3} fmt.Println(a == b, a == c, b == c) // "true false false" d := [3]int{1, 2} fmt.Println(a == d) // compile error: cannot compare [2]int == [3]int
- 배열의 요소 유형을 서로 비교할 수 있다면 배열 유형도 서로 비교할 수 있습니다. 이때 두 가지를 직접 비교할 수 있습니다. == 비교 연산자 배열을 통해 배열은 두 배열의 모든 요소가 동일한 경우에만 동일합니다. 같지 않음 비교 연산자 !=는 동일한 규칙을 따릅니다.
- 함수가 호출되면 함수의 각 호출 매개변수가 함수 내부의 매개변수 변수에 할당되므로 함수 매개변수 변수는 원래 호출의 변수가 아닌 복사된 복사본을 받습니다. 함수 매개변수 전달 메커니즘으로 인해 큰 배열 유형을 전달하는 것이 비효율적이므로 배열 매개변수에 대한 수정은 복사된 배열에서 발생하며 호출 시 원래 배열 변수를 직접 수정할 수 없습니다 . 값 전달로 호출
- 우리는명시적으로 배열 포인터를 전달할 수 있습니다. 이 경우 포인터를 통한 함수에 의한 배열 수정은 호출자에게 직접 피드백될 수 있습니다
- 구조는 집계된 데이터 유형으로, 모든 유형의 0개 이상의 값에서 집계된 엔터티입니다. 각 값을 구조체의 멤버라고 합니다.
- 구조체 멤버 이름이 대문자로 시작하면 멤버가 내보내집니다.
1, 结构体值也可以用结构体面值表示,结构体面值可以指定每个成员的值。 type Point struct{ X, Y int } p := Point{1, 2} 2, 以成员名字和相应的值来初始化,可以包含部分或全部的成员, anim := gif.GIF{LoopCount: nframes} 在这种形式的结构体面值写法中,如果成员被忽略的话将默认用零值。 3, 因为结构体通常通过指针处理,可以用下面的写法来创建并初始化一个结构体变量,并返回结构体的地址: pp := &Point{1, 2} 它是下面的语句是等价的 pp := new(Point) *pp = Point{1, 2} 不过&Point{1, 2}写法可以直接在表达式中使用,比如一个函数调用。
- 구조체의 모든 멤버가 비교 가능하면 구조도 비교 가능합니다. 이 경우 두 구조는 다음을 사용하여 비교됩니다. 또는 != 연산자. 같음 비교 연산자 는 두 구조의 각 멤버를 비교하므로 다음 두 비교 표현식은 동일합니다. 값의 메모리 주소.
type Point struct{ X, Y int } p := Point{1, 2} q := Point{2, 1} fmt.Println(p.X == q.X && p.Y == q.Y) // "false" fmt.Println(p == q) // "false"
포인터 변수를 정의합니다. 포인터 변수에 값을 할당합니다.
포인터 변수의 주소를 가리키는 값에 접근하세요. 포인터가 가리키는 내용을 얻으려면 포인터 유형 앞에 * 기호(접두사)를 추가하세요. var ip *int /* 指向整型*/ ip是一个指向int类型对象的 指针
var fp *float32 /* 指向浮点型 */ fp是一个指向float32类型对象的 指针
slice
- Slice(슬라이스)는 가변 길이 시퀀스를 나타내며 시퀀스의 각 요소는 동일한 유형을 갖습니다.
- 슬라이스 유형은 일반적으로 []T로 작성됩니다. 여기서 T는 슬라이스의 요소 유형을 나타냅니다.
- 슬라이스의 구문은 고정 길이가 없다는 점을 제외하면 배열의 구문과 매우 유사합니다.
var a int= 20 /* 声明实际变量 */ var ip *int /* 声明指针变量 */ ip = &a /* 指针变量的存储地址 */ fmt.Printf("a 变量的地址是: %x\n", &a ) /* 指针变量的存储地址 */ fmt.Printf("ip 变量储存的指针地址: %x\n", ip ) /* 使用指针访问值 */ fmt.Printf("*ip 变量的值: %d\n", *ip )
로그인 후 복사
type slice struct {
array unsafe.Pointer
len int
cap int
}
- map
- 在Go语言中,一个map就是一个哈希表的引用,map类型可以写为map[K]V,其中K和V分别对应key和value。map中所有的key都有相同的类型,所有的value也有着相同的类型。
- 其中K对应的key必须是支持==比较运算符的数据类型,所以map可以通过测试key是否相等来判断是否已经存在。虽然浮点数类型也是支持相等运算符比较的,但是将浮点数用做key类型则是一个坏的想法。
- 对于V对应的value数据类型则没有任何的限制。
创建map: 1, 内置的make函数可以创建一个map: ages := make(map[string]int) // mapping from strings to ints 2, 我们也可以用map字面值的语法创建map,同时还可以指定一些最初的key/value: ages := map[string]int{ "alice": 31, "charlie": 34, } 这相当于 ages := make(map[string]int) ages["alice"] = 31 ages["charlie"] = 34 因此,另一种创建空的map的表达式是map[string]int{}。 Map中的元素通过key对应的下标语法访问: ages["alice"] = 32 delete(ages, "alice") // remove element ages["alice"] 所有这些操作是安全的,即使这些元素不在map中也没有关系; 如果一个查找失败将返回value类型对应的零值,例如, 即使map中不存在“bob”下面的代码也可以正常工作,因为ages["bob"]失败时将返回0。 ages["bob"] = ages["bob"] + 1 // happy birthday! 遍历map for name, age := range ages { fmt.Printf("%s\t%d\n", name, age) }
로그인 후 복사函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。
func name(parameter-list) (result-list) { body }
로그인 후 복사- 如果说goroutine是Go语音程序的并发体的话,那么channels它们之间的通信机制。
- 一个channels是一个通信机制,它可以让一个goroutine通过它给另一个goroutine发送值信息。
- 每个channel都有一个特殊的类型,也就是channels可发送数据的类型。一个可以发送int类型数据的channel一般写为chan int。
使用内置的make函数,我们可以创建一个channel: 使用内置的make函数,我们可以创建一个channel: ch := make(chan int) // ch has type 'chan int'
로그인 후 복사和map类似,channel也一个对应make创建的底层数据结构的引用。
当我们复制一个channel或用于函数参数传递时,我们只是拷贝了一个channel引用,因此调用者何被调用者将引用同一个channel对象。和其它的引用类型一样,channel的零值也是nil。
两个相同类型的channel可以使用==运算符比较。如果两个channel引用的是相通的对象,那么比较的结果为真。一个channel也可以和nil进行比较。
接口类型
接口类型是对其它类型行为的抽象和概括;因为接口类型不会和特定的实现细节绑定在一起,通过这种抽象的方式我们可以让我们的函数更加灵活和更具有适应能力。
很多面向对象的语言都有相似的接口概念,但Go语言中接口类型的独特之处在于它是满足隐式实现的。
也就是说,我们没有必要对于给定的具体类型定义所有满足的接口类型;简单地拥有一些必需的方法就足够了。
这种设计可以让你创建一个新的接口类型满足已经存在的具体类型却不会去改变这些类型的定义;当我们使用的类型来自于不受我们控制的包时这种设计尤其有用。
接口类型是一种抽象的类型。它不会暴露出它所代表的对象的内部值的结构和这个对象支持的基础操作的集合;它们只会展示出它们自己的方法。也就是说当你有看到一个接口类型的值时,你不知道它是什么,唯一知道的就是可以通过它的方法来做什么。
위 내용은 Go에는 몇 가지 데이터 유형이 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











보안 통신에 널리 사용되는 오픈 소스 라이브러리로서 OpenSSL은 암호화 알고리즘, 키 및 인증서 관리 기능을 제공합니다. 그러나 역사적 버전에는 알려진 보안 취약점이 있으며 그 중 일부는 매우 유해합니다. 이 기사는 데비안 시스템의 OpenSSL에 대한 일반적인 취약점 및 응답 측정에 중점을 둘 것입니다. DebianopensSL 알려진 취약점 : OpenSSL은 다음과 같은 몇 가지 심각한 취약점을 경험했습니다. 심장 출혈 취약성 (CVE-2014-0160) :이 취약점은 OpenSSL 1.0.1 ~ 1.0.1F 및 1.0.2 ~ 1.0.2 베타 버전에 영향을 미칩니다. 공격자는이 취약점을 사용하여 암호화 키 등을 포함하여 서버에서 무단 읽기 민감한 정보를 사용할 수 있습니다.

이 기사는 프로파일 링 활성화, 데이터 수집 및 CPU 및 메모리 문제와 같은 일반적인 병목 현상을 식별하는 등 GO 성능 분석을 위해 PPROF 도구를 사용하는 방법을 설명합니다.

이 기사는 GO에서 단위 테스트 작성, 모범 사례, 조롱 기술 및 효율적인 테스트 관리를위한 도구를 다루는 것에 대해 논의합니다.

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

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

백엔드 학습 경로 : 프론트 엔드에서 백엔드 초보자로서 프론트 엔드에서 백엔드까지의 탐사 여행은 프론트 엔드 개발에서 변화하는 백엔드 초보자로서 이미 Nodejs의 기초를 가지고 있습니다.

이 기사에서는 GO.MOD를 통해 GO 모듈 종속성 관리, 사양, 업데이트 및 충돌 해상도를 포함합니다. 시맨틱 버전 작성 및 정기 업데이트와 같은 모범 사례를 강조합니다.

이 기사는 데비안 시스템에서 PostgresQL 데이터베이스를 모니터링하는 다양한 방법과 도구를 소개하여 데이터베이스 성능 모니터링을 완전히 파악할 수 있도록 도와줍니다. 1. PostgreSQL을 사용하여 빌드 인 모니터링보기 PostgreSQL 자체는 데이터베이스 활동 모니터링 활동을위한 여러보기를 제공합니다. PG_STAT_REPLICATION : 특히 스트림 복제 클러스터에 적합한 복제 상태를 모니터링합니다. PG_STAT_DATABASE : 데이터베이스 크기, 트랜잭션 커밋/롤백 시간 및 기타 주요 지표와 같은 데이터베이스 통계를 제공합니다. 2. 로그 분석 도구 PGBADG를 사용하십시오
