作家
登录

初识GO语言

作者: 来源: 2018-03-13 08:01:12 阅读 我要评论

沙龙晃荡 | 3月31日 京东、微博拭魅战专家与你合营商量容器技巧实践!


GO说话包含四种重要的声明方法:变量(var)、常量(const)、类型(type)和函数(func)。我们来聊聊变量相干的几点感触感染:

媒介

本专栏全方面解读软件范畴相干常识,偏向技巧深度内容,重要覆盖编程说话、体系架构、开源框架、技巧治理等,又分为多个主题,每个主题包含多篇文┞仿。

GO说话

介绍

大年夜汗青说起,Go说话的作者是Robert Griesemer、Rob Pike和Ken Thompson,个中Ken Thompson以在UNIX和C说话开辟中的巨大年夜供献为法度榜样员所熟知。今朝为止有哪些软件是用Go说话编写的呢?容器软件Docker、基本软件ETCD和Kubernetes,数据库软件TiDB和InfluxDB、消息体系NSQ、缓存组件GroupCache。

可以看到,几乎在基本架构软件的每一个范畴,都出现了由Go说话编写的新软件,这些软件的市场占领率持续攀高。除了作为基本架构软件的说话之外,Go说话作为办事器端通用说话的机会也越来越多,大年夜Beego、Gorilla等Go说话Web框架的热点程度也可以看出一些成长趋势。

示例法度榜样

我们经由过程一个简单的示例法度榜样看看GO的编码风格:

  1. Package main 
  2. import "fmt" 
  3. func main(){ 
  4.     fmt.Println("hello,world"); 

若何运行上述代码呢?GO说话是编译型说话,GO的对象链将法度榜样的源文件改变成机械相干的原生指令(二进制),最基本的对象是run敕令,它可以将一个或者多个GO源文件(以.go为后缀)进行编译、链接,链接后就开端运行生成的可履行文件,看一下实际的操作:

打印:hello,world

膳绫擎的编译、链接、运行,都是一次性工作,也就是说下次运行go run敕令时,内部流程会全部重做。我们可以经由过程go build敕令生成二进制法度榜样,随后就可以随便率性调用了,如下所示:

  1. $go build helloworld.go 
  2. $./helloworld 
  3. hello,world 

这里我们提到了编译型说话,什么是编译型说话?如不雅编译型说话编写的法度榜样须要被机械熟悉,它须要经由编译和链接两个步调,编译拭浇榇代码编译成机械码,链接是把各个模块的机械码和依附库串联起来生成可履行文件。

我们来看看编译型说话的优缺点,因为预编译过程的存在,对代码可以进行优化,也只须要一次编译,运行时效力也会较高,并且可以离开说话情况自力运行,缺点是修改后的┞符个模块须要编译。

相对编译型说话,解释型说话只会在运行法度榜样的时刻才逐行翻译。那么什么是链接?精确地说是链接和装入,即在编译后履行这两个步调,法度榜样才能在内存中运行。链接是经由过程连接器完成的,它将多个目标文件链接成一个完全的、可加载的、可履行的目标文件,全部过程包含了符号解析(将目标文件内的应用符号和该相符的定义接洽起来)和将符号角说与存储器的地位接洽起来两个步调。

定名规范

GO说话中的函数、常量、变量、类型、语句、标签、包的名称有较同一的定名规矩,名称的开首是一个字母或下划线,后面可所以随便率性数量的字符、数字或下划线,留意,GO说话是区分大年夜小写的,并且关键字弗成以作为名称。当碰到由单词构成的名称时,GO法度榜样员一般应用“驼峰式”的风格。

说到这点,我们来看看Java的定名规范。以$为例,Oracle官网建议不要应用$或者_开端作为变量定名,并且建议在定名中完全不要应用“$”字符,原文是“The convention,however,is to always begin your variable names with a letter,not ‘$’ or ‘_’”。对于这一条,腾讯的看法是一样的,百度认为固然类名可以支撑应用“$”符号,但只在体系生成中应用(如匿名类、代劳类),编码不克不及应用。

今天的文┞仿仅仅是初步印象介绍,我们下篇文┞仿见。

这类问题在StackOverFlow上有很多人提出,主流看法为大年夜家不须要过多存眷,只须要存眷本来的代码是否存在”_”,如不雅存在就持续保存,如不雅不存在则尽量避免应用。也有一位提出尽量不实用”_”的原因是低分辨率的显示器,肉眼很难区分”_”(一个下划线)和”__”(两个下划线)。

我小我认为可能是因为受C说话的编码规范所影响。因为在C说话琅绫擎,体系头文件老将宏名、变量名、内部函数名用_开首,是以当你#include体系头文件时,这些文件里的名字都有了定义,如不雅与你用的名字冲突,就可能引起各类奇怪的现象。综合各类信息,建议不要应用”_”、”$”、空格作为定名开端,以免晦气于浏览或者产生奇怪的问题。

1. 出现了当前主流说话无法解决的复杂场景或具体问题;

当然,上述都是针对Java的,与GO无关,GO说话受C说话的影响更多。

变量概述

如不雅一个变量生命为var x int,表达式&x(x的地址)获取一个指向整形变量的指针,它的类型是整形指针(*int)。如不雅鲎判做p,我们可以说p指向x,或者p包含x的地址。p指向的变量写成*p。表达式*p获取变量的值(词攀例为整形),因为*p代表一个标量,所以它也可以涌如今赋值操作符左边,用于更新变量的值。

1. var声明创建一个具体类型的变量,然后给它附加一个名称,并且设置它的初始值,每一个声明有一个通用的情势:var name type = expression。多说一句,GO说话许可空字符串,不会报空指针缺点。


  推荐阅读

  Linux容器安全的10个层面

沙龙晃荡 | 3月31日 京东、微博拭魅战专家与你合营商量容器技巧实践! 应用这些策略来保护容器解决筹划的各个层面和容器生命周期的各个阶段的安然。当治理结合集群时,你必须确保你的编配对>>>详细阅读


本文标题:初识GO语言

地址:http://www.17bianji.com/lsqh/40631.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)