go的基本语法(变量和函数)

学习一门新语言,除了一些重要的特性以外,其实主要就是变量和函数。变量就是一个容器,用来存放值的, 函数就是一段特定的过程,它的作用是随着不同的目的而不同的,

就像数据结构和算法,所有的语言都离不开它们。

一,变量的声明和初始化

函数外的全局变量定义(必须带上var):

var a = 15    // 声明变量的同时赋值

var a int = 15  // 声明变量的同时赋值,编译器自动推导其数据类型

var a int

a =15

函数内的变量定义:

a := 10  或  var a = 10 或 var a int = 15

 

我们看到有此两种方式:

  1. var name [type] = value

    如果不书写 type ,则在编译时会根据value自动推导其类型。

  2. name := value

注意:“ :=” 是在函数内声明和初始化变量

但是!!!

var a := 15 是错误的

 

声明写法:

var a int

赋值写法:

a = 15 + 10

全局批量声明

var (

  a int

  b string

)

 

------------------------------------------------------------------------------------------ 华丽分割线 ----------------------------------------------------------------------------------------

二,函数的定义

func 函数名(参数列表) (返回值列表) {
// 函数体
}
 
例如:
函数返回单个值
func max(num1, num2 int) int {
  return result 
}
 
函数返回多个值
func swap(x, y string) (string, string) {
  return y, x
}
 
函数默认返回值

func swap(x, y string) (a string, b string) {
  a = y
  b = x
  return
}

 

如果不想关心其中的某个返回值,可以简单 地用一个下划线“_”来跳过这个返回值。

a, _ := swap("hello", "world")

 

访问权限,因为Go是以大小写来区分是公有还是私有,大写能被包外访问,小写只能被包内访问
 
 
------------------------------------------------------------------------------------------ 华丽分割线 ----------------------------------------------------------------------------------------
三,方法和函数
go不像其它面相对象语言一样可以写个class,然后在class里面写一堆方法,所以说go不能算是面向对象,语言层面本身决定不了,关键是使用者,
这点和erlang比较像,灵活性比较高,你要造什么就造什么,简单暴力点,别绕来绕去的。
 
类似面向对象的继承层次是完全没必要的。在 Go 中,类型就是类(数据和关联的方法)。如果方法在此类型定义了,就可以调用它,和其他类型 上是否存在这个方法没有关系。
 
方法的定义:
func (receiver_name receiver_type) function_name() [return_type]{
/* 函数体*/
}
 
例如:
type Phone struct {}
 
func (p *Phone) Call() string {
return "Ring Ring"
}
 
 
 

 

posted @ 2017-11-13 16:01  天之草  阅读(628)  评论(0编辑  收藏  举报