Go语言学习之1 基本概念、环境搭建、第一个Go程序
一、环境搭建
见我的这篇博客 https://www.cnblogs.com/xuejiale/p/10258244.html
二、golang语言特性
1. 垃圾回收
1) 内存自动回收,再也不需要开发人员管理内存
2) 开发人员专注业务实现,降低了心智负担
3) 只需要new分配内存,不需要释放
2. 天然并发
1) 从语言层面支持并发,非常简单
2) goroute,轻量级线程,创建成千上万个goroute成为可能
例如:
我们创建F:\go\project\src\go_dev\day1\goroute目录,并在该目录下创建文件goroute.go及main.go
goroute.go:
package main import(
"fmt"
) func test_goroute(a int) {
fmt.Println(a)
}
main.go:
package main import(
"time"
) func main() {
//goroute 并发,使用go关键字
for i := ; i < ; i++ {
go test_goroute(i)
}
//这块sleep 2s是为了等待上面"线程"执行完
time.Sleep(*time.Second) //sleep 2s
}
解释:
goroute,轻量级线程通过关键字go来执行(go test_goroute(i))
运行:
到F:\go\project\src\go_dev\day1\goroute目录下运行go run main.go goroute.go 可以发现100个数据打出是乱序
注意:运行的命令 go run main.go goroute.go (go run main.go会报错)
3) 基于CSP(Communicating Sequential Process)模型实现 (goroute + channel算是CSP模型)
3. channel
1) 管道,类似unix/linux中的pipe
func main() {
pipe := make(chan int,)
pipe <-
pipe <-
}
2) 多个goroute之间通过channel进行通信
在F:\Go\project\src\go_dev\day1\goroute_example目录下创建goroute和main目录
goroute目录下创建add.go:
add.go
package goroute func Add(a int, b int, c chan int) {
sum := a + b
c <- sum
}
在main目录下创建main.go:
main.go
package main import (
"go_dev/day1/goroute_example/goroute"
"fmt"
) func main() {
var pipe chan int
pipe = make(chan int, )
go goroute.Add(, , pipe)
sum := <- pipe
fmt.Println("sum = ", sum)
}
解释:
var pipe chan int
pipe = make(chan int, 1) 分别为定义一个管道,里面可以存一个整数
运行:
方法1. 进入到F:\Go\project目录下,执行下面的命令
go run src/go_dev/day1/goroute_example/main/main.go
方法2. 先编译成二进制文件,然后执行(需创建F:\go\project\bin目录,存放编译后的二进制文件)
go build -o bin/goroute_test.exe go_dev/day1/goroute_example/main 注意该命令与方法1 命令的区别
注意:Windows下可执行文件需以.exe结尾。
3) 支持任何类型
4. 多返回值
一个函数返回多个值
func calc(a int, b int)(int,int) {
sum := a + b
avg := (a+b)/
return sum, avg
}
调用:
sum, avg := calc(, )
//如果只需要第一个返回值:
sum, _ := calc(, )
5. 包的概念
1) 和python一样,把相同功能的代码放到一个目录,称之为包;
2) 包可以被其他包引用;
3) main包是用来生成可执行文件,每个程序只有一个main包;
4) 包的主要用途是提高代码的可复用性。
例如:
创建F:\Go\project\src\go_dev\day1\package_example目录,在该目录下分别创建calc和main目录,在calc目录下创建add.go和sub.go,在main目录下创建main.go
add.go (注意add.go和sub.go中的方法名首字母必须大写,否则无法被外部调用)
package calc func Add(a int, b int) int {
return a + b
}
sub.go
package calc func Sub(a int, b int) int {
return a - b
}
main.go
package main import (
"fmt"
"go_dev/day1/package_example/calc"
) func main() {
sum := calc.Add(, )
sub := calc.Sub(, )
fmt.Println("add = ", sum)
fmt.Println("sub = ", sub)
}
运行:
方法1. 执行go run src/go_dev/day1/package_example/main/main.go
方法2. 生成可执行文件
Go语言学习之1 基本概念、环境搭建、第一个Go程序的更多相关文章
- Cesium入门2 - Cesium环境搭建及第一个示例程序
Cesium入门2 - Cesium环境搭建及第一个示例程序 Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 验 ...
- visual2017专业版MFC编程环境搭建及第一个MFC程序的创建
1.MFC介绍及环境搭建 MFC全程为Microsoft Foundation class Library,即微软的基本类库,MFC实际上是一个庞大的文件库,它由指向文件和源文件组成. 首先,打开vi ...
- Java学习笔记【一、环境搭建】
今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...
- 学习不一样的Vue1:环境搭建
学习不一样的Vue1:环境搭建 发表于 2017-05-31 | 分类于 web前端| | 阅读次数 11677 首先 首发博客: 我的博客 项目源码: 源码 项目预览: 预览 因为个人的喜好 ...
- Solr学习笔记之1、环境搭建
Solr学习笔记之1.环境搭建 一.下载相关安装包 1.JDK 2.Tomcat 3.Solr 此文所用软件包版本如下: 操作系统:Win7 64位 JDK:jdk-7u25-windows-i586 ...
- 学习Linux(一)环境搭建
零基础学习Linux(一)环境搭建 从本文开始我会为大家介绍一下linux环境下详细的集群环境安装.配置.部署到实例演示的整个过程.在此过程中会给大家详细介绍一下Linux的操作技巧和一些工具的使用. ...
- Hadoop学习之Ubuntu12.04 Hadoop 环境搭建笔记
SSH无密码配置 Hadoop在Ubuntu12.04上搭建环境 报错及问题 SSH无密码配置 参考:Linux(Centos)配置OpenSSH无密码登陆 注意问题: Hadoop集成环境三台机器都 ...
- ESP32学习笔记(一) 环境搭建与下载
ESP32学习笔记(一) 环境搭建与下载 作者:Nevel 博客:nevel.cnblogs.com 转载请保留出处 前几天刚入手了ESP32模块,趁着放假有时间,我们先把ESP32的编译环境搭建好 ...
- qt学习教程1.qt开发环境搭建
qt学习教程1.qt开发环境搭建 首先下载qt 下载地址:http://download.qt.io/archive/qt/ 此教程使用的版本为5.1.1 下载好后,打开安装包,然后点下一步 选择一个 ...
- 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)
引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...
随机推荐
- 基础_cifar10_序贯
今天的基础研究主要是在cifar10数据集上解决一下几个问题: 1.从头开始,从最简单的序贯开始,尝试model的构造: 2.要将模型打印出来.最好是能够打印出图片,否则也要summary; 3.尝试 ...
- 一元二次方程解法的实现(Python)
请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程: ax2 + bx + c = 0的两个解. 提示:计算平方根可以调用math.sqrt()函数 # -*- c ...
- Java多线程编程作业总结
一.多线程知识总结 1.线程同步 有关创建线程的知识就不过多的叙述了.就从主要的开始讲吧,讲一下线程的同步.与操作系统中的进程同步一样,线程同样面临着资源共享的问题,怎样处理线程的资源共享是运用多线程 ...
- HDU 6406 Taotao Picks Apples & FJUT3592 做完其他题后才能做的题(线段树)题解
题意(FJUT翻译HDU): 钱陶陶家门前有一棵苹果树. 秋天来了,树上的n个苹果成熟了,淘淘会去采摘这些苹果. 到园子里摘苹果时,淘淘将这些苹果从第一个苹果扫到最后一个. 如果当前的苹果是第一个苹果 ...
- html 之 td valign 和 align
1.align属性趋向于左右对齐,其值包含:left.right.center 2.valign属性趋向于垂直对齐,其值包含:top.bottom.middle.baseline 兼容性 在 HTML ...
- P3311 [SDOI2014]数数
思路 看到多个子串并且不能包含的情况,想到了AC自动机 但是题目多了一个不能大于给出的n的限制条件,联想数位dp的过程,设f[i][j][0/1]表示在第i位,AC自动机的第j个节点,数位有/无限制的 ...
- LOJ 6485 LJJ学多项式
前言 蒟蒻代码惨遭卡常,根本跑不过 前置芝士--单位根反演 单位根有这样的性质: \[ \frac{1}{n}\sum_{i=0}^{n-1}\omega_{n}^{ki}=\left[n|k\rig ...
- Docker网络配置概述
Overview One of the reasons Docker containers and services are so powerful is that you can connect t ...
- Nuget 打包 for .Net Standart project
Create .NET Standard packages with Visual Studio 2015 Publishing packages nuge.exe 放在项目目录中 nuget spe ...
- 关于python的基础知识
一,编程语言的类型: 1.编译型 2.解释型 3.静态语言 4.动态语言 5.强类型定义语言 6.弱类型定义语言 编译型vs解释型 编译型: 优点:编译器一般会有预编译的过程对代码进行优化.因为编译只 ...