Go语言入门(一)
时间:2022-07-25
本文章向大家介绍Go语言入门(一),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Go 的发展历史
诞生与历史
- 诞生于2006年1月2日15点4分5秒
- 2009年发布并正式开源
- 2012年发布第一个正式版本Go 1.0
- 截至当前2020年8月 Go版本到1.15
Go开发环境搭建
Go语言环境
- 下载地址: https://studygolang.com/dl
- 选择适合自己的平台去选择对应的安装包并安装
git
Goland编辑器
- 官方下载地址:https://www.jetbrains.com/go/
- 破解版参考地址: https://www.cnblogs.com/zhangguosheng1121/p/11448194.html
Go目录结构介绍
- vim ~/.bash_profile export GO111Module=on export GOPATH=/Users/wanghui/Codes/goCodes export PATH=PATH:GOPATH/bin:/usr/local/mysql/bin export PATH=
- 设置其他目录
$ cd /Users/wanghui/Codes/goCodes/
$ mkdir pkg bin src
其中:
bin 目录存放编译后的二进制文件 pkg 存放编译后的库文件 src 原码文件
- 目录结构划分一: 适用于个人的
- 目录结构划分二: 使用于企业的
hello world 程序演示
- 项目目录
$ mkdir $GOPATH/src/github.com/grexkin/lesson01/hello -p && cd $GOPATH/src/github.com/grexkin/lesson01/hello
- 代码
$ vim hello.go
package main
import "fmt"
func main() {
fmt.Println("hello world!")
}
- 执行
$ go build hello.go # 编译
$ ./hello # 执行
Go 程序结构
- go 源码按package进行组织,而且package要放到非注释行的第一行
- 一个程序只有一个main包和main函数
- main函数是程序的入口
包的概念
- 和Python一样,把相同功能的代码放到一个目录,称之为包
- 包可以被其他包引用
- main包是用来生成可执行文件,每个程序只有一个main包
- 包的主要用途是来提高代码的可复用性
注释
- 单行注释
// 注释内容
- 多行注释
/*
注释内容一
注释内容二
*/
Go常用的命令
基本命令
- go run: 快速执行Go文件,就跟执行脚本一样
- go build: 编译程序,生成二进制可执行文件
- go build -o 生成程序的路径(包含程序名) 包名
- go install: 安装可执行文件到$GOPATH/bin目录
- go test: 执行单元测试或者压力测试
- go env: 显示Go相关的环境变量信息
- go fmt: 格式化源代码
Go语言特性
垃圾回收
- 内存自动回收,再也不需要开发人员管理内存
- 开发人员只关注业务实现,降低了心智负担
- 只需要new分配内存,不需要释放
天然并发
- 从语言层面支持并发,非常简单。只需要go 一下
- goroutine: 轻量级线程,创建成千上万个groutine成为可能
package main
import (
"fmt"
"time"
)
func calc() {
for i := 0;i<10;i++ {
fmt.Println("执行",i,"次")
}
}
func main() {
go calc()
fmt.Printf("main thread!n")
time.Sleep(11*time.Second)
}
channel
- 管道,类似于linux/unix 中的pipe[先进先出]
- 多个goroutine之间通过channel进行通信
- 支持任何类型
多返回值
- 一个函数可以返回多个值
package main
import "fmt"
func add(a int,b int) (int,int){
return a+b,a-b
}
func main() {
sum,sub := add(7,8)
fmt.Println(sum,sub)
}
编译型语言
- 性能之比c语言差10%
- 开发效率高
- WordPress自定义url 中的“author” 别名
- ASP.NET 4 AppFabric 输出缓存提供程序
- WordPress 中禁止编辑“已发布”的文章
- Windows Server 2008 R2 网络负载平衡 (NLB)资料汇总
- 0.[Andriod]之从零安装配置Android Studio并编写第一个Android App
- WordPress 后台编辑文章页面添加自定义提示文字
- 使用json 和jQuery制作级联dropdownlist
- 在64位Windows 7/2008操作系统上部署32位的Web应用程序错误
- 云计算浪潮
- 2.[Andriod]Andriod Studio结合Visual Studio Emulator for Android调试Android App
- Windows Server AppFabric Caching
- zepto 基础知识(2)
- DeepMind回顾2017年:除了战胜柯洁还有哪些大事
- [认证授权] 1.OAuth2授权
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ESP32刷入Ruff Lite固件
- Angularjs1.x ES6接入Chart图表
- 搭建Blynk开源物联网服务端(1)---基本搭建
- 搭建Blynk开源物联网服务端(2)---开始使用
- NPM安装模块报错:Error: sha1-W+8rAcUcgURBLVhzyvg+IvHsa4Q= integrity checksum failed when using sha1: wanted
- OPA Gatekeeper 策略入门
- 给Linux命令行加个问候语
- RaspberryPi接入HomeKit
- React Fetch请求
- React使用代理解决跨域问题
- React登录跳转遇到的问题
- 响应式架构与 RxJava 在有赞零售的实践
- Centos 7搭建Gitlab服务器超详细Centos 7搭建Gitlab服务器超详细(搭建成功)
- Netty之旅二:口口相传的高性能Netty到底是什么?
- 前端知识复习(一)