Golang開發踩過的坑

2021-10-08 03:44:07 字數 3001 閱讀 6735

如何判斷某type型別實現了某介面

作為golang開發的小白,日常開發時候總會遇到一些問題,本篇部落格的會收錄一些日常開發時踩過的坑,可能有解決了的,也許也會有沒解決的。

在使用for-range進行遍歷切片或陣列時,遍歷時的指標indexvalue只是乙個臨時且位址不變的記憶體位址

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 你的目標郵箱名 如果你要修改當前全域性的使用者名稱和郵箱時,需要在上面的兩條命令中新增...