Go 语言学习笔记 -第1章 go概述

Go 语言学习笔记 -第1章

@(Golang)

[toc]

学习方向

1、区块链研发

2、Go服务端 数据处理、处理大并发/游戏软件

3、Go分布式/云计算

应用领域

1、区块链应用

区块链技术,简称BT (Blockchain Technology)
是一种互联网数据库技术,其特点是去中心化、公开透明、让每个人均可以参与数据库记录

2、后端服务器应用

美团后台流量支持程序:
支撑主站后台流量(排序、推荐、搜索等),提供负载均衡、Cache、容错、按条件分流、统计运行指标(QPS、Latency)等

网游:
游戏服务器(通讯、逻辑、数据存储)

3、云计算、云服务后台应用

盛大云CDN(内容分发网站):
应用范围:CDN的调度系统、分发系统、监控系统、短域名服务、CDN内部开放平台、运营报表系统等其他小工具等

京东云消息推送:
应用范围:后台所有服务全部用go实现

golang的计算能力强

如何学习

1.学习方法总结:

1、高效学习?

2、整体框架->细节

3、快速学习

4、Know how-> Know why

5、多琢磨别人怎么做的?

6、技术细节

2.快速深入学习新技术方法

需求:

1、项目开发时候,需要解决某个问题

2、跳槽、学习新技术

先看看使用现有的技术能否解决:

可以解决

1)使用传统的方法可以解决,但是不够好

2)使用新技术

学习新技术或者知识点

1)原理

2)基本语法

快速入门

1)简单

2)了解新技术或者知识点的基本使用

这里不需要涉及技术细节

这里体现水平

讨论新技术或者知识点细节 -很重要

1)怎么使用更规范

2)使用陷阱

3)需要使用时,注意什么....

Go语言发展

为什么要创建Go语言

1、能够充分发挥硬件功能

2、缺乏足够简洁高效编程语言

3、编译速度慢?内存泄漏?

Go语言发展

Go语言特点

保证了既能到达静态编译语言的安全和性能,又达到动态语言开发维护的高效率

Go = C+ Python

1、从C语言中继承了很多理念、包括表达式语法、控制结构、基础数据类型、参数传值、指针等
也保留了和C语言一样的编译执行方式以及弱化的指针

//指针
func testPtr(num *int){
    *num = 20
}

2、引入包的概念、用于组织程序结构,Go语言的每一个文件都要归属于一个包、而不能单独存在

package main

3、垃圾回收机制、内存自动回收、不需要开发人员管理【出现内存泄漏】

4、天然并发

1)从语言层面支持并发、实现简单

2)goroutine,轻量级线程、可实现大并发处理、高效利用多核

3)基于CPS并发模型(Communicating Sequential Processes)实现

5、吸收管道通信机制、形成Go语言特有的管道Channel

通过管道Channel, 可以实现不同的goroutine之间的相互通信

6、函数返回多个值

func getSumAndSub(n1 int, n2 int)(int, int){
    sum := n1 + n2 //go语句不用带分号
    sub := n1 - n2
    return sum, sub
}

7、新的创新、切片slice、延迟执行defer等

题外话

  1. Go语言里所有首字母大写的一般是public方法,首字母小写不能直接调用
  2. Golang严格禁止浪费,所有没使用的变量、包都会被编译器报错
  3. Golang严格区分大小写

Go快速入门

1.go的安装下载 官方地址

看一个例子:

main.go

package main //声明文件的package

import "fmt"

//入口函数, 无参数, 无返回值
func main() {

    /*
        多行注释
       天生支持utf-8
    */
    fmt.Println("hello world, 你好")

}

这里要注意几点

1.GO程序是通过package来组织的

2.只有package名称为main的包可以包含main函数

3.一个可执行程序有且仅有一个main包

4.用于输出的包, 不能包含没有用到的包, 否则会报错

2.解释执行

    go run  test.go

3.编译执行

    go build test.go   //生成exe文件,执行就可以,默认生成的可执行文件是当前文件名
    ./test

  //可以使用-o 来指定生成的文件名称

Go执行流程分析

流程分析

go    文件->go build(编译)->可执行文件->运行->结果

go    文件->go run(编译运行一步)->结果

区别

1、如果先编译生成可执行文件、可以将可执行文件拷贝到没有go开发环境机器上 仍然可以运行

2、如果直接go run go源码,如果在另外一个机器上运行,也需要go环境,否则无法执行

3、在编译中,编译器会将程序运行依赖的库文件包含在可执行文件中,所以可执行文件变大很多

4、通过go build 可以指定生成的二进制文件

go build -o main.exe test.go

5、如果程序有错误, 编译会报错

GO环境变量与工作目录

GOPATH下需要建立三个目录

bin -存放编译生成的可执行文件

pkg-存放编译后生成的包文件

src-存放项目源码

go mod 是Golang 1.11 版本引入的官方包(package)依赖管理工具,用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。

之前Golang 主要依靠vendor和GOPATH来管理依赖库,vendor相对主流,

但现在官方更提倡go mod

你可能感兴趣的:(golang,学习笔记,程序员)