今天了解到现场一个问题,我们的一个业务系统,最近一周每天下午都收到服务器内存告警的邮件,但那台服务器的内存是16GB,却也不够在上面跑几个tomcat程序的,所以在运行一些博客程序或者论坛程序,以及小的应用系统时,一直不太愿意使用类似SSH或者SpringBoot开源的的java后台框架,一方面是穷,另外就是java的Web后台程序确实耗资源;
从另一个侧面了解到,大公司、包括小公司都将自己的Java后台服务迁移到了Go语言的环境上,所以一直都有使用Go做为Web服务器开发基础框架的想法,不如开始学习Go,也算是多了一个技能傍身。
作为一个写客户端软件的人,其实后台程序包括框架、SDK等等多少还是有学习成本的,出于快速出效果的角度考虑,之前使用的都是相对容易上手的php、nodejs的后台框架,完全忽略性能问题,多少显得不专业;
首先得想清楚为什么学习Go,Go语言的使用场景,从Go语言的发展历史,以及各大公司的应用场景,脚手架是否丰富等各方面做了解。
使用Go语言进行开发的大项目
1) Docker 项目链接:https://github.com/docker/docker
2) Go语言 项目链接:https://github.com/golang/go
3) Kubernetes 项目链接:https://github.com/kubernetes/kubernetes
使用Go语言进行开发的大公司:Google、Facebook、腾讯、百度、七牛云、京东小米等等国内的大厂。
参考李文周的博客进行环境搭建等基础性工作,Go语言教程,https://www.liwenzhou.com/posts/Go/go_menu/
安装还是很容易的,使用各系统下的安装包直接下一步下一步就很顺利的安装了,官方包下载地址:
Go官方镜像站(推荐):https://golang.google.cn/dl/
环境配置:
GOROOT和GOPATH都是环境变量,其中GOROOT是我们安装go开发包的路径,而从Go 1.8版本开始,Go开发包在安装完成后会为GOPATH设置一个默认目录,参见下表GOPATH在不同操作系统平台上的默认值,可以默认,不做修改也是可以的。
平台 | GOPATH默认值 | 举例 |
Windows | %USERPROFILE%/go | C:\Users\用户名\go |
Unix | $HOME/go | /home/用户名/go |
可以执行下面的命令修改GOPROXY:
go env -w GOPROXY=https://goproxy.cn,direct
IDE安装,如果你习惯Visual studio的话,可以使用Visual studio作为开发IDE,MAC下安装Go的插件可能会出现xcrun: error: invalid active developer path, missing xcrun的问题,解决方法,重装xcode command line:
xcode-select --install
然后重新安装插件就可以了
运行前,了解下Go语言的包管理等概念,如果是使用Visual studio的话,只需要选择一个保存go代码的文件夹,然后新建一个main.go的文件:
package main import ( "fmt" ) func main() { fmt.Println(“helloworld!”) }
点运行的时候,会提示缺少launch.json,根据提示自动创建一个,helloworld就成功打印出来了!
关于Go的周边背景和使用体验什么的,建议可以多从不同的渠道了解一些,比方大牛:左耳朵耗子在2012年就写过Go的入门文章,建议一读。陈皓这两篇文章的目录如下:GO 语言简介(上)— 语法
目录
Hello World
运行
自己的package
fmt输出格式
变量和常量
数组
数组的切片操作
分支循环语句
关于分号
map
指针
内存分配
函数
结构体
结构体方法
接口和多态
错误处理 – Error接口
错误处理 – Defer
错误处理 – Panic/Recover
目录
goroutine
goroutine的并发安全性
原子操作
Channel 信道
定时器
Socket编程
系统调用
执行命令行
命令行参数
一个简单的HTTP Server
从上面的目录,如果花半小时看完,多少能对Go语言的全貌有了个基本的认识!
1、Go是静态强类型的语言,可以理解为变量声明时必须使用指定类型,例如整型、字符串、布尔型和数组等,当然Go也提供了动态类型推导的语法支持;
2、Go是编译型语言,Go代码编译后直接是机器码,可以直接运行;
3、Go语言变量存在基本类型、指针类型、引用等类型,对于指针类型、或者容器类型的对象,必须先申请内存,否则会抛出异常;
4、函数与方法有区别,函数作用域是全局的,方法只作用于特定对象;
-------------------广告线---------------
项目、合作,欢迎勾搭,邮箱:promall@qq.com
本文为呱牛笔记原创文章,转载无需和我联系,但请注明来自呱牛笔记 ,it3q.com