golang type的用法理解(陆续补充)

首先golang type 可以用来定义  结构体(struct)、接口(interface)、函数(type A func(int, int))、新类型(type I int)

再,以下都是博主手敲的 ,结合官方文档自己理解的,如果有哪里写错了,你咬我啊~~

引:

首先要先谈 别名和新类型

//这里定义了一个新类型 objMap 定义了一个新的结构体类型(理解的 如果错啦 ,评论区帮忙提醒下)
type objMap struct {
	X int
	Y string
}


//这里定义了新的 类型 m  ,和  objMap 内存布局完全一样,但是是两个不痛的类型 
type m objMap

1、type定义函数

先说函数吧,毕竟理解起来比较蛋疼,go函数容易和go方法混掉,php 和java,net 也没分那么清楚

来,跟着博主的思路来:

下面这玩意 叫函数   

定义:(func+函数名+ 参数 + 返回值(可选) + 函数体)

调用:  function(variable,参数列表)

func main(){
	//单个
	fmt.Println(add(2,2))
}
func add(x int,y int ) int{
	//返回值
	return x * y
}

下面那玩意叫方法    

定义:(func+接收者(不好理解,你就理解成这个位置可以放自定义类型就是上面用type定义的那4种类型)+ 函数名+ 参数 + 返回值(可选) + 函数体) //自定义类型,都可以有方法,不仅仅是结构体

调用:  variable.function(参数列表)  

type MyFloat float64;
func (f MyFloat) Abs()float64{
	if f<0{
		return float64(-f)
	}
	return float64(f)
}
func main() {
	f:=MyFloat(-math.Sqrt2);
	fmt.Println(f.Abs1())
}

有时候你会碰到 自定义参数里面加了一个* 比如  func (a *int)abs() int{},这个星(我理解就是指针指向a这个存储空间的意思)

看看下面这个代码

func (ax ageVal) testAge1() int{//ageNew 值没变的
	ax=ax * 5;
	return 0
}
func (ax *ageVal) testAge2() int{//ageNew 变的
	*ax=*ax * 8;
	return 0
}
func main() {
    var ageNew ageVal=2
	ageNew.testAge1();
	fmt.Println("ageNew=",ageNew)//ageNew=2    
	ageNew.testAge2();
	fmt.Println("ageNew=",ageNew)//ageNew=16
}

如果你不理解上面那个指针go方法中的用法,我举个例子,你理解下 就 就是下面那个意思 (下面是 javascript的例子)  

var a=1;    
function b(c,callback){
    c+=1;
    callback(c)
}; 
b(a,function(c){
    a=c;
    console.log(a);//这个时候a等于2
});

好了,你如果还看不懂 ,到群里问问大家吧。会进群的 基本都是看到这篇博文的 。

vue交流1群:153181864  前端交流群(满)别加,群主QQ svip要过期了。穷到没钱了,不续费了。。。。
vue交流2群:869745456  前端交流2群  

go交流群 852311425  go交流群 

2、定义接口 

没啥特别的  我备注直接写在代码上,方便大家理解

package main

import "fmt"

type Abst interface {
	Abs() float64
}
func main(){
	f:=MyFloatx(2);
	fmt.Println(f.Abs())	//4
	d:=Mapx{2,6};
	fmt.Println(d.Abs())	//8
	//定义a b接口为Abst类型
	var a,b Abst;
	//本来 f.Abs() 来调用直接 是 调用Abs方法  现在 相当于  走的Abst接口 的Abs方法   然后根据传入类型不同  调用不同的Abs() 不同 下面两个方法
	a=f;
	fmt.Println(a.Abs())//4
	b=&d;
	fmt.Println(b.Abs())//8
}
type MyFloatx float64;//定义新类型
type Mapx struct {//定义新结构体
	x,y float64
}
//定义  Abs方法的MyFloatx 参数处理方法
func (f MyFloatx) Abs() float64{
	f=f*2;
	return float64(f);
}
//定义 Abs方法稤mapx结构体参数处理方法
func (v *Mapx) Abs() float64{
	a:=v.x+v.y
	return a;
}

猜你喜欢

转载自blog.csdn.net/xuelang532777032/article/details/107704516
今日推荐