如何判斷某type型別實現了某介面
作為golang開發的小白,日常開發時候總會遇到一些問題,本篇部落格的會收錄一些日常開發時踩過的坑,可能有解決了的,也許也會有沒解決的。
在使用for-range進行遍歷切片或陣列時,遍歷時的指標index,value只是乙個臨時且位址不變的記憶體位址
package main
import
"fmt"
func
main()
numpointer :=[10
]*intfor i, v :=
range num
fmt.
println
(numpointer)
//[0xc00001e0f0 0xc00001e0f0 0xc00001e0f0 0xc00001e0f0 0xc00001e0f0 0xc00001e0f0 0xc00001e0f0 0xc00001e0f0 0xc00001e0f0 0xc00001e0f0]
}
要想的到原來切片或者陣列中元素的的位址應該改為
numpointer[i]
=&num[i]
在進行函式呼叫時,應注意函式的引數與返回值是否衝突或者是否在相同呼叫區域內
package main
import
("errors"
"fmt"
)//test 將引數進行加1後與乙個err,一起返回
func
test
(a int)(
int,
error
)func
main()
} fmt.
println
(b)}
輸出結果為:
test 1
test 1
0
將main函式中的test呼叫改為:
func
main()
} fmt.
println
(b)}
修改後輸出為:
test 1
test 2
2
package main
import
("fmt"
"strconv"
"time"
)// 介面:一組方法的集合
// opencloser 介面定義兩個方法 返回 error
type opencloser inte***ce
type win struct
func
(d *win)
open()
error
func
(d *win)
close()
error
type door struct
func
(d *door)
open()
error
type autodoor struct
func
(a *autodoor)
open()
error
func
main()
, 3, "warning"}
door:=
&autodoor
, delay:3,
msg:
"test",}
door.
open()
//autodoor
if v, ok := door.opencloser.
(*win)
; ok
door.opencloser.
open()
//door
if v, ok := door.opencloser.
(*door)
; ok
door.
close()
//win
if v, ok := door.opencloser.
(*win)
; ok
fmt.
println
("4"
,door.opencloser.
(*door)
)}
輸出結果為:
open after 3 seconds
door is opening:test
1 &win open...
win close...
3 &4 &
當結構中有匿名空介面時,注意建立新物件時傳入的空介面為指標型別,否則會報錯。var _ inte***cename=new(typename)
var _ inte***cename=(*typename)(nil)
package main
import "fmt"
type a inte***ce
type b inte***ce
type person struct
func (p *person) say(str string) string
var _ b = new(person)//會分配記憶體,編譯器檢查,編譯時檢查
var _ b = (*person)(nil)//不會分配記憶體,編譯器檢查,編譯時檢查
func main()
var i inte***ce{} = person
c := i.(b)
fmt.println(c.say("hello"))//alice say hello
}
引申出new與make的區別
前端開發種踩過的坑
在公司裡面,踩坑最多莫過於變數名命名 檔名命名 函式名命名 標籤名命名 常量統一下劃線加大寫 變數統一駝峰嚴禁下劃線,vue檔案的name除了駝峰外首字母還得大寫 不能使用魔術數字除了1,0,1 檔名使用功能模組 下劃線 具體功能細節,而且每個功能基本擁有乙個common檔案,用於儲存該業務 復用的...
vue專案開發中踩過的坑
一 路由 這兩天移動端的同事在研究vue,跟我說看著我的專案做的,子路由訪問的時候是空白的,我第一反應是,不會模組沒載入進來吧,還是。此處省略一千字。廢話不多說上 路由 redirect ordermanger children element的選單元件 問題描述 1 根據以上 訪問list路由時訪...
git踩過的坑
4.git 修改當前的project的使用者名稱的命令為 git config user.name 你的目標使用者名稱 git 修改當前的project提交郵箱的命令為 git config user.email 你的目標郵箱名 如果你要修改當前全域性的使用者名稱和郵箱時,需要在上面的兩條命令中新增...