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