• golang学习之路2-基础认识(上)



    前言

    学习一门语言,先认识下Golang的基础语法,例如变量定义、数据类型等等。


    一、变量与常量定义

    1.变量

    变量是赋予内存位置以存储特定类型的值的名称。
    常用定义方式:

    // 方式一
    name := xxx
    // 方式二
    var (
    name = x
    age = 18
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.常量

    常量和变量刚好相反,常量一旦声明,其值不可改变,比如重新赋值不能。
    一般使用场景为不变的数据时可用

    // 方式一
    const name = x
    // 方式二
    const (
    	name = ""
    	age = 18
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    完整代码:

    package main
    
    import "fmt"
    
    func main() {
    	// 1、变量定义:var
    	name := "ppl"
    
    	var name1 = "ppl"
    
    	var name2 string
    	name2 = "ppl"
    
    	// 定义多个变量
    	a, b := "a", "b"
    
    	// 常量定义:const
    	const const1 = 3.14
    
    	const (
    		const2 = 3.14
    		const3 = 0.618
    	)
    
    	fmt.Println(name, name1, name2, a, b)
    	fmt.Println(const1, const2, const3)
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    在这里插入图片描述

    2.数据类型

    1 布尔型: true 或 false
    2 数字类型:整型 int 和浮点型 float32、float64
    3 字符串类型:字符串string
    4 派生类型:Map 类型等等

    func main() {
    	// 1	布尔型: true 或 false
    	bool1 := true
    	// 2	数字类型:整型 int 和浮点型 float32、float64(没有自动类型提升或转换)
    	number := 10
    	// 3	字符串类型:字符串string
    	name := "ppl"
    	// 4	派生类型:Map 类型等等
    	Map := make(map[string]string)
    	Map ["map"] = "yes"
    
    	fmt.Println(bool1, number, name, Map)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    二、自增自减

    语法必须单独一行

    package main
    
    import "fmt"
    
    func main() {
    	age := 0
    	age++
    
    	//fmt.Println(age++)  不允许,必须单独一行 ++
    	fmt.Println(age)
    
    	age--
    	fmt.Println(age)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述


    三、指针

    什么是指针?
    一个指针变量指向了一个值的内存地址,内部垃圾回收机制(gc)。

    1.使用指针& 及 *

    • 变量指针存储地址:&name
    • 使用指针访问值:*ptr
    // 声明实际变量
    name := "ppl"
    // 声明指针变量且存储地址=&name
    ptr := &name
    fmt.Println("name:", name)
    fmt.Println("name ptr:", ptr)
    fmt.Println("name ptr使用指针访问值:", *ptr)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.空指针

    空指针:nil,既空值如Python的None,mysql的null

    // 空指针:nil,既空值如Python的None,mysql的null
    var ptrNil *string
    // 指针做判断 != 与 ==
    if ptrNil == nil {
    	fmt.Println("ptrNil:", ptrNil)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.指针完整代码

    package main
    
    import "fmt"
    
    func main() {
    	// 声明实际变量
    	name := "ppl"
    	// 声明指针变量且存储地址=&name
    	ptr := &name
    	fmt.Println("name:", name)
    	fmt.Println("name ptr:", ptr)
    	fmt.Println("name ptr使用指针访问值:", *ptr)
    
    	// 使用new关键字定义
    	name1 := new(string)
    	*name1 = "ppl"
    	fmt.Println(name1)
    	fmt.Println(*name1)
    	fmt.Println("strPtr():", strPtr(*name1))
    
    	// 空指针:nil,既空值如Python的None,mysql的null
    	var ptrNil *string
    	// 指针做判断 != 与 ==
    	if ptrNil == nil {
    		fmt.Println("ptrNil:", ptrNil)
    	}
    }
    
    func strPtr(str string) *string {
    	// 返回 string 的指针
    	return &str
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    四、不支持语法

    1.自增自减 --i 及 ++i

    正确写法:i++ 或 i–

    2.不支持内存地址(指针)加减

    3.不支持三元运算符

    java:a > b ? a : b
    python:a if a > b else b

    4.条件判断只有bool false才是逻辑假

    数字0 及 nil 不支持作为条件判断语法,只有布尔类型的false,不同于python是支持的。


    五、字符串string

    go语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
    如果需要替换等操作,需要结合strings包,以下是一些基础的用法:

    1.原生输出

    使用反问号:``

    2.len获取字符串长度

    len 方法:获取字符长度 len(xx)

    3.拼接&格式化输出

    str1 + str2
    以上详细如下代码:

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	str := "ppl\nPPL"
    	// 1.原生输出,使用反问号:``
    	str1 := `Use "go help " for more information about a command.
    		Additional help topics:
            buildconstraint build constraints
            buildmode       build modes
    
    Use "go help " for more information about that topic.
    `
    	fmt.Println(str)
    	fmt.Println(str1)
    
    	// 2.len 方法:获取字符长度
    	lenStr := len(str)
    	fmt.Println("len(str)=", lenStr)
    
    	// 3.拼接&格式化输出
    	joinStr := str + "+++join+++join"
    	fmt.Println(joinStr)
    	fmt.Printf("joinStr=%s", joinStr)
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这里插入图片描述

    4.字符串切片

    左闭右开(包含左边,不包含右边)

    // 4.字符串切片
    str11 := "HelloWord"
    fmt.Println(str11[:5])	// 打印 Hello (切片0-4的字符)
    fmt.Println(str11[5:])	// 打印 Word	 (切片5-最后的字符)
    fmt.Println(str11[2:5])	// 打印 第2-第5个字符
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    End

  • 相关阅读:
    异或和大小比较类问题——抓住最高位:CF1863F
    React+TS前台项目实战(六)-- 全局常用组件Button封装
    Nginx之 location 详解
    ShardingSphere-proxy-5.0.0建立mysql读写分离的连接(六)
    初识设计模式之单例模式
    vue3双向绑定原理(对比vue2)
    MyBatis的各种查询功能
    杰理之录音模式改录音AUX会出现复位【篇】
    进程相关内容(三)
    华为全联接大会2023 | 尚宇亮:携手启动O3社区发布
  • 原文地址:https://blog.csdn.net/qq_42675140/article/details/127476486