関数およびメソッドとの間の差
- 関数パラメータの受け渡しは、値型は、参照型ではないポインタ渡された値型パラメータ、混合することができない、参照型であり、値型です。
- (Xのx_type)を()メソッドを渡す値と基準タイプFUNCに応じたパラメータ{...} - > x_typeまたは* x_type
- Xパラメータはコンパイラを渡すことができ、ここでいずれかのポインタ型または値型に渡され、同様に処理、すなわち== X&X、図示されている<構造変数> <フィールド構成> == <構成&変数体> <フィールド構造>、my.Name ==(&マイ).nameの
- 着信前部構造変数は、方法は、型マイリスト割当フィールド値の変更の機能が影響を与えない、この機能と一致して、後の初期化プロセスの特定のフィールド値にx_typeの種類に依存し変更することができない、説明のmain()値フィールドを初期化するために、 *マイリストタイプフィールドの値が主な影響(の機能が割り当てられている)フィールドの値を変更する初期化します。
多くの場合、掘りインタビューは、以下のプログラム命令例えば、ここにあります
package main
import "fmt"
type Mylist struct {
Name string
Age string
}
func (my Mylist) value_type() {
fmt.Println("都能传,但是到这儿都是值类型")
}
func (my *Mylist) ptr_type() {
my.Name = "zzz"
fmt.Println("都能传,但是到这儿都是引用类型")
}
func ptr1_type(my *Mylist) {
fmt.Println("只能传指针类型")
}
func value1_type(my Mylist) {
fmt.Println("只能传值类型")
}
func main() {
var my Mylist //定义一个结构体实例
my.Name = "lululu" //初始化结构体实例my中的字段Name为"lululu"
my.value_type() //对于方法中,由于编译器优化,传递的结构体变量既可以是值也可以是地址
fmt.Println(my.Name) //无论是my为值还是地址,最终传递给绑定变量的都是值拷贝
(&my).value_type()
fmt.Println((&my).Name)
my.ptr_type() //但是具体的my.Name的值还是要看结构体绑定变量到底是值类型还是指针类型
fmt.Println(my.Name) //结构体变量为值类型,则方法内值的改变不影响main()中初始化变量的值
(&my).ptr_type() //结构体变量若为引用类型,则方法内值的改变影响main()中初始化变量的值
fmt.Println((&my).Name)
value1_type(my) //函数中不存在传入绑定变量,所以和之前一样,值类型只能传值类型,地址类型只能传地址类型,不可my和&my代表一个意思
ptr1_type(&my) //值类型函数内的改变不影响main()初始化变量的值,引用类型函数内的改变影响main()初始化变量的值,
}