温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Google Go语言基础知识有哪些

发布时间:2021-11-17 17:01:15 来源:亿速云 阅读:152 作者:iii 栏目:web开发

这篇文章主要讲解了“Google Go语言基础知识有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Google Go语言基础知识有哪些”吧!

先来个hello world

hello.go

package main //声明本文件的package名    import "fmt" //import语言的fmt库——用于输出    func main() { var str string = "hello world" //str := "hello world" //var str = "hello word"    fmt.Println(str)  }

运行

有两种方式可以解释运行

1、先编译:go build hello.go

再运行:./hello

2、也可以直接进行编译运行(其实下面这个命令实际是编译成hello.out再执行):go run hello.go

对于习惯了C系列语言的同学来说,会对go的语法很不习惯。***,go没有使用“;”作为语句结束标志;第二,go是变量在类型前面,变量初始化还可以如注释的那两行语句,不用指定类型,go编译器可以从初始化表达式的右值导出该变量应该声明为哪种类型,这让go看起来有点像动态语言,这也可能为什么有人说它是python 4.0的原因吧。

go很可能是***个将代码风格进行强制统一的语言,例如go语言要求public的变量名必须以大写字母开头,private变量则以小写字母开关,这种做法不仅免除了public,private关键字,更重要的是统一了风格。还有,对于判断语句,如果你写成这样:

if str == "descur"{     .... } else{     .... }

是不能编译通过的,一定要写成这样:

if str == "descusr"{     ... }else{     ... }

这可能对那些在微软怀抱中长大的孩子来会很痛苦,但对像我这些有代码洁癖的人来说未尝不是好事。其实统一了代码风格,进行团队合作时是很有益的。

编程哲学

C语言是纯过程式的,这和它产生的历史背景有关。C#/JAVA语言则是高度的面向对象语言,典型表现是它们的体系里不存在孤立的方法,这些方法必须是属于某个类。而go没有去否认任何一方,而是用批判吸收的眼光,综合了各种编程思想,融合众家之长,极力维持语言特性的简洁,力求小而精,越深入go,你就会发现go真的是太简洁了。

从编程范式的角度看,go是变革派,不是改良派。

虽然go属于面向对象语言,但在go的概念里没有面向对象这个概念,只有结构体。go的类具有高度的粒子性,如下面的代码:

type rect struct {       width, height int  }    func (r *rect) area() int { //求面积       return r.width * r.height   }       func (r *rect) perimeter() int{ //求周长       return 2*(r.width + r.height)   }       func main() {       r := rect{width: 10, height: 15}       fmt.Println("面积: ", r.area())       fmt.Println("周长: ", r.perimeter())        rp := &r       fmt.Println("面积: ", rp.area())       fmt.Println("周长: ", rp.perimeter())   }

类和类方法完全分开,只有在初始化对象后才进行调用,减少了耦合度。go没有构造函数和析构函数。由于go语言中没有虚函数,也就没有vptr,支持构造函数和析构函数就没有太大价值。

其次,go语言反对函数和操作符重载,而C#,C++,和JAVA允许同名函数或者操作符,只要它们的参数列表不同。虽然重载解决了一小部分OOP问题,但却给这些语言带来了极大的负担,并且这种方法对解决问题问题并没有带来多大价值,所以go就不提供重载。

再次,go反对继承,反对虚函数和虚函数重载。其实,go也提供了继承,只不过采用了组合的方法来提供:

type Car struct{      Base      ...  }    func (color *Car) Drive(){      ...  }

放弃了大量的OOP特性后,go提供了一份相当棒的功能:接口。你可能会有疑问,所有面向对象语言也有接口啊?但那些面向对象语言的接口都基本上一样,而go的却跟它们不一样。

go语言中的接口与其他语言***的一点区别是它的非侵入性。在C#等面向对象语言中,为了实现接口,你需要从接口继承,如:

public interface IBankAccount {     void PayIn(decimal amount); }
class SaverAccount : IBankAccount {      public void PayIn(decimal amount)     {         Console.WriteLine("This is PayIn");     }  }

在go语言中,实现类的时候无需从接口派生,如:

type SaverAccount  struct{   //go     ... }  var saveAccount IBankAccount = new(SaveAccount)

只要实现了IBankAccount要求的所有方法,就实现了该接口,可以进行赋值,相当原子性。

感谢各位的阅读,以上就是“Google Go语言基础知识有哪些”的内容了,经过本文的学习后,相信大家对Google Go语言基础知识有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI