Go-lang特性介绍

Go编程语言是Google中一些大牛(尤其是有着plan9前科的大牛们)如Rob Pike,Ken Thomason这两位赫赫有名的程序高手、技术作于2007年9月开始建造。 

Pike指出,Go代码的编译基本上可以达到C语言的速度,几乎可以在瞬间完成,“就像是在使用交互式语言”。现有的语言都没有针对多核心处理器进行优化,为了解决此类编程问题,Google工程师们开发了Go语言。从源文件的copyright可以看到,很多基础代码来自plan9. 

Go 已在Google公司内部测试过,但仍处于试验阶段。Google开放Go的代码,希望籍此帮助Go语言的发展。首席软件工程师Rob Pike说:我们开发Go,是因为近10年左右开发程序之难让我们有点沮丧。Google两年前开始开发Go,1年前开始有一只团队专职于此。目前只支持unix平台, windows平台的支持由于资源的原因,需要更多的参与者来移植。 
Go的定位 是系统编程,比如Web服务器、存储系统和数据库等,但也欢迎在其它方面的应用。 

Go语言的官方吉祥物如下: 
 

我看好Go的原因是: 这个语言不是凭空或者实验室设计的,而是填补过去10年在系统编程软件方面的不足。作为系统软件的编写者,经常会深深的感觉到目前常见语言的面对大规模的网络应用,在不断涌现的多核心硬件前的无奈, 纠缠在多线程和各种锁中间, 不停的制造各种各样的轮子, 低效的排错。Go拥有的这些现代特性都是系统用户梦迷以求的,经过作者全面的考虑,适当的取舍,即结合了动态语言的弹性,又有了静态语言的安全性和高性能。 

目前这个GO社区非常活跃,邮件列表里每天都有几百个讨论,加上有Google的强力支持, 个人认为非常有前途。 

那么GO能解决什么问题:
 
1. 硬件很快 软件开发很慢。 
2. 依赖很麻烦。 
3. c++ java太笨拙。 
4. 并行和gc 
5. 多核心机器的出现,未来几年128核心的机器都很常见。 

大部分的系统语言并不是设计来解决这些问题的,而且新涌现的大多数库并没有改善这些问题,相反加剧了。 

GO结合了动态语言的开发效率和静态编译型语言的安全性和运行效率,支持网络和多核编程,带给我们快速, 安全, 并发, 快乐。 

Go有着非常高的效率。 实际上golang.org就是用gdoc架设的。同时语言效能评测网站() Go和其他语言的对比,也充分说明了Go的效率和c语言很接近。 


GO的设计目标:
 
1。 系统编程语言。 
2. 快速编译和执行。 
3. 类型安全性和内存使用安全。 
4. 很好的支持并发计算。 
5. 高效,低延迟的垃圾回收算法。 

指导原则:
 
1. 减少bookkeeping。 
2. 更少的关键词,减少无谓的输入。无符号表设计使得语法分析,调试等大幅简单。 
3. 保持概念正交 
4. 保持简单。 
5. 减少类型,无类型层次,避免啰嗦。 

语言特性: 
清晰,精确的语法语法:大多数从c 继承, 包机制Pascal/Modula/Oberon family (declarations, packages),并发从(CSP)那里借鉴。 
大写符号导出符号。 
函数或者块开始注释是文档,用于gdoc处理。 
改进的If, case 复合语句,允许在条件前,执行语句。 Case 不支持自动fall throught, 必须显示说明。 Case支持多个判断。 

轻量的类型系统 
没有隐式的转换 
强类型,显式类型转化 
指针运算 slice代替 提供安全性 
通用类型:interface{} 
内置数组和字典 
支持面向对象编程,但是不支持层次继承。 
融合多种语言的特性,各个社区的人都会熟悉,特别是c, lua, python社区的用户非常容易上手。 

运行期: c和汇编实现内存的分配和收集,栈管理,轻量级协程,通讯管道,切片,Map以及反射等等基础设施。 

Gc:目前是用经典的简单的Mark And sweep 算法, 未来会采用更高效,低延迟的算法。 

库实现:
 
1. 完全用Go语言实现, 不依赖其他系统库 
2. 从接口库如xml, asn1,jonson, IO库,压缩,加密库等等,比较齐全,极大的方便了用户。 
支持unicode. 值得一提的是 Go的 “hello 世界”,很好的展示了对unicode支持。 

模块: 
Package管理。一个package可以分散在多个文件里,就好比在一个文件效果一样。 

扩展: 
Cgo 支持c和go编程混合,使得GO的扩展非常容易,让Cgo来做参数和类型的转换, 直接连接用户的c函数。 


Range:for语句支持通用的迭代,支持数组,字典,通讯管道。 特别是通讯管道结合goroutine, 由生产者负责在一端输入数据, range充当消费者, 从另外一端。。。,使得包容器的迭代实现非常的优雅和简单易懂。 

Type: 相当灵活的struct, 支持匿名字段,复用看起来很优雅。 

Interface: 
接口 类型 接口实现分离。Interface{}用来实现表示同样类型,用于实现保容器和参数省略。 

闭包:函数是第一类对象。有了闭包,我们很容易把数据和函数结合在一起,形成一个独立的执行体,无需关心数据的泄漏。 

反射(reflection):用于实现多参数和实现比如xml库,很直观的把结构的字段名和值映射起来,但是效率不高。 

Network 支持。支持tcp,udp,接口统一,但网络读写暂时无效的时候,net模块会自动把该句柄注册到系统的poll, 并且让出执行,等待读写事件的发生。一旦事件通知,net内部通过channel通知阻塞的句柄继续往下执行。从用户的使用角度来看,网络的读写都是顺序执行的,极大的简化了编程。 

Goroutine:Goroutines 是使得并发编程变得容易的核心。核心思想就是通过系统的线程来多路派遣独立函数的执行 单位协程。当一个协程阻塞的时候,比如说系统调用,调度器就会自动把其他协程安排到另外的线程去执行,从而保证了系统的不间断运行。 这个调度对于程序员是透明的,从用户的角度来看,协程在一直运行。而且这个调度的开销非常小,典型的CPU每秒钟可以调度百万次,使得我们可以创建大量的goroutine, 模拟现实世界的行为,大大的简化了程序的设计和实现。 

Channel: CSP的核心思想是通过消息共享, 而不是内存共享。 而消息共享机制就是通过channel来传递消息,有同步和异步之分。 Channel在生产者和消费者之间架设起沟通的桥梁。 

正是 Network+闭包+Goroutine+Channel让Go这么突出。 

目前存在的问题:
 
1. 语言的实现时间比较短,实现和社区都不够成熟,一些语言特性如select timeout还没有实现。 
2. 语言库和基于GO的应用还比较少,甚至在Google内部也还是个试验项目。 

数据结构:五岔路口交通管理红绿灯设计 我们可以知道这是一个“图”的着色问题,首先要考虑,为什么可行路线是13条?当然可以通过穷举得出,如果用公式:则是: 或者 因为一条路线必须包括一出一进两个方向 第一种答案的解法: 一、固定E为入口,则有C_4^1=4的可能; 二、除去E(因为E只有一个入向),剩下ABCD四个路口,然后因为C只有一个出方向,所以从剩下 的ABD中选择一个入口,即C_3^1; 三、再从剩下的三个出口任选 阅读详情

相关推荐

《第二十二篇》Cross-Attention:注意力机制详解-代码实现和公式详解《二》

本文详细介绍了Cross-Attention的原理、公式和实现。Cross-Attention用于Transformer解码器和Encoder-Decoder结构,通过查询向量(Q)与键、值向量(K、V)的交互实现序列对齐。核心公式为softmax(QK^T/√d_k)V,其中Q来自Decoder,K、V来自Encoder。文章还给出了多头注意力机制公式和PyTorch实现代码,包括投影计算、注意力分数计算和输出处理。代码示例展示了如何构建一个完整的Cross-Attention模块,并演示了其在解码器查询

guoguozgw的博客 2209

[ golang ] golang 语言特性

一、golang 语言特性 golang 语言特性主要包括以下几点: q 自动垃圾回收q 更丰富的内置类型q 函数多返回值q 错误处理q 匿名函数和闭包q 类型和接口q 并发编程q 反射q 语言交互性 自动垃圾回收 C语言代码不支持垃圾自动回收,会导致指针存在如下两个问题: void foo() {char* p = new char[128]; ... // 对p指向的内存块进行赋...

hanfs390的博客 805

Pattern Recognition 投稿过程记录,含Elsevier Latex模板使用

Pattern Recognition 投稿过程记录,含Elsevier Latex模板使用 最近在Pattern Recognition投出了一个文章,纯纯属于是第一次投稿,感觉自己写了一坨屎,事实是这确实也是一坨屎,现在是投了之后在等待一个拒稿的状态。 但是还是记录一下一些流程 1. 下载模板 在出版商Elsevier的栏目里有对于稿件的结构要求,也提供了Latex模板。同时,也给作者提供了Guides, 可以仔细阅读。下面这个连接咱们可以下载到Guides以及看到一些文章的要求。 https://ww

weixin_44153180的博客 3万+

Golang语言特性

代表项目:docker、kubernetes、etcd、consul、cloudflare CDN、七牛云存储等。代表项目:go-kit、micro、monzo bank的typhon、bilibili等。3、所有Excepiton都用Error来处理(比较有争议)。4、对C的降级处理,并非无缝,没有C降级到asm那么完美(硬件、序列化问题)最终生成的可执行程序是一个静态的二进制文本文件。代表项目:tidb、influxdb、cockroachdb等。1、包管理,大部分包都在github上。

B19276363838的博客 540

2025年最新Cesium学习示例:Cesium-Examples

2025年最新Cesium学习示例:Cesium-Examples

2403_88103571的博客 1009

传统芯片封装工艺流程简介

塑封是将工件和树脂安装在模具中,加热模具,使树脂液化充满模具,降温保持一定时间后,树脂凝结为固态即可取出。它将一个大的晶圆切割成许多单独的小块,每个小块是一个“芯片”(Chip,die),这些芯片是单个集成电路的基本单位。对裸露在外的引线框架外脚电镀Sn-Pb合金,这样不仅可以提高外脚的抗氧化性,还有利于后续与印刷电路板的焊接。导电胶粘贴法:将含有银粉的环氧树脂(银浆)涂敷在框架或基板上,再将芯片放置其上,固化后可以将芯片牢牢粘接。引线框架的各腿是用筋连接着的,起支撑作用,塑封固化后,需要将其连筋切掉。

芯想是陈的博客 3190

​Go语言(Golang)详细介绍

Go 语言在 ​云计算、微服务、DevOps​ 领域占据重要地位,是未来十年值得学习的语言!

一起探索IT的世界 2349

瑞萨RH850/U2A8以太网模块mcal说明

如下所有功能的支持需要在达芬奇中开启EthGlobalTimeSupport。秒[32bit], 纳秒[32bit], 纳秒小数[20bit]每一帧发送数据的相关结构缓冲区都放在变量。每一帧接收数据的相关结构缓冲区都放在变量。

至道无难,唯嫌拣择。 1860

GoLang语言的特点

Go语言既能达到静态语言的安全和性能,又达到了动态语言开发维护的高效,使用一个表达式来形容Go语音(Go = C + Python),说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。 从C语言中继承了很多理念,包括表达式语法、控制结构、基础数据类型、调用参数传值、指针(弱化指针)等,也保留了和C语言一样的编译执行方式。 函数可以返回多个值 引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。 垃圾回收机制,内存自动回收,不需要开发人

zero_Dreamer的博客 839

海康WEB3.3控件开发包 V3.3 前端vue项目调用实时监控画面

本需求的完成离不开后端将设备映射到公网, 以及前端单独部署demo页面这个思路的转变。

hero8011的博客 1万+

【入门AUTOSAR网络管理测试】AUTOSAR网络管理规范需求解读

AUTOSARAutomotive Open System Architecture,汽车开放系统架构,由全球汽车制造商、部件供应商及其他电子、半导体和软件系统公司联合建立,致力于制定汽车电子软件标准的联盟。网络管理网络管理的目的是使网络中的ECU节点有序的睡眠和唤醒。在没有通信需求的时候睡眠,在需要通信的时候唤醒,可以节约汽车电池的电量。

测试领域技术分享 5162

Umka Lang 开源项目常见问题解决方案

Umka Lang 是一个静态类型的嵌入脚本语言,它的设计目标是结合脚本语言的简易性和灵活性,同时提供编译时类型错误的保护。Umka Lang 的语法简洁,受到 Go 语言的启发,支持跨平台的字节码编译器和虚拟机,并具备垃圾回收机制。它还支持与 C 语言兼容的数组和结构,通过接口实现多态,以及基于纤程的多任务处理。此外,它还提供了类型推断,并可以作为静态或动态库与简单的 C API 一起分发。 ...

gitblog_00226的博客 630

YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例

大家好!欢迎阅读本专栏。本专栏涵盖了YOLO8中C2f、主干网络、检测头、注意力机制、Neck等多种结构的创新,同时也包括了 YOLO相关的基础知识以及相关项目。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 3万+

Golang(1)-简介及特性

文章目录一、Golang简介1.1、什么是Golang1.2、使用Golang完成的著名项目1.3、Golang的特性二、Golang的特性概述2.1、自动垃圾回收2.2、丰富的内置类型2.3、函数多返回值2.4、错误处理2.5、匿名函数和闭包2.6、类型和接口2.7、并发编程2.8、反射2.9、语言交互性2.10、丰富开源库支持 Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针...

BoringError的博客 4627

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Go-Golang学习总结笔记

资源 某hub会审核不通过,自己去找吧 书籍 网站 基础 go官方中文网 菜鸟教程 C语言网 go语言中文网 golang系列 视频 基础 安装 依赖管理 数据类型 变量和常量 流程控制 函数 包 面向对象编程 提高 ...

关注网络安全、云原生安全 2万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Golang基础语法

golang又称go language简称golang, go语言是谷歌推出的一中编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗勃派克说:‘’我们之所以开发go,是因为过去十年间软件开发的难度令人沮丧‘’。派克表示,和今天C和C++一样,go是一种系统语言。使用它可以快速开发,同时它还是一个真正的编译语言,我们之所以将它开源,原因是我们认为它已经非常有用和强大。1)计算机硬件更新频繁,性能提高很快。

qq_45553775的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

golang的 IntelliJ Idea插件 google-go-lang-idea-plugin 编译方法 build in windows

google-go-lang-idea-plugin 插件虽然好,但是官方的编译版总是更新很慢,所以需要自己编译,问了老外才知道怎么编译,编译方法如下: I opened this project in IDEA Community 13 (or whatever the latest EAP is), then choose the SDK as the program folde

莫克陶的blog 1万+

Go lang学习

1.在 Go 中,首字母大写的名称是被导出的。 2.函数参数类型在变量名 _之后_ func add(x int, y int) int { return x + y } 3.当两个或多个连续的函数命名参数是同一类型,则除了最后一个类型之外,其他都可以省略。 func add(x, y int) int { return x + y } 4.函数可以返回任意数量的返回值。 fu

blade2001的专栏 1874

初窥门径代码起手,Go lang1.18入门精炼教程,由白丁入鸿儒,首次运行golang程序EP01

前文再续,书接上回,前一篇:[兔起鹘落全端涵盖,Go lang1.18入门精炼教程,由白丁入鸿儒,全平台(Sublime 4)Go lang开发环境搭建EP00](https://v3u.cn/a_id_222),我们搭建起了Go lang1.18的开发运行环境,接着就可以运行第一个Go lang1.18程序了,让我们整装待发,开启Go lang1.18的处女航。...

刘悦的技术博客 613

【第一章:Golang系列篇】Go(Golang)概述

看完你会懂的为什么出现Go、为什么学习Go、Go应用领域、Go的特性等等。

持续分享,个人的运维经验,包含:云计算、Linux、Windows、容器、K8s、CICD、Python、运维开发、公有云等;以及个人经历相关内容,包含:实习、面试经验等。 3983

【GO-go-go-rookie-UP】

golang之菜鸡进阶

qq_40892215的博客 1163

Idea Go Lang Debug环境搭建

开始装golang的插件,插件官网地址:https://github.com/go-lang-plugin-org/go-lang-idea-plugin提示:Idea的插件仓库里面本身也有Go,但是版本相对更新很慢,博主写文章的时候Go的版本已更新到1.6,而Idea本身插件仓库的Go插件是15-12.01更新的,不支持最新版Go网上很多教程都是下载github上的插件源代码,自己编译插件然后安装

T Yuan 5826

探索Larva-Lang:一款革新性的Go后端语言

探索Larva-Lang:一款革新性的Go后端语言 项目介绍 Larva-Lang 是一款创新性的编程语言,它以Go语言作为后端,旨在提供一种更加现代化、易用且功能强大的编程体验。Larva-Lang的设计理念是融合多种主流编程语言的优点,同时解决Go语言中的一些不足之处。通过静态类型系统和编译到Go代码的方式,Larva-Lang不仅保留了Go的高性能和并发优势,还引入了更友好的语法和更丰富的功...

gitblog_00529的博客 999

Go夜读社区深度剖析:learning-golang如何构建活跃技术社群

Go夜读社区作为国内最具影响力的Go语言技术社群之一,通过learning-golang项目为开发者提供了**完整的学习路径**和**丰富的技术资源**。这个项目不仅是一个简单的资源聚合库,更是一个**Go语言技术生态系统的入口**,帮助新手快速入门,助力老手持续进阶。 ## 📚 项目核心价值与定位 learning-golang项目是Go夜读社区精心维护的**Go语言学习资源大全**,它汇

gitblog_00939的博客 794

Golang 入门

这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)bit是计算机中最小的存储单位,而byte则是计算机中的基本存储单元(查询编码地址在 Go 中,字符的本质是一个整数,直接输出时,会打印出字符对应的 UTF-8 编码的码值。

2401_85819495的博客 2090
上一篇: 使用go语言一个月的认识
下一篇: web.py 0.3 新手指南
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值