Golang基础
slice
创建一个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
的最大容量append
向slice
里面追加一个或者多个元素,然后返回一个和slice
一样类型的slice
copy
函数copy
从源slice
的src
中复制元素到目标dst
,并且返回复制的元素的个数
总结:slice 和数据的区别在于 有没有定义长度
map
创建一个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)
}
}
}