【Golang】Golang学习day01:初识Golang

简介: 主要介绍Go语言的相关背景以及Go语言的数据类型等基础。

一:走进Golang

1.Go语言简介

       Go(又称Golang)是Google的Robert Griesemer,Pop Pike及Ken Thompson开发的一种静态强类型、编译型语言。Go语言语法与C相近,但是其功能更完备,具有内存安全、GC(垃圾回收)、结构形态及CSP-style并发计算等功能。

2.Go语言特点

    • 背靠大厂,由Google推出,可靠性强
    • 天生支持并发(最显著特点)
    • 语法简单,容易上手
    • 内置runtime,支持垃圾回收
    • 可直接编译成机器码,不依赖其他库
    • 丰富的标准库
    • 跨平台编译

           我们都知道Java得益于它的虚拟机可以实现一次编译到处运行,而Go也是支持跨平台运行的,经过了解原来是Go语言得益于它的模块化设计和模块化,针对不同平台都可以生成对应的二进制可执行机器码,他不需要依赖性,它的代码可以在任何服务器和应用程序上面运行。此外,Go语言拥有自己的链接器,不依赖任何系统提供的编译器和链接器。因此编译出的二进制可执行文件几乎可以运行在任何系统环境中。

    3.Go语言应用领域

      • 服务器编程
      • 开发云平台
      • 区块链
      • 分布式系统
      • 网络编程

      二:入门实操

      1.Go代码组织

      Go语言使用包和模块来组织代码,包对应到文件系统里面就是文件夹,模块就是.go文件,一个包中会有多个模块,或者多个子包。

      2.Go项目管理工具

      早期的Go项目使用gopath来管理项目,不方便使用而且易出错,从Golang 1.11开始使用gomod管理项目,当然还有第三方模块例如govendor,一般都是采用gomod较多。

      3.入门案例

      ①创建项目

      在文件夹中新建一个文件夹作为项目根目录

      image.gif编辑

      ②初始化项目

      在项目根文件夹下打开终端执行go mod init xxx,xxx一般用你项目名称表示,比如我这里是go mod init gopro1,然后就会自动创建一个.mod文件。

      image.gif编辑

      ③创建包及相应模块

      在项目根目录下创建user包及user.go模块,模块内容见下图:

      image.gif编辑

      ④相互调用

      在项目根目录下创建main.go模块并编写下面代码进行调用:

      image.gif编辑

      ⑤运行测试

      在终端执行go run main.go

      image.gif编辑

      三:Golang变量

      Go语言的变量声明和c或者java都不太一样,在java中我们声明变量是 数据类型 变量名,但是在Go语言中是这样声明的 var 变量名 数据类型。声明方式主要有以下几种:

      1.变量声明

      逐个声明:

      func test() {
        var name string
        var age int
        var m bool
      }

      image.gif

      批量声明:

      func test() {
        var (
          name string
          age  int
          m    bool
        )
      }

      image.gif

      2.变量赋值

      //1.
        var name = "zhangsan"
        var age = 20
        var m = true
        //2.
        var name string
        var age int
        var m bool
        name = "zhangsan"
        age = 20
        m = true
        //3.
        name := "zhangsan"
        age := 20
        m := true
        //4.
        name, age, m := "zhangsan", 20, true

      image.gif

      3.匿名变量

      package main
      import "fmt"
      func getNameAndAge() (string, int) {
        return "zhaosi", 20
      }
      func main() {
        name, age := getNameAndAge()
        fmt.Printf("name: %v\n", name)
        fmt.Printf("age: %v\n", age)
      }

      image.gif

      四:Golang常量

      1.常量定义

      package main
      func main() {
        //常量定义
        const PI float64 = 3.14
        const PI2 = 3.15
        const (
          width  = 100
          height = 200
        )
        const i, j = 1, 2
        const a, b, c = 1, "zhaosi", true
      }

      image.gif

      2.iota

      iota是一个可被编译器修改的常量,它的默认值是0,没调用一次加1,遇到const关键字时候被重置为0

      func main() {
        const (
          a1 = iota
          a2 = iota
          a3 = iota
        )
        fmt.Printf("a1: %v\n", a1)
        fmt.Printf("a2: %v\n", a2)
        fmt.Printf("a3: %v\n", a3)
      }

      image.gif

      image.gif编辑

      func main() {
        const (
          a1 = iota
          _  //表示跳过
          a3 = iota
        )
        fmt.Printf("a1: %v\n", a1)
        fmt.Printf("a3: %v\n", a3)
      }

      image.gif

      image.gif编辑

      func main() {
        const (
          a1 = iota
          a2 = 100
          a3 = iota
        )
        fmt.Printf("a1: %v\n", a1)
        fmt.Printf("a2: %v\n", a2)
        fmt.Printf("a3: %v\n", a3)
      }

      image.gif

      image.gif编辑

      五:Golang数据类型

      1.布尔类型

      package main
      import "fmt"
      func main() {
        //定义
        var flag bool
        flag = true
        flag1 := false 
        //使用
        age := 18
        isAdult := age >= 18
        fmt.Printf("isAdult: %v\n", isAdult)
        if isAdult {
          fmt.Printf("你已经成年了")
        } else {
          fmt.Printf("你还未成年")
        }
      }

      image.gif

      需要注意的是,在c语言中我们可以使用0和1来代替false和true,但是在Go语言中是不行的。

      2.数字类型

      Go语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码。

      Go也有基于架构的类型,例如:int、uint(无符号整数)、uintptr(整数类型)

      这些类型的长度都是根据运行程序所在操作系统类型决定的:

        • int和uint在32位操作系统上,它们均使用32位(4字节),在64位操作系统上,它们均采用64位(8个字节)
        • uintptr的长度被设定为足够存放一个指针即可

        Go语言中没有float类型(只有float32和float64)没有double类型

        (1)不同进制格式定义数字

        func main() {
          //十进制
          a := 10
          fmt.Printf("十进制:%d\n", a) //%d
          fmt.Printf("二进制:%b\n", a) //%b
        }

        image.gif

        image.gif编辑

        // 八进制 以0开头
          b := 077
          fmt.Printf("%o \n", b)
          //十六进制 以0x开头
          c := 0xff
          fmt.Printf("%x \n", c) //ff
          fmt.Printf("%X \n", c) //FF

        image.gif

         image.gif编辑

        (2)浮点型

        fmt.Printf("%f \n", math.Pi)   
        fmt.Printf("%.2f \n", math.Pi)   //保留两位小数

        image.gif

        image.gif编辑

        3.字符串类型

        内置的len函数可以返回一个字符串中的字节数目(不是rune字符数目),索引操作s[i]返回第i个字节的字节值,i必须满足0 ≤ i< len(s)条件约束。

        func main() {
          s := "hello, world"
          fmt.Println(len(s))     // "12"
          fmt.Println(s[0], s[7]) // "104 119" ('h' and 'w')
        }

        image.gif

        子字符串操作s[i:j]基于原始的s字符串的第i个字节开始到第j个字节(并不包含j本身)生成一个新字符串。生成的新字符串将包含j-i个字节。

        fmt.Printf(s[0:5]) //hello

        image.gif

        不管i还是j都可能被忽略,当它们被忽略时将采用0作为开始位置,采用len(s)作为结束的位置。

        fmt.Println(s[:5]) // "hello"
        fmt.Println(s[7:]) // "world"
        fmt.Println(s[:])  // "hello, world"

        image.gif

        其中+操作符将两个字符串连接构造一个新字符串:

        fmt.Println("goodbye" + s[5:]) // "goodbye, world"

        image.gif

        当然还可以使用`......`来表示多行字符串

        s := `
            hello
          ,
          world
          !
        `
        fmt.Printf("s: %v\n", s)

        image.gif

        image.gif编辑

        相关文章
        |
        缓存 机器人 Go
        Golang 语言 beego 学习之安装和快速入门
        Golang 语言 beego 学习之安装和快速入门
        75 0
        |
        6月前
        |
        SQL 前端开发 Go
        编程笔记 GOLANG基础 001 为什么要学习Go语言
        编程笔记 GOLANG基础 001 为什么要学习Go语言
        |
        1月前
        |
        安全 Java Go
        【Golang入门】简介与基本语法学习
        Golang语言入门教程,介绍了Go语言的简介、基本语法、程序结构、变量和常量、控制结构、函数、并发编程、接口和类型、导入包、作用域以及错误处理等关键概念,为初学者提供了一个全面的学习起点。
        19 0
        |
        3月前
        |
        机器学习/深度学习 存储 人工智能
        Golang bytes 包学习
        Golang bytes 包学习
        24 3
        |
        4月前
        |
        编译器 Go C语言
        通过例子学习在golang中调试程序
        【7月更文挑战第4天】Go语言支持使用cgo进行汇编调试,官方文档在golang.org/doc/asm。注意,调试Go运行时可能遇到变量不可用或行号错误,需谨慎使用step命令。
        70 1
        通过例子学习在golang中调试程序
        |
        6月前
        |
        Go
        golang学习参考记录
        golang学习参考记录
        |
        6月前
        |
        JSON Go 数据格式
        golang学习7,glang的web的restful接口结构体传参
        golang学习7,glang的web的restful接口结构体传参
        |
        6月前
        |
        JSON Go 数据格式
        golang学习6,glang的web的restful接口传参
        golang学习6,glang的web的restful接口传参
        |
        6月前
        |
        Java Go 开发工具
        golang学习1,dea的golang-1.22.0
        golang学习1,dea的golang-1.22.0
        |
        6月前
        |
        JSON Go 数据格式
        golang学习5,glang的web的restful接口
        golang学习5,glang的web的restful接口