Golang 语言学习 01 包含如何快速学习一门新语言

Golang方向

  1. 区块链

  2. go服务器端 (后台流量支撑程序)

支撑主站后台流量(排序,推荐,搜索等),提供负载均衡,cache,容错,按条件分流,统计运行指标 (qps, latency 中)等功能

  1. 游戏软件(数据平台)

  2. golang分布式/云计算/云服务

如何快速深入学习新技术 or 知识点

我们有一个需求

  1. 项目开发时,我们需要解决某个问题
  2. 跳槽,学习新技术

先看现有技术是否可以解决

传统方法可以,但不够好

使用新技术 ajax

解决快速入门问题
1. 学习基本原理 和 基本语法

快速入门案例

案例要求:
			1. 简单
			2. 了解新技术 or 知识点的 基本适用
			3. 不涉及 技术细节

讨论新技术/知识点 的细节(这里非常考察程序员的水平)
1. 怎么使用规范
2. 使用陷阱
3. 使用时,需要注意什么

小节

在这里插入图片描述

编程通识基本概念

什么是程序

完成某个功能指令的集合。

编写源代码
Write source code

源代码编译 得到 二进制可移植性文件
Compile source code to obtain binary portability files

类比 理解

在这里插入图片描述

什么是指令

程序是 一系列 有序 指令的集合。

Go语言发展史

核心开发人员

Ken Thompson: C语言 和 B语言 发明人
Rob Pike: Unix团队成员, BEll Labs
Rovert Griesemer: Java的HotSpot编辑器,Chrome浏览JS

长处

可以合理利用多核多CPU
风格统一
计算能力增强
处理大并发
C/C++ 运行快,但是编译慢,而且内存泄露

时间

2007开始
2009 开源
2015 1.5版本
2018 Go 1.10

Go特点

Go = C + Python
继承 C, 存在 参数调用 和 指针

  1. 指针
func testPtr(num *int) {
		*num =20
}
  1. 包的概念
    Go 语言的—个文件都要归属于—个包,而不能单独存在。

在这里插入图片描述

  1. 垃圾回收机制
    内存自动回收

  2. 天然并发
    goruitine 轻量级线程, 实现 大并发处理
    局域CPS并发模型 Communicating Sequential Processes实现

  3. 管道通信机制
    channel 实现 goroute 之间相互通信

  4. 函数返回多值
    在这里插入图片描述

  5. 切边slice 和 延时执行defer

编辑器

VS code
Sublime Text
Vim
Emacs

环境搭建 + 安装SDK(Mac)

bashrc配置环境变量路径
我用的是bash
所以打开根目录下的bashrc添加go的路径就好了

下面只是一个例子,具体的路径,需要你在自己电脑上找
在这里插入图片描述
source 一下bashrc

检查是否安装成功

go version

简单程序入门

开发一个hello.go 程序

开发步骤

目录结构

在这里插入图片描述
写程序


package main

import "fmt"

func main() {
    fmt.Println("Hello, world!")
}

执行文件
go run hello.go

或者先

go build hello.go

 ./hello

如果要指定文件名

go build -o myhello.exe hello.go

Golang执行流程

如果是对源码编译后,再执行,Go的执行流程如下图
在这里插入图片描述
如果我们是对源码直接执行 go run 源码,Go 的执行流程如下图
在这里插入图片描述

在VScode编写项目

配置go.mod

要在你创建的project下,通过

go mod init 项目名

生成一个go.mod配置
用于管理模块依赖关系的文件

模块路径(Module Path):go.mod 文件中包含了当前项目的模块路径,模块路径是项目在代码仓库中的唯一标识符,通常以域名逆序形式(例如 github.com/user/project)。

依赖项管理:go.mod 文件列出了项目所依赖的其他模块以及它们的版本信息。这些依赖项通常包括项目引用的外部库。Go 模块系统会确保依赖项的版本不会与其他依赖项冲突,以确保构建稳定的代码。

版本信息:对于每个依赖项,go.mod 文件记录了所使用的版本号或版本范围,以确保项目在不同的构建之间具有一致的依赖关系。

自动依赖管理:Go 模块系统允许开发者引入新的依赖项,同时自动更新 go.mod 文件,以确保依赖项版本的一致性。

在这里插入图片描述
改成下面可以通过vscode看到输出结果

package main


// import "fmt" //fmt包中提供格式化,输出,输入的函数。

import (
    "log"
)

func main() {
    // fmt.Println("Hello, world!")

    log.Println("Hello world!")
    log.Println("tom\tjack")
}

转义字符

\t 制表符
\n 换行符
\r 回车

改进,并增加 测试 两个输出的

package main


import (
    "log"
    "fmt" //fmt包中提供格式化,输出,输入的函数。
)

func getVal(num1 int, num2 int) (int, int) {
    
    sum := num1 + num2
    sub := num1 - num2

    return sum, sub
}

func main() {
    // fmt.Println("Hello, world!")

    log.Println("Hello world!")
    log.Println("tom\tjack")
    // log.Println("天龙八部\r张飞")
    fmt.Println("天龙八部\r张飞")

    // a, b := getVal(1, 2)
    a, b := getVal(1, 2)
	fmt.Println("Sum:", a)
	fmt.Println("Subtraction:", b)


    var str1 = "hello1"
    var str2 = "world2"

    fmt.Println(str1 + str2)


}

常见问题

文件名 和 路径问题
The system cannot find the file specified.
在这里插入图片描述

官网Doc

https://go.dev/learn/
https://go.dev/tour/welcome/1

中文文档
https://studygolang.com/pkgdoc

API

application program interface
包的应用的各个接口

数据类型

data type

基本数据类

整数类型

int
int8 (1个字节)
int16 (2个字节)
int32 (4个字节)
int64 (8个字节)

有符号
在这里插入图片描述
推导

第一位用来表示符号位
其余用来表示数值大小
所以 int8
是 -2的7次方 到 2 七次方-1

无符号
在这里插入图片描述

int其他类型

在这里插入图片描述

浮点类型

float32
float64

字符型

没有,用bye 保存单个字符

布尔型

bool

字符串

string

byte unit8的别名
rune int32的别名

派生/复杂数据类型

指针pointer

数组

结构体 struct

管道channel (多并发)

函数

切片 slice

接口 interface

map

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值