package main; import ( "fmt" "errors" ) func main() { //bool类型 var isRun = false; var d uint8 = 4; var e uint16 = 5; var f uint32 = 6; //rune是int32的别称,byte是uint8的别称 var var i float32 = 1.23; var j float64 = 2.45; //复数 var k complex64 = 5+5i; var l complex128 = 3+3i; //字符串 var str1 string = "hello"; //go中字符串是否可改变的,下面是错误的 //str1[0 = string(tmp); //通过+进行字符串连接 str2 := "hello"; str3 := str2 + ",go"; //错误类型 err
在 Printf 方法中,使用 %T 格式说明符(Format Specifier),可以打印出变量的类型。Go 的 unsafe 包提供了一个 Sizeof 函数,该函数接收变量并返回它的字节大小。 package main import ( "fmt" ) func main() { c1 := complex(5, 7) c2 := 8 + 27i cadd c1的实部为 5,虚部为 7。c2 的实部为8,虚部为 27。c1 和 c2 的和赋值给 cadd ,而 c1 和 c2 的乘积赋值给 cmul。 类型转换 Go 有着非常严格的强类型特征。Go 没有自动类型提升或类型转换。我们通过一个例子说明这意味着什么。 i 的类型是 int ,而 j 的类型是 float64 ,我们正试图把两个不同类型的数相加,Go 不允许这样的操作。
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) 像数值类型之间的转换都可以这样之间转换。 strconv.ParseInt(str, 10, 0)fmt.Printf("parseInt type:%T,value:%v\n", parseInt, parseInt)}运行结果为:image.png5、
package main import "fmt" func main() { for a := 0; a < 10; a++ { fmt.Println(a) } } 0 1 2 3 4 5 package main import "fmt" func main() { a := 0 for ; a < 10; a++ { fmt.Println(a) } } 0 1 2 3 4 5 package main import "fmt" func main() { a := 0 for a < 10 { fmt.Println(a) a++ } } 0 1 2 3 4 5 fmt" func main() { a := 0 for { fmt.Println(a) a++ if a >= 10 { break } } } 0 1 2 3 4 5 LOOP: for { for { fmt.Println(a) a++ if a >= 10 { break LOOP } } } } 0 1 2 3 4 5
var empty *int fmt.Println(empty == nil) // 输出 true nil 类似其它语言中的 null ,在 Go 语言中只能和指针类型、接口类型进行比较,也只能给指针类型变量和接口类型变量赋值 如果通过方法想修改结构体中的字段时,可以将接收者设置为指针类型。 // type/struct.go // ... 指针传递 在 Go 语言中大部分的类型都是值传递,也就是说通过函数传值时,函数内的修改是不能影响外部的,如果想更改就使用指针类型。 // pointer/function.go // ... 对于 Go 语言中的个别类型本身就是引用类型,不需要使用指针就可以在函数内部修改值而影响外部。 1. map 和 通道 这两个是引用类型,在传递时无需使用指针,通道在后续文章举例讲解。 // pointer/map.go // ...
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 str[0]=h, str[1]=e 6:fmt输出输入 我们前面在输出与输入字符串类型,字符类型,整型等都指定了对应的格式化,那么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: var arr [5]int = [5]int{1, 2, 3, 4, 5}JS: var arr = [1, 2, 3, 4, 5]sliceArray动态长度的数组,用于需要频繁修改大小的集合
引言 上篇我们介绍了 Go 语言的 《数组类型》,本篇将介绍 Go 语言的切片类型。主要如下: 主要内容 切片可以看作是对数组的一种包装形式。切片包装的数组称为该切片的底层数组。 相同类型的切片值可能会有不同的长度。 切片类型声明中的元素类型也可以是任意一个有效的 Go 语言数据类型。例如: []rune 如上用于表示元素类型为 rune 的切片类型。 值表示法 和数组类似,也是复合字面量中的一种,例如: []string{"Go", "Python", "Java", "C", "C++", "PHP"} 在切片值所属的类型中根本就没有关于长度的规定 "", 2: "Swift", 3: "Java", 4: "C", 5: "C++", 6: "PHP", 7: "", 8: "Go"} 3. 变量 n1 的值为 3 , 变量 sliceA 的值被修改为: []string{"Vim", "Emacs", "LiteIDE"} 总结 本篇介绍了 Go 语言的 切片类型,下一篇介绍 Go 语言的字典类型
点击阅读原文可访问《Go语言程序设计》电子书 前言 最近在读《Go 语言程序设计》这本书想通过看书巩固一下自己的基础知识,把已经积累的点通过看书学习再编织成一个网,这样看别人写的优秀代码时才能更好理解 声明 Go语言主要有四种类型的声明语句:var、const、type和func,分别对应变量、常量、类型和函数。 例如: var s string fmt.Println(s) // "" 基础类型 基础类型,包括:数字、字符串和布尔型。 基本数据类型,它们可以用于构建程序中数据结构,是Go语言的世界的原子。 // equivalent to w.Circle.Radius = 5 w.Spokes = 20 外层的结构体不仅仅是获得了匿名成员类型的所有成员,而且也获得了该类型导出的全部的方法。
= 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 变量名 变量类型 语句&表达式 注释 关键字 Go语言有25个关键字: 1 2 3 4 5 break default func interface select case defer go map struct chan else goto 语言数据类型 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独创,其他类型别的编程语言也有,基本上可以说是博采众长。
Java 中所有的变量、表达式和值都必须有自己的类型,没有“无类型”变量这样的概念。 学习任何一种编程语言都要了解其数据类型,几乎所有的编程语言中都会有数据类型,什么是数据类型呢? 类型所表示的范围时就要使用 long 类型。 Java的引用数据类型建立在基本数据类型的基础上,包括数组、类和接口。 另外,Java 语言中不支持 C++ 中的指针类型、结构类型、联合类型和枚举类型。 引用类型还有一种特殊的 null 类型。空类型(null 类型)就是 null 值的类型,这种类型没有名称。 因为 null 类型没有名称,所以不可能声明一个 null 类型的变量或者转换到 null 类型。空引用(null)是 null 类型变量唯一的值。空引用(null)可以转换为任何引用类型。
Go语言中内置了大量的数据类型,包括基本数据类型和符合数据类型,其中基本数据类型有如下七种: 布尔型:bool 整形:byte,int,int8,int16,int32,int64,uint,uint8 复数类型 复数类型在Go语言中也有两种类型,分别为complex64和complex128,复数是由实部和虚部构成,复数在Go语言中的定义如下所示: var a complex64 = 1 + 2i var 5. 数据运算 数据运算包括数值运算,比较运算和位运算。 5.1. 数值运算 Go语言支持的数值运算包括:+,-,*,/和%: func main() { var a int = 5 var b int = 2 fmt.Println("a + b = ", a 位运算 Go语言支持的位运算包括:左移<<,右移>>,异或^,与&,或|,取反^,如: func main() { var a int = 5 var b int = 2 fmt.Println(
Go 基础之基本数据类型 一、整型 所谓整型,主要用来表示现实世界中整型数量,比如年龄,分数,排名等等 Go 语言整型可以分为平台无关整型和平台相关整型这两种,它们的区别主要就在,这些整数类型在不同 := 0_700 // 八进制: 0700 c2 := 0o_700 // 八进制: 0700 d1 := 0x_5c_6d // 十六进制:0x5c6d 不过,这里你要注意一下,Go 1.13 中增加的二进制字面值以及数字分隔符 第一种,我们可以通过复数字面值直接初始化一个复数类型变量: var c = 5 + 6i var d = 0o123 + .12345E+5i // 83+12345i 第二种,Go 还提供了 complex 函数,方便我们创建一个 complex128 类型值: var c = complex(5, 6) // 5 + 6i var d = complex(0o123, .12345E+5) // 83+ 12345i 第三种,你还可以通过 Go 提供的预定义的函数 real 和 imag,来获取一个复数的实部与虚部,返回值为一个浮点类型: var c = complex(5, 6) // 5 + 6i
本篇博客将深入探讨Go语言中的数据类型转换,从基本概念到类型转换的方法和最佳实践,帮助您理解如何在Go中进行安全、有效的数据类型转换。 隐式转换 在一些情况下,Go语言会自动执行隐式转换。例如,将整数值赋给浮点数变量时,会自动进行类型转换。 在Go语言中,使用括号将目标类型括起来,将要转换的值放在括号前面。 type Celsius float64 var temperature Celsius = 25.5 类型转换 自定义类型与其基础类型之间需要显式转换。 总之,数据类型转换是Go语言中不可或缺的一部分,对于构建强大、稳定的程序至关重要。通过深入理解和掌握不同类型转换的方法,您将能够更加自信地进行数据处理,编写出高质量、可靠的Go语言代码。
Go语言里有两种类型的接收者: 值接收者和指针接收者。 值接收者使用值的副本来调用方法,指针接收者使用实际值来调用方法。 5.3 类型的本质 5.3.1 内置类型 内置类型是由语言提供的一组类型。 分别是数值类型,字符类型和布尔类型。这些类型本质上是原始的类型。因此,当对这些值进行增加或者删除的时候,会创建一个新值。 5.3.2 引用类型 Go语言里的引用类型有如下几个:切片、映射、通道、接口和函数类型。当上声明述类型的变量时,创建的变量被称作标头值。每个引用类型创建的标头值是包含一个指向底层数据结构的指针。 /listing36.go:32: cannot use u (type user) as type // notifier in argument to sendNotification 将工厂函数命名为New是Go语言的一个习惯。 即便内部类型是未公开的,内部类型里声明的字段依旧可以是公开的。当内部类型提升到了外部类型,这些公开的字段就可以通过外部类型的字段值来访问。
Go 基础数据类型: 布尔型 数字类型 字符串类型 错误类型 布尔型 bool 布尔型的值只能为 true 或 false , 例: var v1 bool = true v1 := (2 > 1) Go语言支持以下的常规整数运算:+ - * / % 。 5 % 3 //结果为:2 浮点型 浮点数 float32 32位浮点数,精确到小数点后7位 float64 64位浮点数,精确到小数点后15位 var v1 float32 //声明后默认为 0 v2 字符串在Go中是 UTF-8 的由双引号(")或反引号(``)包裹的字符序列(类型为string)。 字符类型 rune 在Go语言中支持两个字符类型,要给是byte(实际上是uint8的别名),代表UTF-8字符串的单个字节的值;另一个是rune,代表单个Unicode字符。
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语言中只有强制类型转换
需要注意的是,int 和 uint 都有别于大小明确的类型,也就是说,int 和 int32 是两种不同的类型,必须显示转换。 int32 的类型别名,二者可以互换使用") } if d == e { fmt.Println("byte 类型是 uint8 的类型别名,二者可以互换使用") } } 02 bool 型的值只有两种可能,true 和 false,在 Go 语言中,bool 型的零值是 false,布尔值无法隐式转换成数值 0 或 1,反之亦然。 hello golang" fmt.Printf("字符串 i 的长度:%d\n", len(i)) fmt.Printf("字符串 i 的第一个字符:%c\n", i[0]) j := i[0:5] fmt.Printf("子字符串 j 的值:%s\n", j) k := i[5:] fmt.Printf("子字符串 k 的值:%s\n", k) l := i[:5] fmt.Printf