Go简单了解

0.一直很好奇,go是不是像传说中的速度快,解决了多线程问题,快速进行了解了解,和java进行对比,他是怎么解决语言发展的问题的…,所有语言都是差不多的,只是熟练程度不同而已
1.go图标是土拨鼠,2009发行

docker使用go,解决了并发问题
google facebook 腾讯 百度 七牛云 京东 小米使用go开发
可以简单的开发web服务,不需要很多框架.区块链以太坊,嵌入式

2.特点

1.语法简单 只有i++ 没有括号
2.支持并发 不用多线程了
3.垃圾回收

3.环境

  1. go1.16 安装包
    cmd: go version

  2. 配置环境变量
    GOROOT安装路径 \bin
    GOPATH代码依赖 创建文件夹 bin pkg src

    go evc

  3. 开发工具 goland

4.代码

package main //相当于默认的包
import "fmt" //工具类 
func main(){   //定义方法fmt.PrintLn("Hello World")   //没有分号}
//font size调整字体
//开发工具报错cmd: go env -w GO111MODULE=off

5.代码1(js语法)

   var name string ="aaa"  //小写的//多个变量定义简单var name1,bb string name= "aaa"//初始化并定义,自动推导name :="aaa"age :=10var(   //定义多个变量name stringage int)fmt.Printf("%T,%p",name,&age) //查看类型,查看地址var a int =100var a int =300a,b = b,a //变量交换,区别于其他语言//定义函数func test() (int,int){ //返回值return 100,200}a,_: =test() //没有类了 接收匿名变量,不占用内存空间,也不分配内存,会丢弃//必须要使用,不然报错//全局变量,函数外,//常量const URL string="aaa"const a,b,c =3,14,"aaa",false//iota  常量计数器计算 会自动+1 不定义的话,可以对数组遍历,用得不多const(a =iota  //0b          //1c="aaa"    //给标号2d             //3)

5.数据类型(好像js啊,又像java一样强类型)

       var flag bool =true //默认false//整形var age int64 =19 var age uint64 =19  //无符号//32可能会精度丢失var money float64=3.14 //%f打印 默认6位小数 ,%.1f保留一位小数并且4四舍五入var age byte =19  var aa string ="" +"xxx" // %s ,%d 打印ASCIII码,中文打印GBK//类型转换c: =float64(a)  //int转float64 ,java使用(float)强制转换和隐式 ,这里没有优先级,d:=int(f)//但是使用 float64转float32会丢失

6.关系运算符 && || == !

   if !(a&&b){  //去括号}else{}//位运算 用于二进制加密解密,安全   ^异或: 不同为1  >> <<var a uint=60var a uint=13a & b                          //看二进制%b// &^可以清空特点的位 比如 1010 &^ 0011 = 1000 如果b为0取a的值,不是就取0,这个代码是清空了a的后两位, b代表清空哪里

7.其他运算符 & 和指针

  var a int *

8.输入

 var x intvar y float64
fmt.ScanLn(&x,&y)

9.语法 没有小括号

 if a>20 && b<20 {}else if a>30 && b<20{} else{}switch score{ //?case 90:case 50,60,70:fallthrough //穿透到后面的default:break //停止穿透for i:=1 ;i<=10;i++{}//无限循环for{}}

10.字符串

     str:="aaa"len(str)   fmt.Printf("aaa",str[2]) //ascill码fmt.Printf("%c",str[2])for i,v:=range str{//下标和值}str[2]= 'a' //错误的,不能转,是int

11.函数

add(1,2)
func add(a,b int)(int) {c:=a+breturn c}
func add() {}
func add() int {return 10}
func add()(string,string ){return "aa","bb"}//要放在最后可变参数,只能一个
func add(nums ...int) int {len(nums)nums[0]return 10}

12.值传递 基础类型,arr struct

 arr1:=[4]int{1,2,3,4}func update(arr2 [4] int){//值传递,复制一份,不改原数据fmt.Println("aaa",arr2[1])arr2[1]=10
}//引用传递(值变化,传入地址) 切片(可扩容的数组) map chans1: =[]int{1,2,3,4}func aa(s2 []int)

13.作用域 就近原则

   for b:=1; b<=10fmt.PrintLn(b) //报错,只能循环使用

14.递归函数, 有就出结果,没有死循环
15.defer推迟执行函数最后执行,多个逆序执行 1cba

defer func1("a")func1("1")
defer func1("b")
defer func1("c")//关闭操作,写日志

16.函数的类型是 func()

  fmt.Printf("%T",f1) //如果有返回值也不一样//函数类型的变量var f5 func(int,int)f5=f1f5(1,2) //地址一样f2:=f1//匿名函数f3:=func(){}f3()//执行func(){}()f3:=func(a int,b int) int {return a+b}  //返回值 f3(1,2)//支持函数里面传函数(高阶函数)//回调函数(被调用的) 
func main(){oper(10,20,func()(int){})
}func oper(a,b int ,fun func(int,int) int) int{return 10})

17.函数闭包 不推荐使用可读性差(函数里面定义函数 内层操作外层变量,创建的函数的值不会被销毁,只有复制另外一个函数才重新创建)

func main(){r1:=aa()//1r1:=aa() //2r2:=aa()//1 创建新函数} func aa()func () int{ //返回函数a:=1func1:= func bb(){return a++}return func1
}

18.go语言的面向对象是使用结构体指针实现的(c语言使用比较友好)

type Person struct {name stringage  int
}func (p *Person) SayHello() {fmt.Printf("Hello, my name is %s and I'm %d years old.\n", p.name, p.age)
}
19.没有继承和多态,实现不一样
go```java```java
type Animal struct {name string
}func (a *Animal) Speak() {fmt.Println("I'm an animal.")
}type Dog struct {Animal // 嵌入Animal类型breed  string
}func main() {d := Dog{Animal: Animal{name: "Buddy"},breed:  "Labrador",}d.Speak() // 调用嵌入类型Animal的方法fmt.Println(d.name) // 访问嵌入类型Animal的字段
}

19.总结

  1. 对比java语法确实简化许多,但是那个类型我写着好别扭, var a int64 可能写java写习惯了…
  2. 解决多线程问题, 直接写个 go 函数名就解决了,java需要写多线程
  3. 继承和多态还是java 比较简洁,用指针看起来不大舒服…
  4. go开发结束代码没有 ; 号,可能我觉得他的作用还是很大的, 如果我要复制代码会格式变化,没有分号可能可读性比较弱
  5. go语言用在docker,但是生态还没有java好,可发掘的潜力比较大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/212634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud Gateway + Nacos + LoadBalancer实现企业级网关

1. Spring Cloud Gateway 整合Nacos、LoadBalancer 实现企业级网关 前置工作&#xff1a; 创建 SpringBoot 多模块项目创建网关&#xff08;gateway-service&#xff09;、用户&#xff08;user-service&#xff09;模块用户模块添加 Nacos discovery 支持以及 Spring Web&am…

gitbash下载安装

参考教程 零、下载 官网地址 2.43.0win64 链接&#xff1a;https://pan.baidu.com/s/16urs_nmky7j20-qNzUTTkg 提取码&#xff1a;7jaq 一、安装 图标组件&#xff08;Additional icons&#xff09;&#xff1a;选择是否创建桌面快捷方式&#xff1b;桌面浏览&#xff08;Win…

设计模式--命令模式的简单例子

引入&#xff1a;以一个对数组的增删改查为例。通过命令模式可以对数组进行增删改查以及撤销回滚。 一、基本概念 命令模式有多种分法&#xff0c;在本文中主要分为CommandMgr、Command、Receiver. CommandMgr主要用于控制命令执行等操作、Command为具体的命令、Receiver为命…

逸迅科技丁红阳:三种能力帮助企业打造GBI “护城河”

大数据产业创新服务媒体 ——聚焦数据 改变商业 近日&#xff0c;由上海市经济和信息化委员会、上海市科学技术委员会指导&#xff0c;数据猿与上海大数据联盟联合主办的“2023企业数智化转型升级发展论坛”在上海举行。本次论坛以“释放数字价值驱动智能升级”为主题&#xf…

piakachu越权漏洞

水平越权 首先打开这一关&#xff0c;在右侧有一些提示&#xff0c;我们可以看到 然后我们随便输入一组信息即可&#xff0c;可以在url中看到这样的字段 当我们尝试在url中直接更换另一个用户名时可以发现&#xff0c;直接切换到了另一个用户的身份 垂直越权 这里可以看到右边…

QML和C++交互中,实现C++中connect到qml的信号,再从qml发射信号传递数据给C++的一种方式

1.需求&#xff1a; 假设我们有一个需求&#xff0c;要求在用户点击列表中的项目时&#xff0c;不仅在控制台上输出项目的名称&#xff0c;还要在C端进行一些处理。我们希望在C端能够接收到用户点击的项目名称&#xff0c;并进行相应的处理。 2.分析&#xff1a; 在这种情况…

Android 10.0 系统framework修改低电量关机值为2%

1.前言 在10.0的系统产品开发中,在系统关于低电量关机的值,每个平台都不同,根据实际开发底层硬件的要求看实际情况来调整这个值, 所以需要分析相关的电量变化执行的代码流程,来实现这个功能 2.系统framework修改低电量关机值为2%的核心类 frameworks\base\services\cor…

一文学会使用 PyInstaller 将 Python 脚本打包为 .exe 可执行文件

文章目录 前言PyInstaller特点跨平台支持自动依赖项处理单文件发布支持图形用户界面&#xff08;GUI&#xff09;和命令行界面&#xff08;CLI&#xff09;应用支持多种打包选项 基本用法常用参数其它参数 版本 & 环境实现步骤安装 PyInstaller创建 Python 脚本使用 PyInst…

Strange-Towers-of-Hanoi

title: Strange Towers of Hanoi date: 2023-12-11 03:20:05 tags: 递推 categories: 算法进阶指南 题目大意 解出 n n n 个盒子 4 4 4 座塔的汉诺塔问题最少需要多少次&#xff1f; 思路 首先考虑 n n n 个盒子 3 3 3 座塔的经典汉诺塔问题&#xff0c;设 d [ n ] d[n] …

第三十章 控制到 XML 模式的映射 - Array of Classname

文章目录 第三十章 控制到 XML 模式的映射 - Array of ClassnameArray of Classname 第三十章 控制到 XML 模式的映射 - Array of Classname Array of Classname 本部分显示了从启用 XML 的类生成的XML 架构的一部分&#xff0c;此时该类包含定义为类名数组的属性。例如&…

【SpringBoot教程】SpringBoot 创建定时任务(配合数据库动态执行)

作者简介&#xff1a;大家好&#xff0c;我是撸代码的羊驼&#xff0c;前阿里巴巴架构师&#xff0c;现某互联网公司CTO 联系v&#xff1a;sulny_ann&#xff08;17362204968&#xff09;&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗…

transformer模型结构|李宏毅机器学习21年

来源&#xff1a;https://www.bilibili.com/video/BV1Bb4y1L7FT?p4&vd_sourcef66cebc7ed6819c67fca9b4fa3785d39 文章目录 概述seq2seqtransformerEncoderDecoderAutoregressive&#xff08;AT&#xff09;self-attention与masked-self attentionmodel如何决定输出的长度…

【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,

背景&#xff1a;部分课程禁止客户拖动视频进度条直至播放结束 红色是遮罩区域遮罩区域 实际遮罩效果&#xff08;有一个很浅的阴影区域&#xff09; 实现代码 .wxml文件 <video enable-progress-gesture"false" ><cover-view class"cover">…

基于深度学习的yolov7植物病虫害识别及防治系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介YOLOv7 系统特性工作流程 二、功能三、系统四. 总结 一项目简介 # YOLOv7植物病虫害识别及防治系统介绍 简介 该系统基于深度学习技术&#xff0c;采…

Seata配置

参考教程 seata 分布式事务的环境搭建与使用 Seata 1.4.0 nacos配置和使用&#xff0c;超详细 Seata 1.4.2 的安装 Nacos的配置和使用 官网下载地址 本文以v1.4.1为例 1.数据库及表的创建 创建seata数据库&#xff0c;创建以下表&#xff08;右键连接-》新建数据库seata-》…

kubeadm搭建1.20.7版本k8s

资源 服务器名称ip地址服务master1&#xff08;2C/4G&#xff0c;cpu核心数要求大于2&#xff09;192.168.100.10docker、kubeadm、kubelet、kubectl、flannelnode01&#xff08;2C/2G&#xff09;192.168.100.30docker、kubeadm、kubelet、kubectl、flannelnode02&#xff08…

windows系统proteus中Ardunio Mega 2560和虚拟机上Ubuntu系统CuteCom进行串口通信

在文章利用proteus实现串口助手和arduino Mega 2560的串口通信-CSDN博客 中&#xff0c;实现了windows系统的proteus中Ardunio Mega 2560和SSCOM通过虚拟串口进行通信。虚拟串口的连接示意图如下图所示。 在文章windows系统和虚拟机上ubuntu系统通过虚拟串口进行通信-CSDN博客…

3DMAX关于显示驱动问题的解决方法大全

3DMAX与显卡驱动有关的问题主要有以下几种情况&#xff1a; 1.3DMAX启动弹出这样的界面&#xff1a; 2.主工具栏按钮不显示&#xff0c;或者鼠标移上去才显示&#xff08;刷新问题&#xff09;。 3&#xff0e;视口菜单不显示或显示不全。 问题分析&#xff1a; 首先&#x…

安全基础从0开始

文章目录 常见名词小实战 网站搭建小实战抓包模拟器状态码返回值网站搭建WEB应用安全漏洞 数据包&封包&信息收集**参考点** 常见名词 前后端&#xff0c;POC/EXP&#xff0c;Payload/Shellcode&#xff0c;后门/Webshell&#xff0c;木马/病毒&#xff0c; 反弹&…

ReactNative0.73发布,架构升级与更好的调试体验

这次更新包含了多种提升开发体验的改进&#xff0c;包括&#xff1a; 更流畅的调试体验: 通过 Hermes 引擎调试支持、控制台日志历史记录和实验性调试器&#xff0c;让调试过程更加高效顺畅。稳定的符号链接支持: 简化您的开发工作流程&#xff0c;轻松将文件或目录链接到其他…