当前位置: 首页 > article >正文

【新人系列】Golang 入门(一):基础介绍

✍ 个人博客:https://blog.csdn.net/Newin2020?type=blog
📝 专栏地址:https://blog.csdn.net/newin2020/category_12898955.html
📣 专栏定位:为 0 基础刚入门 Golang 的小伙伴提供详细的讲解,也欢迎大佬们一起交流~
📚 专栏简介:在这个专栏,我将带着大家从 0 开始入门 Golang 的学习。在这个 Golang 的新人系列专栏下,将会总结 Golang 入门基础的一些知识点,并由浅入深的学习这些知识点,方便大家快速入门学习~
❤️ 如果有收获的话,欢迎点赞 👍 收藏 📁 关注,您的支持就是我创作的最大动力 💪

1. Go 语言介绍

在这里插入图片描述

1.1 Go 语言优势

  1. 语法简单 - 开发效率高(例如下面短短十行代码就实现了一个简单的 HTTP 服务器)
package main

import (
    "net/http"
)

func main() {
    http.Handle("/", http.FileServer(http.Dir(".")))
    http.ListenAndServer(":8080", nil)
}
  1. 集各种语言的优势,有丰富的标准库和完善的工具链 - 大量参考 c 和 python

    1. c 语言:静态类型系统、指针操作等特点
    2. Python 语言:简洁语法、垃圾回收等优势
  2. 执行性能高 - 直接编译成二进制,部署非常简单

    1. 想运行 Python 程序则需要预先安装好 Python
    2. 想运行 Java 程序则需要预先安装 jdk
    3. 而想运行 go 程序则不用事先安装任何软件,因为它本身就是 exe 文件可以直接执行
      暂时无法在飞书文档外展示此内容
  3. 并发编程非常高效 - goroutine

  4. 编译速度快 - 比 C++、Java 编译快

1.2 Go 语言能做什么?

1.2.1 应用场景

  1. Web 开发

    gin (ginex)、hertz、beego 等

  2. 容器虚拟化

    docker、k8s、istio

  3. 中间件

    etcd、tidb、infuluxdb、nsq 等

  4. 区块链

    以太坊、fabric

  5. 微服务

    kitex、go-zero、dapr、rpcx、kratos、dubbo-go

1.2.2 使用情况

  1. 国内使用热度超过国外

  2. 大量国内公司使用

    字节跳动、百度、腾讯、阿里、B 站、小米、滴滴、京东、360、七牛云、知乎、美团、OPPO 等

1.3 开发环境

1.3.1 安装 Golang

直接打开浏览器输入 go.dev 网址进行下载即可。

https://go.dev/

在这里插入图片描述

如果打不开的话可以尝试使用 Golang 中国的 studygolang 镜像。

https://studygolang.com/dl

在这里插入图片描述

另外,如果访问 github 的速度非常慢的话,可以配置 go mod proxy,打开下面的网页按照提示操作即可,配置完成后下载第三方包的速度会大大加快。

https://goproxy.cn/

在这里插入图片描述

1.3.2 配置开发环境

常用的 Golang 编辑器 / IDE 有两个,我一般会更习惯 Goland 进行开发~

  1. vscode

https://code.visualstudio.com/

vscode 是一款由微软开发的,能运行在 Mac、Windows 和 Linux 上的跨平台开源代码编辑器。它可以通过扩展程序为编辑器实现代码高亮、代码提示编译调试、文档生成等功能,配置完成后可以视为一个齐全的 IDE。

在这里插入图片描述

  1. Goland

https://www.jetbrains.com/go/download/#section=windows

Goland 是由 JetBrains 公司开发的一个新的商业 IDE,相比 vscode,它在重构、代码生成等方面做的更好。Goland 是一个收费软件,我们可以直接从官网下载,然后可以 30 天免费试用。

在这里插入图片描述

1.3.3 云开发

https://cloud.bytedance.net/cloudide?x-resource-account=public

除了 Gloand 的使用,我大多时间会直接在公司内部的云开发平台写代码,因为可以避免很多环境的问题。但是,有些操作在云平台难以实现,一般都是搭配这本地环境使用。

在这里插入图片描述

2. 变量与常量

在这里插入图片描述

2.1 定义与使用

2.1.1 命名规则

  1. 一个名字必须以一个字母(Unicode 字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线
  2. 大写字母和小写字母是不同的:heapSort 和 Heapsort 是两个不同的名字
  3. Go 语言程序员推荐使用驼峰式命名,当名字由几个单词组成时优先使用大小写分隔,而不是优先用下划线分隔
  4. 像 ASCII 和 HTML 这样的缩略词则避免使用大小写混合的写法,它们可能被称为 htmlEscape、HTMLEscape 或 escapeHTML,但不会是 escapeHtm
  5. Go 语言中类似 if 和 switch 的关键字有 25 个;关键字不能用于自定义名字,只能在特定语法结构中使用
break      default       func     interface   select
case       defer         go       map         struct
chan       else          goto     package     switch
const      fallthrough   if       range       type
continue   for           import   return      var

变量名可见性

  1. 如果一个名字是在函数内部定义,那么它就只在函数内部有效。如果是在函数外部定义,那么将在当前包的所有文件中都可以访问。
  2. 名字的开头字母的大小写决定了名字在包外的可见性。如果一个名字是大写字母开头的,那么它将是导出的,也就是说可以被外部的包访问,例如fmt包的Printf函数就是导出的,可以在fmt包外部访问。
  3. 包本身的名字一般总是用小写字母。

2.1.2 如何定义变量?

  1. 变量必须先定义才能使用
  2. go 语言是静态语言,要求变量的类型和赋值类型一致
  3. 变量名不能冲突
  4. 简洁变量定义不能用于全局变量
  5. 变量是有零值,也就是默认值
  6. 定义了变量一定要使用,否则会报错

下面声明变量的方式都等价:实践中一般使用前两种形式中的某个,初始值重要的话就显式地指定变量的值,否则指定类型使用隐式初始化。

  • 第一种形式,是一条短变量声明,最简洁,但只能用在函数内部,而不能用于包变量。
  • 第二种形式依赖于字符串的默认初始化零值机制,被初始化为 “”。
  • 第三种形式用得很少,除非同时声明多个变量。
  • 第四种形式显式地标明变量的类型,当变量类型与初值类型相同时,类型冗余,但如果两者类型不同,变量类型就必须了。
// 方法一
s := ""
// 方法二
var s string
// 方法三
var s = ""
// 方法四
var s string = ""

注意:
自增语句 i++ 给 i 加 1;这和 i+=1 以及 i=i+1 都是等价的。对应的还有 i-- 给 i 减 1。它们是语句,而不像 C 系的其它语言那样是表达式。所以 j=i++ 非法,而且 ++ 和 – 都只能放在变量名后面,因此 --i 也非法。

2.1.3 常量定义须知

  1. 常量定义的时候指定的值不能修改,常量尽量大写
  2. 常量类型只可以定义 bool、数值(整数、浮点数和复数)和字符串
  3. 不曾使用的常量,没有强制使用的要求
  4. 显示指定类型的时候,必须确保常量左右值类型一致
  5. 同时定义多个常量时,需要注意未指明的常量将引用前面定义的值:
const (
    x int = 16
    y
    s = "abc"
    z
    m
)
fmt.Println(x, y, s, z, m)    //16 16 abc abc abc

2.2 iota 的使用细节

iota,特殊常量,可以认为是一个可以被编译器修改的常量。

const(
    ERR1 = iota
    ERR2
    ERR25
    ERR3
)
fmt.Println(ERR1, ERR2, ERR25, ERR3)    //0 1 2 3

const(
    ERR1 = iota + 1
    ERR2
    ERR25 = "ha"
    ERR3
    ERR4 = iota
)
fmt.Println(ERR1, ERR2, ERR25, ERR3, ERR4)    //1 2 ha ha 4

注意:

  1. 如果中断了 iota,那么必须显示的恢复,后续会自动递增
  2. 自增类型默认是 int 类型
  3. iota 能简化 const 类型的定义
  4. 每次出现 const 的时候,iota 初始化为 0

2.3 匿名变量的定义与使用

匿名变量是一种特殊的变量,使用 _ 表示,它只占位不存储值,可用于忽略函数返回值中不需要的部分,或者在多重赋值中丢弃不需要的变量。

//匿名变量
var _ int

func a() (int, bool){
    return 0, false
}
_, ok := a()
if ok {
    //打印
}

http://www.kler.cn/a/555004.html

相关文章:

  • 分布式数据库:架构演进、核心挑战与行业落地实践
  • SpringCloud面试题----服务注册和发现是什么意思?Spring Cloud如何实现
  • 推荐一款AI大模型托管平台-OpenWebUI
  • Debezium 与 Apache Kafka 的集成方式
  • EasyPoi系列之通用导入接口设计
  • 如何用ClassFinal加密JAR保护知识产权!
  • Spring中事务的传播行为方式
  • 如何看nginx.conf文件?
  • vue3学习1
  • ubuntu 执行 sudo apt-get update 报错
  • Spring扩展点实战-动态线程池
  • Rust编程语言入门教程 (七)函数与控制流
  • 在 Centos7 上部署 ASP.NET 8.0 + YOLOv11 的踩坑实录
  • Web 后端 请求与响应
  • Spring Boot 集成 RabbitMQ 并实现消息确认机制
  • 3月营销日历:开启春日盛宴,绽放生活魅力
  • 浅谈网络 | 容器网络之Cilium
  • 设计模式之适配模式是什么?以及在Spring AOP中的拦截器链的使用源码解析。
  • C# 十六进制字符串转换为十进制
  • 解决 `pip is configured with locations that require TLS/SSL` 错误