指针的定义和使用 采用 * 符号来区分正常类型变量和指针变量 package main import "fmt" func main() { str := "Hello world" var strP strP的地址为 0xc000118220 指针strP指向的值为 How are you 变量str的地址为 0xc000118220 变量str的值为 How are you 指针作为函数的参数 Go 只要这两个部分相等,则 Go 语言中的两个数组就是相等的 package main import "fmt" func main() { var a [2]int var c = [2]int{
9. Go复合类型-数组 前言 前面我们已经学习了一些简单的基本类型,现在学习复合类型,复合类型主要包括了数组,指针,切片,结构体等。 所谓的数组:是指一系列同一类型数据的集合。 1.1 数组定义 var a [10]int 数组定义也是通过var 关键字,后面是数组的名字a,长度是10,类型是整型。 .\01_数组.go:14:3: invalid array index 10 (out of bounds for 10-element array) .\01_数组.go:19:24: invalid =9 a[10]=10 通过for循环完成数组的赋值与输出。 当然数组中存储的元素类型也可以是其它类型,如下所示: var a [10]float64 //如果不赋值,直接输出,结果默认全部是0 var a [10]string //如果不赋值,直接输出,结果默认全部是空字符
package main; import ( "fmt" "errors" ) func main() { //bool类型 var isRun = false; //数值类型 //有符号整型 var a int8 = 1; var b int16 = 2; var c int32 = 3; //无符号整型 var k complex64 = 5+5i; var l complex128 = 3+3i; //字符串 var str1 string = "hello"; //go tmp[0] = 'w'; str1 = string(tmp); //通过+进行字符串连接 str2 := "hello"; str3 := str2 + ",go "; //错误类型 err := errors.New("我是个错误"); if err !
在 Printf 方法中,使用 %T 格式说明符(Format Specifier),可以打印出变量的类型。Go 的 unsafe 包提供了一个 Sizeof 函数,该函数接收变量并返回它的字节大小。 类型转换 Go 有着非常严格的强类型特征。Go 没有自动类型提升或类型转换。我们通过一个例子说明这意味着什么。 i 的类型是 int ,而 j 的类型是 float64 ,我们正试图把两个不同类型的数相加,Go 不允许这样的操作。 如果运行程序,你会得到 main.go:10: invalid operation: i + j (mismatched types int and float64)。 main() { i := 10 var j float64 = float64(i) // 若没有显式转换,该语句会报错 fmt.Println("j", j) } 在第 9
1、int类型转换为int32func intToInt32() {var intNum int = 123int32Num := int32(intNum)fmt.Printf("int32Num type :%T,value: %v\n", int32Num, int32Num)}运行结果:image.png2、int32类型转uintfunc int32ToUint() {var int32Num int32 uint(int32Num)fmt.Printf("uintNum type:%T,value: %v\n", uintNum, uintNum)}运行结果:image.png从上面两个例子可以看出Go 语言类型转换基本格式:type_name(expression) 像数值类型之间的转换都可以这样之间转换。 num)byteB := bytesBuffer.Bytes()fmt.Printf("byteB type:%T,value:%v\n\n", byteB, byteB)}运行结果:image.png9、
引言书接上篇,我们了解了Go语言的《接口类型》,现在介绍Go语言的结构体类型。主要如下:主要内容结构体类型既可以包含若干个命名元素(又称字段),又可以与若干个方法相关联。1. 在Go语言中,可以在结构体类型声明中的字段声明的后面添加一个字符串字面量标签,以作为对应字段的附加属性。 在Go语言中,只存在嵌入而不存在继承的概念。不能把前面声明的 List 类型的值赋给一个 Sequence 类型的变量,这样的赋值语句会造成一个编译错误。 在Go语言中,虽然很多预定义类型都属于泛型类型(比如数组类型、切片类型、字典类型和通道类型),但却不支持自定义的泛型类型。 附录GenericSeq 接口类型的实现类型以及 Sequence 类型的完整实现代码 点击这里结语本篇关于 《结构体类型》 就聊到这里,下篇将要介绍 Go 语言的指针类型,敬请期待!
var empty *int fmt.Println(empty == nil) // 输出 true nil 类似其它语言中的 null ,在 Go 语言中只能和指针类型、接口类型进行比较,也只能给指针类型变量和接口类型变量赋值 如果通过方法想修改结构体中的字段时,可以将接收者设置为指针类型。 // type/struct.go // ... 指针传递 在 Go 语言中大部分的类型都是值传递,也就是说通过函数传值时,函数内的修改是不能影响外部的,如果想更改就使用指针类型。 // pointer/function.go // ... 对于 Go 语言中的个别类型本身就是引用类型,不需要使用指针就可以在函数内部修改值而影响外部。 1. map 和 通道 这两个是引用类型,在传递时无需使用指针,通道在后续文章举例讲解。 // pointer/map.go // ...
声明 格式:var 变量名 map[键类型][值类型] 举例:声明了一个键为 int 类型,值为 string 类型的 map。 键类型限制 声明 map 时,键不是所有类型都支持,它只支持可以使用 != 或 == 操作符比较的类型。讲的这,也明白了在 Go 语言中不是所有类型都可以进行比较。 哪些类型不能进行比较? // collection/map-make.go dic := make(map[int]string) dic[1] = "lao" dic[3] = "miao" fmt.Println("dic // collection/map-init.go m := map[string]int{ "a": 2, "b": 3, "c": 4, } fmt.Println("b: 格式如下: v,ok := map[key] v:map 的值 ok:bool 类型,如果 key 存在为 true,反之为 false 举例: // collection/map-key.go dic
3.Go基础数据类型 前言 前面我们写的程序中,用到的变量的类型都是整型,但是在我们GO语言中,还有很多其它的类型,如下: 类型 名称 长度 零值 说明 bool 布尔类型 1 false 其值不为真即为假 go run 01_布尔类型.go a的默认值为: false a赋值为: true b = false c = false 指定格式的输出: package main import "fmt " func main() { var b bool b = true fmt.Printf("b=%t",b) } 执行如下: $ go run 01_布尔类型_指定格式的输出.go b=true : $ go run 02_浮点型.go f1 = 3.1412737 f2 = 3.1412736768768768 f3 = 3.1412736768768768 f3的数据类型为: float64 ,字符类型,整型等都指定了对应的格式化,那么go语言中还有哪些格式化呢?
语法: var identifier type var 代表声明一个变量,identifier为变量名(go中变量名由字母、数字、下划线构成,首个字符不能为数字),type为变量类型。 其中go变量的命名规则是建议驼峰式的。 常见的方式: /** 单变量 **/ var tmp int // 声明一个int 类型变量tmp,go的变量类型放在变量之后 var tmp int = 6 // 声明+初始化 var tmp = 6 golang大致分为boolean类型、数字类型、字符串类型、派生类型 布尔类型 boolean:只可以为true or false var boolTmp bool = true 数字类型 go语言支持整型和浮点型 接口类型(interface) 这一篇暂时就介绍这么多 指针类型 go指针是一种非常重要的变量,同C中的指针一样,指针保存的是指向变量的地址,语法也跟C的类似。
go语言基础语法学习 基本数据类型 变量定义声明 运算符 条件控制语句 方法函数...当然可以,通过对比 Go 和 JavaScript 的数据类型,我们可以更好地理解它们的差异和各自的使用场景。 以下是 Go 和 JavaScript 数据类型的对比,以及每种类型的使用场景。 基本数据类型对比Go 数据类型JavaScript 数据类型描述与使用场景boolBoolean用于逻辑判断,例如条件语句和循环。 Go: var a complex64 = 1 + 2i复合类型对比Go 数据类型JavaScript 数据类型描述与使用场景arrayArray有固定长度的同类型元素集合,用于存储多个相同类型的值。 通过对比 Go 和 JavaScript 的数据类型及其使用场景可以更好地理解它们各自的优势和适用场景
点击阅读原文可访问《Go语言程序设计》电子书 前言 最近在读《Go 语言程序设计》这本书想通过看书巩固一下自己的基础知识,把已经积累的点通过看书学习再编织成一个网,这样看别人写的优秀代码时才能更好理解 例如: var s string fmt.Println(s) // "" 基础类型 基础类型,包括:数字、字符串和布尔型。 := "プログラム" fmt.Printf("% x\n", s) // "e3 83 97 e3 83 ad e3 82 b0 e3 83 a9 e3 83 a0" r := []rune( s) fmt.Printf("%x\n", r) // "[30d7 30ed 30b0 30e9 30e0]" (在第一个Printf中的% x参数用于在每个十六进制数字前插入一个空格。) 基本数据类型,它们可以用于构建程序中数据结构,是Go语言的世界的原子。
= 1 ) // 同理类型推导 var ( i = 0 k = 1 ) 类型int/float64/bool/string 等基础类型都可以被自动推导。 //类型推导 var s3 = s1 + s2 //可以通过操作符 + 把字符串串连起来 s1 += s2 //也可以通过 += 运算符操作 零值 零值其实就是一个变量的默认值,Go语言中,如果只声明了一个变量 指针 Go 语言中,指针对应的是变量在内存中存储的位置,也就是说指针的值就是遍历的内存地址。通过 & 可以获取变量的地址,也就是指针。*可以获取地址对应的值。 常量定义 和变量类型,只不过使用关键字 const const name = "无尘" 在 Go语言中,只允许布尔型、字符串、数字类型这些基础类型作为常量。 字符串 字符串和数字互换 Go是强类型语言,不同类型的变量是不能相互使用和计算的。不同类型的变量在进行复制或计算时,需要先进行类型转换。
Go语言结构 一个Go文件由以下几个部分编写而成: 包声明 package 包名 引入包 import "包名" 函数 func 函数名(参数列表) 变量 var 变量名 变量类型 语句&表达式 注释 4 5 6 7 8 9 int int8 int16 int32 int64 complex complex64 complex128 bool uint uint8 uint16 uint32 uint64 语言数据类型 Go语言所支持的数据类型按类别可以分为四大类: 布尔型 true 或 false 数值型 整型、浮点型、复数 字符串 字符串是由单个字节连接起来的字符序列,Go采用UTF-8格式编码 为了方便定义变量,Go也定义了以下数据类型: 序号 类型和描述 1 byte 类似 uint8 2 rune 类似 int32 3 uint 32 或 64 位 4 int 与 uint 一样大小 5 uintptr 无符号整型,用于存放一个指针 rune和unitptr是Go独创,其他类型别的编程语言也有,基本上可以说是博采众长。
Go语言中内置了大量的数据类型,包括基本数据类型和符合数据类型,其中基本数据类型有如下七种: 布尔型:bool 整形:byte,int,int8,int16,int32,int64,uint,uint8 布尔型 布尔型由关键字bool表示,可取值为true或者false,如: var a bool = false var b bool = true 布尔型通常用于逻辑判断中,在Go语言中布尔型不能与整形进行类型转换 Go语言整形具体如下表所示: image.png 除此之外,还有int,uint和uintptr这三个与平台相关的整形类型,byte类型与uint8类型一致。 3. 浮点型 在Go语言中定义了两个浮点数类型,为float32和float64,这两者之间的差别是表示的数值长度不同,float32对应了其他语言中的float类型,而float64对应了其他语言中的double 复数类型 复数类型在Go语言中也有两种类型,分别为complex64和complex128,复数是由实部和虚部构成,复数在Go语言中的定义如下所示: var a complex64 = 1 + 2i var
Go 基础之基本数据类型 一、整型 所谓整型,主要用来表示现实世界中整型数量,比如年龄,分数,排名等等 Go 语言整型可以分为平台无关整型和平台相关整型这两种,它们的区别主要就在,这些整数类型在不同 2.2 浮点类型 Go语言支持两种浮点型数:float32和float64。这两种浮点型数据格式遵循IEEE 754标准。 浮点类型与前面的整型相比,Go 提供的浮点类型都是平台无关的。 hello %d", 123)) 6.4.2 字符串长度 使用len() 获取字符串字节长度: println(len("你好")) // 输出6 println(len("你好abc")) // 输出9 0, value: 0xe4 index: 1, value: 0xb8 index: 2, value: 0xad index: 3, value: 0xe5 index: 4, value: 0x9b 八、类型转换 Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。
本篇博客将深入探讨Go语言中的数据类型转换,从基本概念到类型转换的方法和最佳实践,帮助您理解如何在Go中进行安全、有效的数据类型转换。 隐式转换 在一些情况下,Go语言会自动执行隐式转换。例如,将整数值赋给浮点数变量时,会自动进行类型转换。 在Go语言中,使用括号将目标类型括起来,将要转换的值放在括号前面。 type Celsius float64 var temperature Celsius = 25.5 类型转换 自定义类型与其基础类型之间需要显式转换。 总之,数据类型转换是Go语言中不可或缺的一部分,对于构建强大、稳定的程序至关重要。通过深入理解和掌握不同类型转换的方法,您将能够更加自信地进行数据处理,编写出高质量、可靠的Go语言代码。
Go 基础数据类型: 布尔型 数字类型 字符串类型 错误类型 布尔型 bool 布尔型的值只能为 true 或 false , 例: var v1 bool = true v1 := (2 > 1) Go语言支持以下的常规整数运算:+ - * / % 。 字符串在Go中是 UTF-8 的由双引号(")或反引号(``)包裹的字符序列(类型为string)。 字符类型 rune 在Go语言中支持两个字符类型,要给是byte(实际上是uint8的别名),代表UTF-8字符串的单个字节的值;另一个是rune,代表单个Unicode字符。 关于rune相关操作,可查阅Go标准库的unicode包。另外unicode/utf8包也提供了UTF-8和Unicode之间的转换。 字符串遍历 Go语言支持两种方式遍历字符串。
Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。Go 语言的基本类型和其他语言大同小异。 基础数据类型 整型 整型分为以下两个大类: 按长度分为:int8、int16、int32、int64 对应的无符号整型:uint8、uint16、uint32、uint64 其中,uint8就是我们熟知的 布尔值 Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)和false(假)两个值。 注意: 布尔类型变量的默认值为false。 Go 语言中不允许将整型强制转换为布尔型. 布尔型无法参与数值运算,也无法与其他类型进行转换。 字符串 Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样。 (byteS1)) s2 := "白萝卜" runeS2 := []rune(s2) runeS2[0] = '红' fmt.Println(string(runeS2)) 类型转换 Go语言中只有强制类型转换
01 整数类型 整数类型按照有/无符号划分,可分为有符号整数和无符号整数,二者按照大小划分,有 8 位、16 位、32 位和 64 位: 大小 8 位 16 位 32 位 64 位 有符号 int8 需要注意的是,int 和 uint 都有别于大小明确的类型,也就是说,int 和 int32 是两种不同的类型,必须显示转换。 int32 的类型别名,二者可以互换使用") } if d == e { fmt.Println("byte 类型是 uint8 的类型别名,二者可以互换使用") } } 02 bool 型的值只有两种可能,true 和 false,在 Go 语言中,bool 型的零值是 false,布尔值无法隐式转换成数值 0 或 1,反之亦然。 int32 的类型别名,二者可以互换使用 byte 类型是 uint8 的类型别名,二者可以互换使用 字符串 i 的长度:12 字符串 i 的第一个字符:h 子字符串 j 的值:hello 子字符串