golang了解

golang了解,第1张

概述Go是Google开发的一种编译型,可平行化,并具有垃圾回收功能的编程语言。 第一点: package main func main(){ print("HelloWorld\n") } #include<stdio.h> void main(){ printf("helloworld\n"); } 跟C一样,go 也需要一个 main函数;   不同: 函数多了一个关键字 func; go函数中

Go是Google开发的一种编译型,可平行化,并具有垃圾回收功能的编程语言。

第一点:

package main func main(){ print("HelloWorld\n") } #include<stdio.h> voID main(){ printf("helloworld\n"); }
跟C一样,go 也需要一个 main函数;
  不同: 函数多了一个关键字 func; go函数中的第一个{必须和函数名同一行,换行运行时会出错("prog.go:11: Syntax error: unexpected semicolon or newline before { ") [1] 函数print 是go 不过几个 内置函数哦。prinf则是stdio中的 库函数; 主函数必须是package main; 结束的分号可以不写哦。当然你一行就好几句,就不能省了。
第二点:

变量类型接下来我们看看变量类型吧。go 跟c差不多。有明确的变量类型, 跟JavaScript比起来都是var 根据运算确定类型,感觉效率总是有问题;有时候甚至自己也不知是什么类型。
  go 定义了如下类型 整型:int8,int16,int32,int64(有符号的。好爽啊,直接表明所占的bit数,不知道是不是有人当初记char,short,int,long的长度也花了时间。),无符号,直接加个u,uint8,uint16,uint32,uint64;float就只有float32,float64;当然他们也有int,这个int是32位,还是64位,就要根据机器的位数决定,还有byte=int8;还有一个string类型,暂且认为它跟java中的string差不多吧,就是无法更改其中的某个字符,除非生成一个新的字符串;
  好吧,来个加法运算吧;

点击(此处)折叠或打开 1. package main 2. func main(){ 3. var i int 4. var j int8 5. i=1 6. j=i+1 7. print(i,"\t",j) 8. } 1. #include<stdio.h> 2. voID main() 3. { 4. int i; 5. char j; 6. i=1; 7. j=i+1 8. printf("%d\t%d\n",i,j); 9. }

  除了第六行,好像其他都不一样。
  不同: 变量的声明不同了首先是 关键字var, 然后是变量名 i, 然后是类型 int;跟C反了,还多了一个关键字var;为什么要反过来呢? 官方文档里面介绍了, 为了避免c中的某些疏忽, 也许我们都曾经错过哦! 如:int *a,b; 定了两个不同的类型 a是int *; b 是int; 很容易误解为都是指针哦。 go中就没有问题了 var a,b * int; 呵呵,全部是整型指针; print也不一样,不同的内容直接用逗号隔开,好像没有c的好,特别是当大量文档中插入数字时,要分好多断。有没有类似c的 格式化函数呢?让我们慢慢学习吧。 print的参数没有严格要求,既认识i是整型,有认识“\n”是字符串;这一点比C强多了。 如果 编译,会发现左边的第7行有语法错误。因为i的类型和j的类型不同,而c中就没有这么严格了阿。报个 warning;而go中则需要明确写成j=int8(i+1); 好像有点烦哦! 注意是int8(i+1) ! 第三点:for

好了,来个for循环吧。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 packagemain funcmain(){ a:=0 fori:=1;i<10;i++{ fori:=1;i<10;i++{ a+=i print(a, "\n" ) } } }
代码有点奇怪,也有点不知道什么意思,是的,没有什么目的, 就是想介绍一下 变量的声明,和作用域, 以及for的写法; a:=0 是变量声明的一种简写,具体a是什么类型有后面的赋值决定; 这样写只能一次哦。下次要给a赋值需要直接写a=****; 那这个a是什么类型呢? int8, int16。。。?写个小程序试试吧! 疑? i:= 怎么用了两次呢? 等下面打印的结果你就会发现这两个i不一样阿。各自的作用域都是自己的for循环,第二个i覆盖了第一个i哦! 再来看看for吧,好像也少了点什么? 对阿。括号没有了。而且必须没有哦; 还有开始的大括号也不能另起一行哦。 嗨是不是有点乱阿。 但是对于咱们这些有基础的老程序员,那有心思去一个一个看说明。 看了好一段,一个程序也写不了。看到后面又把前面的忘了。 好继续; 有这么多, 来冒个泡吧。
第四点:冒泡



1.package main 2.func main(){ 3.var a=[...]int{10,25,32,11,6,36,18,22,5,7} 4.//var a[10]int=[10]int{10,7} 5//var a[10]int=[...]int{10,7} 6.fori:=0;i<len(a);i++{ 7.forwhile:=i;while<len(a);while++{ 8.ifa[i]>a[while]{ 9.a[i],a[while]=a[while],a[i] 10.} 11.} 12.} 13.i:=0 14.fori<len(a){ 15.print(a[i],"\t") 16.i++ 17.} 18.} 数组的 初始化有三种,第一中最简单,具体有几个有编译器自己数,减少了不少程序员的负担。至于后两种,必须是10个哦。否则报错;当然如果你的要求就必须是10个,还是写上数字吧,让 编译器帮你检查一下,以防止敲错了!当然还可以写成a:=; 数组可以求长度了,有点像java了。 一直有个梦想, 想定义一个变量叫while,怎么也无法实现, 今天go帮我实现了。go中没有while关键字。只有for。用最少的关键字。 go真为程序员作想。 快看第十行阿。两个变量交换,一句话就完成了,在C中怎么也要三行代码;还有一个中间变量;不是这个是不是一条汇编语句完成的。 虽然没有while, go 也没有忘记我们的习惯, 将两个分号两边的赋值去掉,for就变成while格式了。对于 while(true)则简单了。一个for就完成了。 15,16行为什么不合并呢?自己试试吧。 语法错误哦。go的文档中说++后面,编译器会自动添加分号。


package main func main(){ var a=[...]int{10,sans-serif"> //var a[10]int=[10]int{10,sans-serif"> //var a[10]int=[...]int{10,sans-serif"> fori:=0;i<len(a);i++{ forwhile:=i;while<len(a);while++{ ifa[i]>a[while]{ a[i],sans-serif"> } } } i:=0 fori<len(a){ print(a[i],sans-serif"> i++ } } 虽然没有while, go 也没有忘记我们的习惯, 将两个分号两边的赋值去掉,for就编程while格式了。对于 16,17行为什么不合并呢?自己试试吧。 语法错误哦。go的文档中说++后面,编译器会自动添加分号。 五, Array 与 slice   六,len注意点:对于s,用c语言来描述是一个结构体,其中包含了两个元素(str (*uint8), len(int64));其中str指向了真正的字符串;len中记录了字符串的长度;   所以,只有array的长度是直接由编译器得到,而slice,和string的长度则是有变量记录的;   七, 指针通过上面的程序可以发现,modify函数传进去的是s的地址,所以等函数返回后,s所对应的字符串已经更改;而mo函数中的b由于是s的copy,所以虽然在函数中修改了b的值,但是等函数返回后,仍没有效果, 但是有一点需要注意的是,b这个copy中,指示上面的str,len两个变量拷贝了,而实际的字符串只有一份,所以节约了空间,提供了性能;   写这段代码的时候,发现一个细节问题,如果注释掉行13; 在gdb中调试到第10行是,可以使用p s命令和whatis s命令查看s的具体结构,但是如果留有13行,则symble table中的变量变成了&s,在gdb中可以使用i locals查看到该变量,但是如果用p打印该变量,还有待研究。 总结

以上是内存溢出为你收集整理的golang了解全部内容,希望文章能够帮你解决golang了解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1285063.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存