pascal程序员学golang——Method

文章讨论了Go语言中的方法声明和结构体,与Pascal的记录类型和函数的相似与不同。通过一个计算圆面积的例子,展示了两种语言在定义和调用上的语法差异。尽管Pascal的语法可能显得更直观,但两种语言的理解和适应主要基于程序员的习惯。
摘要由CSDN通过智能技术生成

Golang是C和pascal的混血,如果你对后二者都熟悉,那么学习go的基础语法是很轻松的。

Go 编程语言支持称为方法(Method)的特殊类型的函数。在方法声明语法中,存在一个“接收器”来表示函数的容器。此接收器可用于使用 “.” 运算符调用函数。例如 -

语法

func (variable_name variable_data_type) function_name() [return_type]{
   /* function body*/
}

package main

import (
   "fmt" 
   "math" 
)

/* define a circle */
type Circle struct {
   x,y,radius float64
}

/* define a method for circle */
func(circle Circle) area() float64 {
   return math.Pi * circle.radius * circle.radius
}

func main(){
   circle := Circle{x:0, y:0, radius:5}
   fmt.Printf("Circle area: %f", circle.area())
}

初看这种语法糖很不适应,需要一段时间。 在此例子中,首先定义一个struct类型,里面有三个成员。接下来为这个名为Circle的结构定义了一个方法area,函数很简单,就是返回圆面积。在main函数中定义并初始化一个circle变量(注意全是小写字母),然后打印出圆面积。

上面的代码转为pascal后,就是下面这样的:

program recordTest;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, math;



(* define a circle *)
type
  float64 = double;
  TCircle = record
     x,y,radius: float64;
     function area(): float64;
  end;

(* define a method for circle *)
function TCircle.area: float64;
begin
   result := 3.14 * radius * radius
end;

const
   circle : TCircle = (x:0; y:0; radius:5);

procedure main();
begin

   writeln(Format('Circle area: %f', [circle.area]))
end;

begin
  try
    main();{ TODO -oUser -cConsole Main : Insert code here }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

 感觉上pascal语法上更直观,逻辑严谨清晰,当然这只是习惯问题。上面定义了一个记录:TCircle,里面有个方法:area。Record类型和struct类型一样不需要有构造函数,直接声明后就可赋值。

 运行结果

Golang

开始运行...

Circle area: 78.539816
                      运行结束。

Pascal 

Circle area: 78.50

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值