在Go语言中,函数被看做是第一类值:(first-class values):函数和其他值一样,可以被赋值,可以传递给函数,可以从函数返回。也可以被当做是一种“函数类型”。例如:有函数func square(n int) int { return n * n },那么就可以赋值f := square,而且还可以fmt.Println(f(3))(将打印出“9”)。 Go语言函数有两点很特别:
在本例子中,函数EmployeeById(id int)返回的是值类型的,它的取值EmployeeByID(1).Salary也是一个值类型;值类型是什么概念?值类型就是和赋值语句var a = 1或var a = hello world等号=右边的1、Hello world是一个概念,他是不能够被赋值的,只有变量能够被赋值。
修改程序如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type Employee struct {
ID int
Name string
Address string
DoB time.Time
Position string
Salary int
ManagerID int
}
funcEmployeeByID(id int)Employee {
return Employee{ID:id}
}
funcmain(){
var a = EmployeeByID(1)
a.Salary = 0
}
这就可以编译通过了
在声明方法时,如果一个类型名称本身就是一个指针的话,不允许出现在方法的接收器中
请看下面的例子,请问会编译通过吗?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import (
"fmt"
)
type littleGirl struct{
Name string
Age int
}
type girl *littleGirl
func(this girl)changeName(name string){
this.Name = name
}
funcmain(){
littleGirl := girl{Name:"Rose", Age:1}
girl.changeName("yoyo")
fmt.Println(littleGirl)
}
答案:
1
不能编译通过,会提示“invalid receiver type girl(girl is a pointer type)”
在Go语言中,函数被看做是第一类值:(first-class values):函数和其他值一样,可以被赋值,可以传递给函数,可以从函数返回。也可以被当做是一种“函数类型”。例如:有函数func square(n int) int { return n * n },那么就可以赋值f := square,而且还可以fmt.Println(f(3))(将打印出“9”)。 Go语言函数有两点很特别:
在本例子中,函数EmployeeById(id int)返回的是值类型的,它的取值EmployeeByID(1).Salary也是一个值类型;值类型是什么概念?值类型就是和赋值语句var a = 1或var a = hello world等号=右边的1、Hello world是一个概念,他是不能够被赋值的,只有变量能够被赋值。
修改程序如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type Employee struct {
ID int
Name string
Address string
DoB time.Time
Position string
Salary int
ManagerID int
}
funcEmployeeByID(id int)Employee {
return Employee{ID:id}
}
funcmain(){
var a = EmployeeByID(1)
a.Salary = 0
}
这就可以编译通过了
在声明方法时,如果一个类型名称本身就是一个指针的话,不允许出现在方法的接收器中
请看下面的例子,请问会编译通过吗?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import (
"fmt"
)
type littleGirl struct{
Name string
Age int
}
type girl *littleGirl
func(this girl)changeName(name string){
this.Name = name
}
funcmain(){
littleGirl := girl{Name:"Rose", Age:1}
girl.changeName("yoyo")
fmt.Println(littleGirl)
}
答案:
1
不能编译通过,会提示“invalid receiver type girl(girl is a pointer type)”