go语言

go语言

Deadly 提交于 2019-12-09 21:27:34
1.go语言介绍 2.开发环境搭建 3.我的第一个hello world 4.变量的定义 5.变量类型 6.常量 7.函数基础 8.函数一定是公民(先了解一下的) 一.go语言介绍 go是什么: Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言。 Go是静态强类型语言,是区别于解析型语言的编译型语言。 解析型语言——源代码是先翻译为中间代码,然后由解析器对代码进行解释执行。 编译型语言——源代码编译生成机器语言,然后由机器直接执行机器码即可执行。 go语言的特性: 跨平台的编译型语言 语法接近C语言 管道(channel),切片(slice),并发(routine) 有垃圾回收的机制 支持面向对象和面向过程的编程模式 go语言介绍:python,php,jsc,c+,c#:微软,java:sun公司,后来被甲骨文收购了,go:谷歌go语言发展:Google2019年11月出的,python:1989年 java:1990Go是静态强类型语言:强类型:类型固定那么go语言为什么这么火?    docker容器化 devops比较火    k8s go写的:容器编排    区块链:第一个开源的区块链项目是用go写的    性能高,特别适合服务端开发    部署容易补充跨平台的编译型语言:c开发:在windows上开发

Go语言之依赖管理

邮差的信 提交于 2019-12-09 20:54:32
Go语言之依赖管理 依赖管理 为什么需要依赖管理 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面。这就导致了同一个库只能保存一个版本的代码。如果不同的项目依赖同一个第三方的库的不同版本,应该怎么解决? godep Go语言从v1.5开始开始引入 vendor 模式,如果项目目录下有vendor目录,那么go工具链会优先使用 vendor 内的包进行编译、测试等。 godep 是一个通过vender模式实现的Go语言的第三方依赖管理工具,类似的还有由社区维护准官方包管理工具 dep 。 安装 执行以下命令安装 godep 工具。 $ go get github.com/tools/godep 基本命令 安装好godep之后,在终端输入 godep 查看支持的所有命令。 godep save 将依赖项输出并复制到Godeps.json文件中 godep go 使用保存的依赖项运行go工具 godep get 下载并安装具有指定依赖项的包 godep path 打印依赖的GOPATH路径 godep restore 在GOPATH中拉取依赖的版本 godep update 更新选定的包或go版本 godep diff 显示当前和以前保存的依赖项集之间的差异 godep version 查看版本信息 使用 godep help [command]

go语言笔记

我的梦境 提交于 2019-12-09 19:54:58
1.如何在程序查看某个变量的占用字节大小和数据类型 var a int64 =10 fmt.Println("a的数据类型是 %T 占用的字节数是 %d",a,unsafe.Sizeof(a)) 来源: https://www.cnblogs.com/hua-hua-good-good-study-day-day-up/p/12013031.html

Go语言基础之反射

南笙酒味 提交于 2019-12-09 19:08:28
变量的内在机制 Go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息。 值信息:程序运行过程中可动态变化的。 反射介绍 反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。 Go程序在运行期使用reflect包访问程序的反射信息。 在上一篇博客中我们介绍了空接口。 空接口可以存储任意类型的变量,那我们如何知道这个空接口保存的数据是什么呢? 反射就是在运行时动态的获取一个变量的类型信息和值信息。 reflect包 在Go语言的反射机制中,任何接口值都由是 一个具体类型 和 具体类型的值 两部分组成的(我们在上一篇接口的博客中有介绍相关概念)。 在Go语言中反射的相关功能由内置的reflect包提供,任意接口值在反射中都可以理解为由 reflect.Type 和 reflect.Value 两部分组成,并且reflect包提供了 reflect.TypeOf 和 reflect.ValueOf 两个函数来获取任意对象的Value和Type。 TypeOf 在Go语言中,使用

GO语言01 介绍 环境搭建

五迷三道 提交于 2019-12-09 16:40:42
GO语言介绍 1.什么是GO语言介绍 Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言,Go是静态强类型语言,是区别于解析型语言的编译型语言。 2.GO语言特性 1.跨平台的编译型语言 2.语法接近C语言 3.管道(channel),切片(slice),并发(routine) 4.有垃圾回收的机制 5.支持面向对象和面向过程的编程模式 3.GO语言项目案例 docker:基于lxc的一个虚拟打包工具,能够实现PAAS平台的组建。 kubernetes :Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡 区块链:BTCD 是用go语言实现的完整节点的比特币实现 nsq:bitly开源的消息队列系统,性能非常高,目前他们每天处理数十亿条的消息 packer:用来生成不同平台的镜像文件,例如VM、vbox、AWS等,作者是vagrant的作者 skynet:分布式调度框架 Doozer:分布式同步工具,类似ZooKeeper Heka:mazila开源的日志处理系统 cbfs:couchbase开源的分布式文件系统 tsuru:开源的PAAS平台,和SAE实现的功能一模一样 groupcache

Go语言初识

纵然是瞬间 提交于 2019-12-09 16:16:52
Go语言介绍 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种 静态 强类型 、 编译型语言 。Go 语言语法与 C 相近,但功能上有:内存安全, GC (垃圾回收), 结构形态 及 CSP-style 并发计算 。 简介 Go(又称Golang)是 Google 开发的一种 静态 强类型 、编译型、并发型,并具有垃圾回收功能的 编程语言 。 Go是基于 Inferno 操作系统所开发的。Go是Google公司2009年11月正式宣布推出,成为开放源代码项目,并在 Linux 及 Mac OS X 平台上进行了实现,后来追加了Windows系统下的实现。在2016年,Go被软件评价公司TIOBE 选为“TIOBE 2016 年最佳语言”。 目前,Go每半年发布一个二级版本(即从a.x升级到a.y)。 Go是静态强类型语言,是区别于解析型语言的编译型语言。 解析型语言——源代码是先翻译为中间代码,然后由解析器对代码进行解释执行。 编译型语言——源代码编译生成机器语言,然后由机器直接执行机器码即可执行。 Go语言特性 跨平台的编译型语言(但不支持CGO),允许将源代码编译为可在目标系统、架构上执行的二进制文件 语法接近C语言,但对于变量的声明有所不同 与C++相比,Go并不包括如枚举、异常处理

go语言学习-文件读写 io os ioutil

瘦欲@ 提交于 2019-12-09 12:48:52
文件读写 os 打开文件,创建文件 func Create(name string) (file *File, err error) 创建新文件,如果文件已存在,将被截断。新建的文件是可读写的。默认权限为0666(Linux 下文件的权限设置格式)。 func Open(name string) (file *File, err error) 打开已经存在的文件,用来读取文件内容。Open 打开的文件是只读的。不能写。 func OpenFile(name string, flag int, perm FileMode) (file *File, err error)OpenFile 是一个通用的函数,可以用来创建文件,以只读方式打开文件,以读写方式打开文件等 package main import ( "fmt" "io" "os" ) func main() { /*打开文件 ,如果文件不存在将会新建,如果已存在,新写入的内容将追加到文件尾 os.O_RDONLY : 如果设置为只读,那么将写入不了数据 os.O_RDWR : 设置为读写 */ f, err := os.OpenFile("./test.txt", os.O_RDWR | os.O_APPEND | os.O_CREATE, 0666) if err != nil { fmt.Println(err) }

go语言代码规范指南

拈花ヽ惹草 提交于 2019-12-09 12:11:23
本规范旨在为日常Go项目开发提供一个代码的规范指导,方便团队形成一个统一的代码风格,提高代码的可读性,规范性和统一性。本规范将从命名规范,注释规范,代码风格和 Go 语言提供的常用的工具这几个方面做一个说明。该规范参考了 go 语言官方代码的风格制定。 一、 命名规范 命名是代码规范中很重要的一部分,统一的命名规则有利于提高的代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。 Go在命名时以字母a到Z或a到Z或下划线开头,后面跟着零或更多的字母、下划线和数字(0到9)。Go不允许在命名时中使用@、$和%等标点符号。Go是一种区分大小写的编程语言。因此,Manpower和manpower是两个不同的命名。 当命名(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就 可以被外部包的代码所使用 (客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public); 命名如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的 (像面向对象语言中的 private ) 1、包命名:package 保持package的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,尽量和标准库不要冲突。包名应该为 小写 单词,不要使用下划线或者混合大小写。 package demo ​

Go语言简单源代码剖析

僤鯓⒐⒋嵵緔 提交于 2019-12-09 11:40:34
https://github.com/beego/samples/tree/master/WebIM 项目在github上面的地址 是beego提供的一个应用小项目,只是对本人第一次剖析go语言的一个小记录,也算自己剖析代码的思路记录,希望对他人也能有所帮助 (1)阅读readme文档,知晓项目大致内容,项目用到的各种配置文件 (2)查看main包文件 WebIM.go import ( "github.com/astaxie/beego" "github.com/beego/i18n" "samples/WebIM/controllers" ) const ( APP_VER = "0.1.1.0227" ) func main() { beego .Info (beego .BConfig .AppName , APP_VER) // Register routers. beego .Router ( "/" , &controllers .AppController {}) // Indicate AppController .Join method to handle POST requests. beego .Router ( "/join" , &controllers .AppController {}, "post:Join" ) // Long polling.

Go语言基础之并发

我的梦境 提交于 2019-12-09 00:27:34
转载自 https://www.liwenzhou.com/posts/Go/14_concurrence/ Go语言基础之并发 2017年6月25日 | Golang | 3554 阅读 并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很重要的原因。 Go语言中的并发编程 并发与并行 并发:同一时间段内执行多个任务(你在用微信和两个女朋友聊天)。 并行:同一时刻执行多个任务(你和你朋友都在用微信和女朋友聊天)。 Go语言的并发通过 goroutine 实现。 goroutine 类似于线程,属于用户态的线程,我们可以根据需要创建成千上万个 goroutine 并发工作。 goroutine 是由Go语言的运行时(runtime)调度完成,而线程是由操作系统调度完成。 Go语言还提供 channel 在多个 goroutine 间进行通信。 goroutine 和 channel 是 Go 语言秉承的 CSP(Communicating Sequential Process)并发模式的重要实现基础。 goroutine 在java/c++中我们要实现并发编程的时候,我们通常需要自己维护一个线程池,并且需要自己去包装一个又一个的任务,同时需要自己去调度线程执行任务并维护上下文切换,这一切通常会耗费程序员大量的心智。那么能不能有一种机制