Golang基础学习(与java对比)

Golang基础

slice

  1. ​ 创建一个slice(切片)

    slice := []int {lenth, 'b', 'c', 'd'}

    与java数组不同的是:

    arr := [5]int{1,2,3}

    必须定死长度,否则会报错

    non-constant array bound length

    slice 有一种是java中数据和list的结合体的感觉

    对于slice有几个有用的内置函数:
    • len 获取slice的长度
    • cap 获取slice的最大容量
    • appendslice里面追加一个或者多个元素,然后返回一个和slice一样类型的slice
    • copy 函数copy从源slicesrc中复制元素到目标dst,并且返回复制的元素的个数

总结:slice 和数据的区别在于 有没有定义长度

map

  1. ​ 创建一个map(与java基本类似),只是通过maps1[key1]获得结果的时候,有第二个参数(布尔值),可以判断是否这个key是不是存在,当然也可以只返回一个参数

    maps1 := make(map[string]string)
    key1 := "key1"
    maps1[key1] = key1
    s,ok := maps1[key1]
    if ok {
        fmt.Println("hava key [",s,"]")
    }

实现接口区别

golang

package main

type Dock struct {
    Sound string
}



func (this Dock) voice(a VoiceIFS) VoiceIFS {

    return this
}

package main

import "fmt"

type VoiceIFS interface {
    voice(VoiceIFS) VoiceIFS
}


func main()  {
    dock:= Dock{Sound : " ga ga ga "}

    var t VoiceIFS
    t = dock
    ifs := t.voice(dock)
    fmt.Println(ifs)
}




结果:

{ ga ga ga }

java

public interface VoiceIFS {
    VoiceIFS voice(VoiceIFS s) ;
}
public class Dock   implements VoiceIFS {

    private String sound ;

    public String getSound() {
        return sound;
    }

    public void setSound(String sound) {
        this.sound = sound;
    }

    @Override
    public VoiceIFS voice(VoiceIFS s) {
        return this;
    }

    @Override
    public String toString() {
        return "Dock{" +
                "sound='" + sound + '\'' +
                '}';
    }
}
public class TestVoiceIFS {

    public static void main(String[] args) {
        VoiceIFS s = new Dock();
        ((Dock) s).setSound(" ga ga ga");
        VoiceIFS voice = s.voice(s);

        System.out.println(voice);
    }

}

结果:

Dock{sound=' ga ga ga'}

总结:

java 实现结果需要implement 关键词来指定实现具体接口,而golang的话只需要与某个接口中的某个方法名字相同即可,golang更加松散,但是给我的感觉来说还是java的设计相对来说好一点 结构比较清晰,且golang的接口名字估计不能相同,

### 通过switch type 判断 接口类型

func main()  {
    doSomething(111,float32(1),"111")
}

func doSomething(item... interface{})  {
    for _,e := range item {
        v := reflect.ValueOf(e)
        typ := v.Interface()
        switch e.(type) {
        case int:
            i := typ.(int)
            i++
            fmt.Println("this is int interface,then do something...",i)
        case float32:
            f := typ.(float32)
            f += 1.08
            fmt.Println("this is float32 or float64 interface,then do something...",f)
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值