【GO】Go语言介绍 Go开发环境搭建 第一个helloworld 变量命名规范 变量的定义和使用
今日内容
1 Go语言介绍
#Go语言介绍
Go 即 Golang,是Google公司2009年11月正式对外公开的一门编程语言
Go是【静态 强类型】语言,是区别于解析型语言的编译型语言
静态:类型固定
强类型:不同类型不允许直接运算
解释型语言——源代码由解释器对代码进行解释执行
编译型语言——源代码编译生成机器语言,然后由机器直接执行机器码即可执行
Python【动态 强类型】
数字和字符串不能直接相加。类型不固定变量一会是字符串一会是列表。
python 中 int 和 float 可以相加。
Go 不同类型的 int 都不能相加。
# 编译型:
c,java,c++,c,go # 编译成可执行文件 ---》在操作系统上运行,不需要装任何东西
# 解释型:
python,nodejs(后端语言),php
javascirpt(只能允许运行在浏览器)
# java:
java有编译过程---》没有编译成机器语言---》只编译成字节码文件,机器识别不了---》java虚拟机:jvm能识别字节码文件
运行java必须要有jvm
把jvm理解成在操作系统上的一个软件,这也就是java程序吃内存的原因。运行在虚拟机之上,虚拟机运行需要占内存。
# java是编译型还是解释型
java编译成字节码,运行在类似于解释器的jvm上(java虚拟机)
# java概念解释
jvm:java虚拟机
jre:java运行时环境
jdk:java开发环境
向下包容:jdk包容jre,jre包容jvm。
# python打包成可执行文件:
python --编译成--》可执行文件----》使用 pipinstaller
在不同平台打包成不同平台的可执行文件。
将django、flask项目打包成exe(用的很少),使用cmd运行。
-https://zhuanlan.zhihu.com/p/430490285
意义:python代码开源,运行在客户机器上,解决python源代码泄露将其打包成exe。另外的方案,将程序加载到内容,然后将硬盘中的程序删掉。
# python代码仿泄露方案(提高破解的成本)
-方案一:启动起来,把源代码删除
-方案二:pipinstaller 打包成可执行文件(可以反编译)
-方案三:做到docker镜像中 ---》运行容器 ---》-e password=授权码
项目运行之前检查授权码是不是我给的,相当于在项目第一行,在环境变量取出授权码,拿着向服务端做请求,检查是否为客户。然后继续运行项目。如果授权码不对,容器运行不起来。客户可以运行到容器中,可以破解。我们担心的是我的代码被客户泄露掉了。
# 二 Go语言特性
-跨平台 编译型语言
源代码不是跨平台,但是可以跨平台编译
python跨平台,在不同平台装不同平台python解释器。源代码写了,直接在Linux上运行。
java跨平台,不同平台装不同的java虚拟机。不是直接运行在操作系统上所以跨平台。一处编码处处运行。
redis,python解释器,都是将源代码下载下来,编译成可执行文件才能执行使用。需要在不同平台编译不同平台的可执行文件。如果是在centos上编译的,则拿到ubantu上运行不了。编译型语言最大的问题就是不跨平台。
GO 跨平台编译,在windows平台编译出linux平台下的可执行文件,之前C语言是不可以的,必须在windows编译windows的可执行文件。
-语法接近C语言
-管道(channel),切片(slice),并发(routine)
-有垃圾回收的机制
-支持面向对象和面向过程的编程模式
# Go语言发展
-2015年8月19日 go1.5 —— 实现的架构变化,同时保留了和旧版本的兼容性,本次更新中移除了”最后残余的C代码”---》以后再写go不用c写了,用go写---》语言的自举
GO,java,Cpython都是用C语言写的。比如python os模块是用C写的,基础模块写好之后就可以实现语言的自举。
-2018年8月24日 go1.11 —— modules和WebAssembly支持 go mod模式 包管理
-最新 1.20版
# Go语言应用
-k8s:go写的
-docker:go写的
-七牛:上海的-ceo-许式伟-》go+
# 应用领域
服务开发、并发、分布式、微服务等方向,自动化运维,区块链
服务端开发
分布式系统,微服务
网络编程
区块链开发
内存KV数据库,例如boltDB、levelDB
云平台
go-fastfds
# Go语言发展前景
Go语言将登上语言榜前列,与C和Java并列前三甲
Go语言称霸云计算
Go将统治下一个10年
目前Go语言已经⼴泛应用于人工智能、云计算开发、容器虚拟化、⼤数据开发、数据分析及科学计算、运维开发、爬虫开发、游戏开发等领域。
Go语言简单易学,天生支持并发,完美契合当下高并发的互联网生态
2 Go开发环境搭建
# go 的sdk ---》go开发环境(运行环境不需要装东西) ----》 go1.20.3.windows-amd64.msi
# go 编辑器 ---》goland(jetbrains系列全家桶),vscode ---》goland-2020.2.4.exe
# go1.20.3.windows-amd64.msi
去官网下载:https://golang.google.cn/dl/
将 GO/bin/ 目录加入环境变量,然后在cmd窗口输入go,验证go开发环境是否装好
3 第一个helloworld
# 创建项目
# 创建一个go文件
# 写代码
package main // 声明这个go文件属于哪个包
// main有特殊含义,一个项目要运行必须要有main包,并且项目运行的入口是main包下的main函数。跟python不一样,python可以从任意位置开始运行,任意py文件开始运行。go项目只有main包下的main函数,只有一个入口,也就是最开始执行的代码。程序运行时,会首先去main包下找main函数执行。所以main函数也就不用调用执行。
// 表示导入fmt包,自动导入的,goland自动导入的,使用了哪个包,编辑器会自动导入
// 包导入,不使用,会报错,编译不过
import "fmt"
// func 定义一个函数 ,main 是函数名,没有参数,没有返回值,是整个项目入口
func main() {
// 在控制台输出helloworld
fmt.Println("helloworld") // 编辑器为什么显示 a... 这是编辑器提示的,意思是传的helloworld实参,给了形参a。
}
// 编译代码---》编译成可执行文件---》默认编译成当前平台可执行文件---》支持跨平台编译---》想编译出linux的---》交叉编译
// 编译 go build 文件名----》编译成可执行文件
// 运行,直接运行 双击
// 开发阶段----》编译并运行---》生成可执行文件,不再当前路径,用完就删除
// 编辑器有个快捷运行方式,右键运行
4 变量命名规范
// Go语言中的函数名、变量名、常量名、类型名和包名等所有的命名,都遵循一个简单的命名规则:
1 一个名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线
2 大写字母和小写字母是不同的:Name和name是两个不同的变量(区分大小写,但是go的大写有特殊含义)
3 关键字和保留字都不建议用作变量名
// 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
// 37 保留字
内置常量: 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
// 总结
-go建议定义变量,函数名使用:用驼峰
-go文件命名:建议用下划线
// python 都用下划线
// java 都是驼峰
5 变量的定义和使用
package main
import "fmt"
// 变量定义
func main() {
//1 完整定义
// var关键字 变量名 变量类型 = 变量值
//var name string = "lqz"
//fmt.Println(name)
//
//var age int = 19
//fmt.Println(age)
// 2 变量定义了,必须使用,否则报错
// 3 类型推导(不写类型)---》自动推导出lqz 是字符串类型
//var name = "lqz"
//name = "pyy"
//name = 19
//fmt.Println(name)
// 4 虽然是类型推导出来的,但是是有类型的,并且后期不能变换类型
// 变量只要定义了,类型就固定了。后期不能改变
//5 简略声明 ,省略var 省略类型,必须使用 :=
//name:= "lqz"
//fmt.Println(name)
// 6 一次性声明多个变量(其实就是基于上面三种变量定义方式的变形)
// 6.1 完整定义
//var name, age, hobby string = "lqz", "19", "篮球"
//var (
// name string = "lqz"
// age int = 19
// hobby string = "篮球"
//)
//fmt.Println(name)
//fmt.Println(age)
//fmt.Println(hobby)
// 6.2 类型推导
//var name, age, hobby = "lqz", 19, "篮球"
//var(
// name="lqz"
// age=19
// hobby="篮球"
//)
//fmt.Println(name)
//fmt.Println(age)
//fmt.Println(hobby)
// 6.3 简略声明
//name, age, hobby := "lqz", 19, "篮球"
//fmt.Println(name)
//fmt.Println(age)
//fmt.Println(hobby)
// 6.4 6.1和6.2混合
//var(
// name="lqz"
// age int=19
// hobby="篮球"
//)
//fmt.Println(name)
//fmt.Println(age)
//fmt.Println(hobby)
// 7 变量不能重复定义三种定义方式)
//var name = "lqz"
////var name string="pyy"
////name:="pyy"
//name, age := "pyy", 19 // 这行代码认为不是定义name变量,而是修改name变量的值
//fmt.Println(name)
//fmt.Println(age)
// 8 变量可以先定义再赋值,必须使用完整定义(方式一)
//var name string // 定义之后会有一个默认值 空字符串
//var age int // 默认值是0
// None是指针类型的空值,0是数值类型的空值,空字符串是字符串类型的空值。因为python中一切皆对象,所有Python中所有的数据类型才能跟None比较。
//var age 不行
//name := 不行
//age = 19
//fmt.Println(name)
//fmt.Println(age)
// 9 简略声明用的多 a:=10
// 10 查看变量类型
//a := 99
a := "lqz"
fmt.Printf("a的值是:%v,类型是:%T", a, a)
}
【GO】Go语言介绍 Go开发环境搭建 第一个helloworld 变量命名规范 变量的定义和使用的更多相关文章
- solidity语言介绍以及开发环境准备
solidity语言介绍以及开发环境准备 Solidity 是一门面向合约的.为实现智能合约而创建的高级编程语言.这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的 ...
- ArcGIS API for JavaScript开发环境搭建及第一个实例demo
原文:ArcGIS API for JavaScript开发环境搭建及第一个实例demo ESRI公司截止到目前已经发布了最新的ArcGIS Server for JavaScript API v3. ...
- Vue环境搭建及第一个helloWorld
Vue环境搭建及第一个helloWorld 一.环境搭建 1.node.js环境安装配置 https://www.cnblogs.com/liuqiyun/p/8133904.html 或者 htt ...
- 一、Java语言概述与开发环境、第一个java程序
目录: 1.1 Java特点 1.2 Java程序运行机制 1.3 安装JDl和配置环境变量 1.4 第一个JAVA程序 1.5 第一个JAVA程序的含义 前言 Java语言历时近二十年,已发展成为人 ...
- Go语言Windows 10开发环境搭建:Eclipse+GoClipse
Intel Core i5-8250U,Windows 10家庭中文版,go version go1.11 windows/amd64, Eclipse IDE for C/C++ Developer ...
- 1. React介绍 React开发环境搭建 React第一个程序
什么是 React React 是 Facebook 发布的 JavaScript 库,以其高性能和独特的设计理念受到了广泛关注. React的开发背景 Faceboo ...
- Android JNI编程(一)——JNI概念以及C语言Dev-C++开发环境搭建、编写HelloWorld
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:JNI是什么呢? JNI:JNI是JavaNative Interfac ...
- 一、Linux 设备驱动介绍及开发环境搭建
1.1 Linux 设备驱动介绍 1.1.1 分类及特点 计算机系统的硬件主要由 CPU.存储器和外设组成. 当前 CPU 内部都集成有存储器和外设适配器. 外设适配器有入 UART.IIC 控制器. ...
- (0)ASP.NET Core 简单介绍 和开发环境搭建 - ASP.NET从MVC5升级到MVC6
ASP.NET从MVC5升级到MVC6 总目录 ASP.NET Core 首先,ASP原本只是一种技术,这种技术从上个世纪90年代就有了. Active Service Page 和 Java Ser ...
- SpringMVC+Spring3+hibernate4 开发环境搭建以及一个开发实例教程
刚刚接触了SpringMVC这个框架,因此有必要把它拿过来同hibernate.Spring框架进行集成和开发一个实例,在真正企业从头开发的项目中往往一个稳定的开发环境至关重要,开发一个项目选择什么样 ...
随机推荐
- Service Mesh:微服务架构的救世主还是多余的花招?
Service Mesh的前世今生 在前面,我们提出了一个问题:随着模块和节点的增多,微服务之间难免会遇到各种网络问题.为了解决这些问题,目前有一个解决方案,即使用Spring Cloud中的各个组件 ...
- Vue04-vue-router
vue-router 目前前端流行的三大框架, 都有自己的路由实现: Angular:ngRouter React:ReactRouter Vue:vue-router Vue Router 是 Vu ...
- Grafana系列-Loki-基于日志实现告警
系列文章 Loki 系列文章 前言 实际应用中除了基于 Metrics 告警, 往往还有基于日志的告警需求, 可以作为基于 Metrics 告警之外的一个补充. 典型如基于 NGINX 日志的错误率告 ...
- Java并发(十八)----常见线程安全类及实例分析
1.常见线程安全类 String Integer StringBuffer Random Vector Hashtable java.util.concurrent (JUC)包下的类 这里说它们是线 ...
- 9 "网址"--URI
目录 URI和URL URI详细介绍 URI的组成 URI的查询参数 URI的编码 疑问 URI和URL URI:统一资源标识符(Uniform Resource Identifier) 有两种形式: ...
- 2023-12-20:用go语言,给定一个数组arr,长度为n,在其中要选两个不相交的子数组。 两个子数组的累加和都要是T,返回所有满足情况中,两个子数组长度之和最小是多少? 如果没有有效方法,返回-
2023-12-20:用go语言,给定一个数组arr,长度为n,在其中要选两个不相交的子数组. 两个子数组的累加和都要是T,返回所有满足情况中,两个子数组长度之和最小是多少? 如果没有有效方法,返回- ...
- CSP_J
- 数字孪生结合GIS系统为物流行业带来的改变
随着全球物流业务不断扩张和发展,数字化转型成为当今物流行业的主要趋势.在这个数字化时代,数字孪生技术和地理信息系统(GIS)的结合,为物流行业带来了前所未有的机遇和挑战.这种融合将为物流企业提供更高效 ...
- 国家专用加密数据传输之rsa,3des加密方法-rasor3desc
title: 国家专用加密数据传输之rsa,3des加密方法 date: 2021-12-20 13:08:21.646 updated: 2022-03-10 16:00:58.65 url: ht ...
- CTFshow元旦水友赛 CRYPTO WP
CRYPTO 新年祝福 题目 加油!为跨年夜还在努力的自己加油! ctfshow全体工作人员,祝您学业有成,阖家幸福! 解码下面base64 Y3Rmc2hvd3vmlK/ku5jlrp3lj6Pku ...