Go语言之路————go基本语法、数据类型、变量、常量、输出 ...

张春  金牌会员 | 2025-1-13 21:46:12 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 899|帖子 899|积分 2697

前言



  • 我是一名多年Java开发人员,由于工作需要现在要学习go语言,Go语言之路是一个系列,记载着我从0开始接触Go,到背面能正常完成工作上的业务开发的过程,如果你也是个小白大概转Go语言的,希望我这篇文章对你有所资助。
  • 有关go其他基础的内容的文章各人可以查看我的主页,接下来重要就是把这个系列更完,更完之后我会在每篇文章中挂上连接,方便各人跳转和复习。
一、基本语法知识

着实编程语言的语法在大框架上都是大差不差的,这就是为啥一个人纯熟掌握了一门语言,他能迅速上手另一个语言,如果你是java的老手,那么你上手go就会特殊快,go的许多知识点都能在java上找到相似的界说。
我们从一个简单的例子来看看go的语法。
  1. package main
  2. import "fmt"
  3. func main() {
  4.         fmt.Println("hello world")
  5. }
复制代码
我从下面几个要点去解析:

  • package
    这是我们这个文件的包名,没错就是我们项目左侧目次,右键创建的direct目次名,但是main是个特殊的,这是我们整个步伐的入口,你就明白为java中的@SpringBootAppliaction标注的main方法入口,我们的main方法一般都放在package main下。
  • import
    引入的包名,这跟java中你import其他类差不多意思,如果当前go文件中我要用其他文件中的方法大概界说的字段,在本文件中的import中就要引入谁人文件的包名,记住是包名,不是引入谁人文件,也不是引入谁人方法。

    • 如果我们引入多个,可以用括号包起来
    1. import (
    2.         "fmt"
    3.         "example"
    4. )
    复制代码



  • 如果包名太长大概不顺眼,我们还可以起别名
    1. import (
    2.         aaa "fmt"
    3.         bbb "example"
    4. )
    复制代码
    起了别名后,那我们用的时间只需要用别名就好了,好比上面的输出函数我们可以换成这个: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关键字声明的就是常量

  • 单独声明
  1. const a = 1
  2. const b = "2"
复制代码

  • 组合声明
  1. const (
  2.         c = 3
  3.         d = "4"
  4. )
复制代码
直接输出一下看
  1. func main() {
  2.         fmt.Println(a, b, c, d)
  3. }
  4. 输出内容:1 2 3 4
复制代码

  • iota
    iota是一个内置的常量标识符,表现一个常量声明中的无类型整数序数从0开始,一般都是在括号中利用,它可以让下面的常量递增
  1. const (
  2.         Num = iota
  3.         Num1
  4.         Num2
  5.         Num3
  6.         Num4
  7. )
  8. func main() {
  9.         fmt.Println(Num, Num1, Num2, Num3, Num4)
  10. }
  11. 输出:0 1 2 3 4
复制代码
正是有这个特性,以是我们可以用它来表现枚举,由于go中没有正式的enum声明的枚举字段。
四、变量

go中的变量用var关键字来声明,特殊说明的是,go中大部门的变量大概参数这些的声明,都是变量名在前,类型在后的。
  1. var a int
  2. var b string
复制代码
如果连续的变量的类型一样,那我们只需要在最背面声明一次类型就好
  1. var a,b,c int
  2. var d,e,f string
复制代码
还可以用括号包起来
  1. var (
  2.         aa string
  3.         bb string
  4.         cc int
  5. )
复制代码
在开发中,还常常用值等:=(冒号等号)的方法赋值,就是不需要声明类型,让go自己去判断,这种就是简化了变量的界说
  1. func main() {
  2.         a1 := 1
  3.         b1 := "2"
  4.         fmt.Println(a1, b1) //输出1,2
  5.         a1 = 3 //第二次赋值就不需要冒号了,因为前面已经声明过了
  6.         fmt.Println(a1, b1) //输出3,2
  7. }
复制代码
五、作用域

作用域是对基本语法的扩展,我们再第一点中讲到了包的概念,这里说说包之间怎么引用
记住一点:如果我们声明的方法、变量想要本文件私有,那么我们就首字母小写,相反,如果我声明的方法其他文件也能用,那就首字母大写,首字母小写的雷同与java中的private字段,只有本类才气访问

  • 同包之下:新建一个package 叫 yu1,新建两个文件A.go和B.go,可以看到,我在B.go内里,不需要任何引用,直接就能调用a.go中的testA方法,也不需要巨细写
  1. package yu1
  2. import "fmt"
  3. func testA()  {
  4.         fmt.Println("a.go")
  5. }
复制代码
  1. package yu1
  2. func testB() {
  3.         testA()
  4. }
复制代码

  • 差别包,新建一个package为yu2,新建一个文件c.go,在这时间,我如果在c中想引入yu1中a.go中的testA方法,记住必须要满足两个条件,请看我下面代码
  1. package yu2
  2. import "newProject/yu1"
  3. func testC() {
  4.         yu1.TestA()
  5. }
复制代码
信任各人也看出来了,这两个条件就是,import a.go文件的包名yu1,并且a.go中的方法首字母大写,用包名.方法名的方式去引用,这里是个重点,不是用a.go的文件,一定要用包名:包名.方法名,中间有个点,太小了各人别看不清
六、输入输出

go中最常用的输入输出就是fmt包,固然还有文件操纵,这个背面我们在讲,本文先说说fmt包怎么格式化输出。
最简单的例子上面各人也看过了,直接用fmt.Println函数
  1. fmt.Println("我是字符串")
  2. 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输出指针所指向的地址指针
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张春

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表