网页版qq邮箱怎么登录,东莞seo网站建设公司,p站代理网址,宿迁网站建设开发Go语言之路————go基本语法、数据类型、变量、常量 前言一、基本语法知识二、数据类型三、常量四、变量五、作用域六、输入输出 前言
我是一名多年Java开发人员#xff0c;因为工作需要现在要学习go语言#xff0c;Go语言之路是一个系列#xff0c;记录着我从0开始接触G… Go语言之路————go基本语法、数据类型、变量、常量 前言一、基本语法知识二、数据类型三、常量四、变量五、作用域六、输入输出 前言
我是一名多年Java开发人员因为工作需要现在要学习go语言Go语言之路是一个系列记录着我从0开始接触Go到后面能正常完成工作上的业务开发的过程如果你也是个小白或者转Go语言的希望我这篇文章对你有所帮助。有关go其他基础的内容的文章大家可以查看我的主页接下来主要就是把这个系列更完更完之后我会在每篇文章中挂上连接方便大家跳转和复习。
一、基本语法知识
其实编程语言的语法在大框架上都是大差不差的这就是为啥一个人熟练掌握了一门语言他能迅速上手另一个语言如果你是java的老手那么你上手go就会特别快go的很多知识点都能在java上找到相似的定义。 我们从一个简单的例子来看看go的语法。
package mainimport fmtfunc main() {fmt.Println(hello world)
}
我从下面几个要点去解析 package 这是我们这个文件的包名没错就是我们项目左侧目录右键创建的direct目录名但是main是个特殊的这是我们整个程序的入口你就理解为java中的SpringBootAppliaction标注的main方法入口我们的main方法一般都放在package main下。 import 引入的包名这跟java中你import其他类差不多意思如果当前go文件中我要用其他文件中的方法或者定义的字段在本文件中的import中就要引入那个文件的包名记住是包名不是引入那个文件也不是引入那个方法。 如果我们引入多个可以用括号包起来 import (fmtexample
) 如果包名太长或者不顺眼我们还可以起别名 import (aaa fmtbbb example
)起了别名后那我们用的时候只需要用别名就好了比如上面的输出函数我们可以换成这个aaa.Println(“hello world”)
func 这是go中声明一个方法的关键字具体的我们后面讲到方法会讲你只需要知道func main(),类似与java的void main()就行了
二、数据类型
go中的数据类型巨多不像java中基本类型只有8个它拆分的特别仔细下面我会一一列出来我会注明哪些是常用的大家先关注常用的类型就行心理有个印象。 bool bool值基本还是所有语言通用的 类型描述booltrue为真值false为假值 整型 类型描述uint8无符号 8 位整型uint16无符号 16 位整型uint32无符号 32 位整型uint64无符号 64 位整型int8有符号 8 位整型int16有符号 16 位整型int32有符号 32 位整型int64有符号 64 位整型uint无符号整型 至少 32 位int整型 至少 32 位uintptr等价于无符号 64 位整型但是专用于存放指针运算用于存放死的指针地址。整型中常用的就是int32和int64当然还有uint8其他的你知道有就行了等要用的时候再看。 浮点型 类型描述float32IEEE-754 32 位浮点数float64IEEE-754 64 位浮点数常用的是float64 字符类型 类型描述byte等价 uint8 可以表达 ANSCII 字符rune等价 int32 可以表达 Unicode 字符string字符串即字节序列可以转换为[]byte类型即字节切片都比较常用rune用的稍微少一点。 其他类型术语 这里面列的大家看一下留个印象就好后面的文章会一一详细讲解。 类型描述数组[5]int长度为 5 的整型数组切片[]int整型切片跟数组一个意思只是可以动态扩容映射表map[string]int键为字符串类型值为整型的映射表就是java的map结构体type Gopher struct{}Gopher 结构体类似于java的类指针*int一个整型指针。接口type Gopher interface{}Gopher 接口类似于java的接口通道chan int整型通道 nil java中的null只是一个变量不能比较不能用nil nil
三、常量
用const关键字声明的就是常量
单独声明
const a 1
const b 2组合声明
const (c 3d 4
)直接输出一下看
func main() {fmt.Println(a, b, c, d)
}
输出内容1 2 3 4iota iota是一个内置的常量标识符表示一个常量声明中的无类型整数序数从0开始一般都是在括号中使用它可以让下面的常量递增
const (Num iotaNum1Num2Num3Num4
)func main() {fmt.Println(Num, Num1, Num2, Num3, Num4)
}
输出0 1 2 3 4正是有这个特性所以我们可以用它来表示枚举因为go中没有正式的enum声明的枚举字段。
四、变量
go中的变量用var关键字来声明特别说明的是go中大部分的变量或者参数这些的声明都是变量名在前类型在后的。
var a int
var b string如果连续的变量的类型一样那我们只需要在最后面声明一次类型就好
var a,b,c int
var d,e,f string还可以用括号包起来
var (aa stringbb stringcc int
)在开发中还经常用值等:冒号等号的方法赋值就是不需要声明类型让go自己去判断这种就是简化了变量的定义
func main() {a1 : 1b1 : 2fmt.Println(a1, b1) //输出1,2a1 3 //第二次赋值就不需要冒号了因为前面已经声明过了fmt.Println(a1, b1) //输出3,2
}五、作用域
作用域是对基本语法的扩展我们再第一点中讲到了包的概念这里说说包之间怎么引用
记住一点如果我们声明的方法、变量想要本文件私有那么我们就首字母小写相反如果我声明的方法其他文件也能用那就首字母大写首字母小写的类似与java中的private字段只有本类才能访问
同包之下新建一个package 叫 yu1新建两个文件A.go和B.go可以看到我在B.go里面不需要任何引用直接就能调用a.go中的testA方法也不需要大小写
package yu1import fmtfunc testA() {fmt.Println(a.go)
}package yu1func testB() {testA()
}
不同包新建一个package为yu2新建一个文件c.go在这时候我如果在c中想引入yu1中a.go中的testA方法记住必须要满足两个条件请看我下面代码
package yu2import newProject/yu1func testC() {yu1.TestA()
}相信大家也看出来了这两个条件就是import a.go文件的包名yu1并且a.go中的方法首字母大写用包名.方法名的方式去引用这里是个重点不是用a.go的文件一定要用包名包名.方法名中间有个点太小了大家别看不清
六、输入输出
go中最常用的输入输出就是fmt包当然还有文件操作这个后面我们在讲本文先说说fmt包怎么格式化输出。 最简单的例子上面大家也看过了直接用fmt.Println函数
fmt.Println(我是字符串)
fmt.Println(123)fmt.Printf格式化输出那么go还是提供了挺丰富的api下面我贴一个表大家先看看用的时候再来查就行了记不住的多用几次就记住了。
格式化描述接收类型%%输出百分号%任意%s输出string/[] byte值string,[] byte%q格式化字符串输出的字符串两端有双引号string,[] byte%d输出十进制整型值整型%f输出浮点数浮点%e输出科学计数法形式 ,也可以用于复数浮点%E与%e相同浮点%g根据实际情况判断输出%f或者%e,会去掉多余的 0浮点%b输出整型的二进制表现形式数字%#b输出二进制完整的表现形式数字%o输出整型的八进制表示整型%#o输出整型的完整八进制表示整型%x输出整型的小写十六进制表示数字%#x输出整型的完整小写十六进制表示数字%X输出整型的大写十六进制表示数字%#X输出整型的完整大写十六进制表示数字%v输出值原本的形式多用于数据结构的输出任意%v输出结构体时将加上字段名任意%#v输出完整 Go 语法格式的值任意%t输出布尔值布尔%T输出值对应的 Go 语言类型值任意%c输出 Unicode 码对应的字符int32%U输出字符对应的 Unicode 码rune,byte%p输出指针所指向的地址指针