GO 介绍和搭建环境 初识变量
内容详细
1 Go语言介绍
//1 Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言--》很新
-python:1989年
-java:1990年
// Golang和Goland是什么关系?
-Golang 编程语言
-Goland jebrains公司出的编辑器,写go代码的,跟pychrm是一个东西
//2 Go是静态强类型语言,是区别于解析型语言的编译型语言(静态:类型固定 强类型:不同类型不允许直接运算)。
解析型语言——源代码是先翻译为中间代码,然后由解析器对代码进行解释执行
编译型语言——源代码编译生成机器语言,然后由机器直接执行机器码即可执行
python 动态强类型,你定义函数时,如何规定类型
-强类型:不同类型之间不能直接运行,需要做类型转换,数字+字符串
java 静态强类型---》有的人说 它不是编译型---》编译成字节码文件
-数字+字符串 可以---》违背了强类型?---》隐士类型转换---》自动识别并做类型转换,运算
js 动态弱类型
-数字+字符串 允许
// 3 Go语言特性
跨平台的编译型语言 ---->夸平台 编译
-python 夸平台,解释型,解释器有不通平台,代码运行在不同平台
-你们给客户开发的程序,部署在客户机器上---》你的代码,客户就能拿到--》泄露代码了
-没有特别好的方案:
1 直接打包成可执行文件 pipinstall
2 有些第三方代码加密,兼容性很差
3 把代码放到docker镜像中-->docker run -e pasword=123
-从环境变量把password取出来,程序中执行之前先校验这个秘密是否授权,如果没授权,容器不能运行
4 把程序运行起来---》硬盘加载到了内存--->直接把源代码删掉---》该运行运行
-js ---》代码混淆---》正常格式的js---》坨到一起,变量函数名都是魔鬼变量--》压缩
-js逆向
-go 跨平台 编译
-可以在不同平台编译出不同平台的可执行文件--->交叉编译
-c 不夸平台 在不同平台编译
-redis--》源码下载---》make & make install
语法接近C语言
管道(channel),切片(slice),并发(routine)
有垃圾回收的机制
支持面向对象和面向过程的编程模式---》面向对象 有类的概念,没有语法
// 4 版本发展
2009年11月7日 weekly.2009-11-06 —— 早期的版本
2012年3月28日 go1 —— 稳定版版的发布
2015年8月19日 go1.5 —— 实现的架构变化,同时保留了和旧版本的兼容性,本次更新中移除了”最后残余的C代码”---》go早期底层有c写的(java,python),再往上不用了,实现了:【自举】 自己写自己
2018年8月24日 go1.11 —— modules和WebAssembly支持
-加入了对 go mod 的支持-->go语言包管理很乱:第三方:vender,mod机制
-GO111MODULE = off,on ,auto
2019 年 9 月 go 1.13— — 改进了 sync 包中的 Pool,在 gc 运行时不会清除 pool。它引进了一个缓存来清理两次 gc 运行时都没有被引用的 pool 中的实例。重写了逃逸分析,减少了 Go 程序中堆上的内存申请的空间--->GO111MODULE默认开启
-别人写的程序---》1.13及以上版本
- Go Module 已经可以用于生产环境,鼓励所有用户迁移到 Module
2022年 1.18 版 加入了对【泛型】的支持
// 5 Go语言应用
-哪些公司在用
-Google
-国内互联网公司,非常喜欢用go,小公司 python---》go
-七牛:国内最早做go实践的,国内镜像(豆瓣源--->python写的)
-B站:原来主站php 流量---》游戏(80%)--> go替换了---》代码泄露了19年
-go 微服务框架 go-kratos
-字节:大量的go,Kitex
-阿里:大部分java,自研的jvm---》杭州的公司大部分都用java--》阿里离职了创业
-腾讯:用
-百度:
-区块链公司
// 6 服务开发、并发、分布式、微服务等方向
-服务端,微服务:抢java市场
-自动化运维:抢python市场
-区块链
-开源的并发高的软件,用go写的
// 7 Go语言项目
-k8s
-docker
-普罗米修斯---》运维,监控软件---》zabbix--》php
-区块链:BTCD 是用go语言实现的完整节点的比特币实现
-为什么go在区块链界很火---》完整的区块链解决方案代码第一款go开源了
-拿着人家开源的改改名字,二次开发---》做自己的币--》工作给的高
-etcd ,consul。。
// 8 运维工具
-jumpserver:跳板机,堡垒机 python
-ansible :python写的,基于ssh自动化运维工具,远程操作几百台机器,python
-Jenkins :java写的
-salstack :python写的,跟ansible一个类型产品
-zabbix :监控软件php写的
-普罗米修斯-go写的
// 9 Go语架构
GOPATH的工作区包含bin,src,和pkg这三个:
src——源码(包含第三方的和自己项目的)
bin——编译生成的可执行程序
pkg——编译时生成的对象文件
//10 go适合做什么
服务端开发
分布式系统,微服务
网络编程
区块链开发
内存KV数据库,例如boltDB、levelDB
云平台
// 11 发展前景
Go语言将登上语言榜前列,与python和Java并列前三甲 ---》10名开外
Go语言称霸云计算
Go将统治下一个10年
目前Go语言已经⼴泛应用于人工智能、云计算开发、容器虚拟化、⼤数据开发、数据分析及科学计算、运维开发、爬虫开发、游戏开发等领域。
Go语言简单易学,天生支持并发,完美契合当下高并发的互联网生态
2 Go语言环境搭建
// 开发go语言--->go sdk---》os,文件处理,网络 包---》1.18版本
// 运行go ,什么都不需要,就是可执行文件
// 开发python---》python 解释器--》os,网络模块
-https://golang.google.cn/dl/
-一路下一步安装--》已经把安装路径加入到环境变量了--》gopath的bin路径加入到啊环境变量了
-环境变量
-
// 运行python---》解释器
// 快速开发go语言,需要编辑器
-python 用pycharm,数据分析:Anconda:jupyter,vscode
-个人推荐用goland---》收费---》jetbrains公司--》pycharm同出一系
-之前的使用习惯完全一样,换了个语法写
-vscode---》写项目还是goland--》免费
-下载:https://www.jetbrains.com/go/download/other.html
-一路下一步:试用30天,永久试用-->pycharm同理
// 验证是否安装成功
go -version
// 命令
go env // 查看go的环境变量 goroot:go-sdk安装路径,gopath:一般把代码放在里面
-GOPATH=C:\Users\liuqingzheng\go // go 代码存放路径
-GOROOT=C:\Program Files\Go // go sdk路径
-GO111MODULE=on // 是否开启mod模式
-GOHOSTARCH=amd64
-GOHOSTOS=windows // 默认编译代码是win平台
- GOPROXY=https://goproxy.cn,direct // 下载第三方模块:github和谷歌--》国内镜像 七牛云
3 第一个helloworld
package main // 每个go文件的第一行,都要写这个,声明该文件属于哪个包,main包
import "fmt" // 导入内置标准库中的fmt包--》想python--》 import os
func main() { // 写一个main函数,它是整个项目的入口
fmt.Println("helloworld") // fmt包下的Println函数,会打印到控制台
}
// go 程序要运行,必须有入口,入口是main包下的main函数第一行开始执行,区分python
// python中 __main__,python为了像其他编译型语言一样有个入口
// 命令
go build go文件 // 把源代码编译成可执行文件--》默认平台--》可以交叉编译
编译成可执行文件,直接执行即可
go run go文件 // 程序员用,编译并执行,生成一个可执行文件,这个可执行文件不在当前目录下,执行完就删除了,但是它有编译的过程(每次改了代码运行,都要重新编译)
// goland中,直接右键run运行,就是编译并运行 vscode中没有右键,只能敲命令来做
//a... 解释
-实际上,没有a...,但是在goland中,编辑器给你自动提示的,你要传什么参数(编译型语言独有),参数类型是什么,vscode就没有
4 变量的定义和使用
package main
import "fmt"
// 变量的使用 ---》先定义在使用
func main() {
// 1 变量的定义 方式一:完整定义
//var 变量名 变量类型 = 变量值 定义并赋初值
//var name string ="lqz" // 定义了一个字符串类型name变量,值为lqz
//fmt.Println(name)
//2 变量定义方式二 类型推导,虽然是类型推导,但是在定义阶段类型就固定了,后期不能改
//var 变量名 = 变量值 // 自动推到出变量是string类型
//var name ="lqz"
//var age =19
////var age int =99 // 一旦定义过,就不能再定义了
//fmt.Println(name)
//fmt.Println(age)
////name="彭于晏" // 修改变量的值
////name=19 // 修改变量的值,类型固定,不能改
//fmt.Println(name)
// 3 变量定义方式三 简略声明 := 表示定义并赋初值 用的多,但是不代表它没有类型
// 变量名 :=变量值
//name :="lqz"
////name :="pyy" // 重复定义
//fmt.Println(name)
// 4 以后见到其他的变量定义方式,都是这三种的变形
// 5 同时定义多个变量---》第二种类型推到
// 5.1 这三个变量通过类型推导获得
//var name,age,hobby ="lqz",19,"篮球"
//fmt.Println(name,age,hobby)
//5.2 表示这三个变量都是string类型 第一种的变形
//var name,age,hobby string = "lqz","19","篮球"
//fmt.Println(name,age,hobby)
//5.3 简略声明的方式
//name,age,hobby:="lqz",19,"篮球"
//fmt.Println(name,age,hobby)
// 5.4 用括号括起来,第一种和第二种的混合,这种用的多,如果变量不赋初值,是没法类型推到
//var (
// name string = "lqz"
// age int
// hobby = "篮球"
// wife string // 定义没有赋初值
//
//)
//fmt.Println(name, age, hobby,wife)
//
// 6 补充:变量不能重复定义,但是可以使用 : 的形式,只要左侧有没定义过的,它算修改值
var name ="lqz"
//name:="pyy" 重复定义报错
name,age:="pyy",19 // 只要左侧有没定义过的变量,这个就不错
fmt.Println(name,age)
// python 中所有类型都可以是None---》python一切皆对象(引用)--》地址里没放东西就是None,对着go中是nil,java中null
}
/*
go语言想法设法让你少些代码
// 单行注释 等同于python #
多行注释 等同于python 三引号
注意点:
1 变量定义了必须使用,如果不用就报错,编译不通过
2 变量在定义阶段,类型就固定了,后期不能改
3 变量不能重复定义 无论用那种方式定义过,都不能再定义了,只能使用
*/
4 变量命名规范
// 1 命名规范
Go语言中的函数名、变量名、常量名、类型名、语句标号和包名等所有的命名,都遵循一个简单的命名规则:
1 一个名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线
2 大写字母和小写字母是不同的:Name和name是两个不同的变量
3 关键字和保留字都不建议用作变量名 --->内置函数,包,关键字不能做变量名
// 2 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
// 目前你认识的:func,var, package,if,else,break,continue
// python 中的 and or 在go中不是关键字
// 3 go语言中有37个保留字,主要对应内建的常量、类型和函数-->学了就会了
//对比 python 的 input,print,可以做变量名,但是不建议
内建常量: true false iota nil
内建类型: int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
内建函数: make len cap new append copy close delete
complex real imag
panic recover
// 4 注意
-go变量定义推荐用驼峰 AgeOfPerson java中也是
-python中推荐下划线 age_of_person
-go大小写有特殊含义
-go的文件命名推荐用下划线
-go变量定义推荐用驼峰,go的文件命名推荐用下划线
-python 变量和py文件都推荐用下划线
-java 变量和java文件都推荐用驼峰
-go 变量定义推荐用驼峰,go的文件命名推荐用下划线
__EOF__

本文作者:向上
本文链接:https://www.cnblogs.com/ydy001/p/16352406.html
关于博主:没有收拾残局的能力,就别放纵善变的情绪
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/ydy001/p/16352406.html
关于博主:没有收拾残局的能力,就别放纵善变的情绪
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix