Golang基礎學習(與java對比)
阿新 • • 發佈:2018-12-30
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)
}
}
}