• 【Golang】Golang学习day01:初识Golang


     8420b26844034fab91b6df661ae68671.png

    个人简介: 

    > 📦个人主页:赵四司机
    > 🏆学习方向:JAVA后端开发 
    > 📣种一棵树最好的时间是十年前,其次是现在!
    > ⏰往期文章:SpringBoot项目整合微信支付
    > 🧡喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。

    前言:

    最近发现Golang很火,而且他还是一款编译型语言,速度快,处理高并发能力强。抱着一颗好奇的心,我打算学一下Golang的一些基础知识拓宽一下自己的知识面,领会一下Go语言的神奇之处,假如后面需要用到Go语言也能更容易上手。俗话说好记性不如烂笔头,而且我本来就记性不怎么好,所以我学习喜欢做上笔记记录,这里我就将我的学习成果记录到Golang专栏里,自己以后复习也好翻阅,要是你也有兴趣学习Golang也可以查看我这个专栏的文章。

    目录

    一:走进Golang

    1.Go语言简介

    2.Go语言特点

    3.Go语言应用领域

    二:入门实操

    1.Go代码组织

    2.Go项目管理工具

    3.入门案例

    三:Golang变量

    1.变量声明

    2.变量赋值

    3.匿名变量

    四:Golang常量

    1.常量定义

     2.iota

     五:Golang数据类型

    1.布尔类型

    2.数字类型

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

    (2)浮点型

    3.字符串类型


    一:走进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.入门案例

    ①创建项目

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

    ②初始化项目

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

    ③创建包及相应模块

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

    ④相互调用

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

    ⑤运行测试

    在终端执行go run main.go

    三:Golang变量

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

    1.变量声明

    逐个声明:

    1. func test() {
    2. var name string
    3. var age int
    4. var m bool
    5. }

     批量声明:

    1. func test() {
    2. var (
    3. name string
    4. age int
    5. m bool
    6. )
    7. }

    2.变量赋值

    1. //1.
    2. var name = "zhangsan"
    3. var age = 20
    4. var m = true
    5. //2.
    6. var name string
    7. var age int
    8. var m bool
    9. name = "zhangsan"
    10. age = 20
    11. m = true
    12. //3.
    13. name := "zhangsan"
    14. age := 20
    15. m := true
    16. //4.
    17. name, age, m := "zhangsan", 20, true

    3.匿名变量

    1. package main
    2. import "fmt"
    3. func getNameAndAge() (string, int) {
    4. return "zhaosi", 20
    5. }
    6. func main() {
    7. name, age := getNameAndAge()
    8. fmt.Printf("name: %v\n", name)
    9. fmt.Printf("age: %v\n", age)
    10. }

    四:Golang常量

    1.常量定义

    1. package main
    2. func main() {
    3. //常量定义
    4. const PI float64 = 3.14
    5. const PI2 = 3.15
    6. const (
    7. width = 100
    8. height = 200
    9. )
    10. const i, j = 1, 2
    11. const a, b, c = 1, "zhaosi", true
    12. }

     2.iota

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

    1. func main() {
    2. const (
    3. a1 = iota
    4. a2 = iota
    5. a3 = iota
    6. )
    7. fmt.Printf("a1: %v\n", a1)
    8. fmt.Printf("a2: %v\n", a2)
    9. fmt.Printf("a3: %v\n", a3)
    10. }

    1. func main() {
    2. const (
    3. a1 = iota
    4. _ //表示跳过
    5. a3 = iota
    6. )
    7. fmt.Printf("a1: %v\n", a1)
    8. fmt.Printf("a3: %v\n", a3)
    9. }

     

    1. func main() {
    2. const (
    3. a1 = iota
    4. a2 = 100
    5. a3 = iota
    6. )
    7. fmt.Printf("a1: %v\n", a1)
    8. fmt.Printf("a2: %v\n", a2)
    9. fmt.Printf("a3: %v\n", a3)
    10. }

     

     五:Golang数据类型

    1.布尔类型

    1. package main
    2. import "fmt"
    3. func main() {
    4. //定义
    5. var flag bool
    6. flag = true
    7. flag1 := false
    8. //使用
    9. age := 18
    10. isAdult := age >= 18
    11. fmt.Printf("isAdult: %v\n", isAdult)
    12. if isAdult {
    13. fmt.Printf("你已经成年了")
    14. } else {
    15. fmt.Printf("你还未成年")
    16. }
    17. }

    需要注意的是,在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)不同进制格式定义数字

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

      

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

       

    (2)浮点型

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

     

    3.字符串类型

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

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

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

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

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

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

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

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

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

    1. s := `
    2. hello
    3. ,
    4. world
    5. !
    6. `
    7. fmt.Printf("s: %v\n", s)

      

  • 相关阅读:
    【机器学习】什么是连续状态空间?如何构建一个强化学习的算法以及构建强化学习算法中的一些问题
    css实现水滴效果图
    Jmeter提取协议报文、请求头、请求体、响应体
    C#提高编程效率专辑--自动代码生成器
    【面试怎么聊得开?搞懂这几个性能术语,面试官高看你一眼!】
    webpack 配置
    【C++】——阶段性测验(帮助巩固C++前半部分知识)
    使用Qt验证RGB格式
    MATLAB车牌是如何精准定位的???!!!【深度好文】
    毕业设计 深度学习OCR中文识别 - opencv python
  • 原文地址:https://blog.csdn.net/weixin_45750572/article/details/126268397