Go語言的坑三

2021-08-22 00:20:54 字數 2422 閱讀 1139

**:

請看下列的列子:

import (

"fmt"

"runtime"

"time"

func main()

for _, name := range names

for _, name := range names

li.fmtpointer()

答案:

能正常編譯通過,並輸出"poniter"

感覺有點詫異,請接著看以下的**,試問能編譯通過?

import (

"fmt"

type lili struct.fmtpointer()

答案:

不能編譯通過。

「cannot call pointer method on lili literal」

「cannot take the address of lili literal」

是不是有點奇怪?這是為什麼呢?其實在第乙個**示例中,main主函式中的「li」是乙個變數,li的雖然是型別lili,但是li是可以定址的,&li的型別是*lili,因此可以呼叫*lili的方法。

請看下列**,試問返回什麼

import (

"bytes"

"fmt"

"io"

const debug = true

func main()

利用golang自帶的json轉換包轉換,會將map中key的順序改為字母順序,而不是map的賦值順序。map這個結構哪怕利用for range遍歷的時候,其中的key也是無序的,可以理解為map就是個無序的結構,和php中的array要區分開來

請看以下程式,程式想要輸出json資料中整型id加上3的值,請問程式會報錯嗎?

func main()`

var jsondata map[string]inte***ce{}

json.unmarshal(byte(jsonstr), &jsondata)

sum := jsondata["id"].(int) + 3

fmt.println(sum)

答案是會報錯,輸出結果為:

panic: inte***ce conversion: inte***ce {} is float64, not int

使用 golang 解析 json 格式資料時,若以 inte***ce{} 接收資料,則會按照下列規則進行解析:

bool, for json booleans

float64, for json numbers

string, for json strings

inte***ce{}, for json arrays

map[string]inte***ce{}, for json objects

nil for json null

應該改為:

```go

func main()`

var jsondata map[string]inte***ce{}

json.unmarshal(byte(jsonstr), &jsondata)

sum := int(jsondata["id"].(float64)) + 3

fmt.println(sum)

:=往往是用來宣告區域性變數的,在多個變數賦值且有的值存在的情況下,:=也可以用來賦值使用,例如:

msgstr := "hello wolrd"

msgstr, err := "hello", errors.new("***")//err並不存在

但是,假如全域性變數也使用類似的方式賦值,就會出現問題,請看下列**,試問能編譯通過嗎?

var vartest string

func test()

f(&buf)

func f(out *father)

是對的,但是

var buf *father = new(child)

卻是不對的。應該改為:

var buf father = child{}

var pointer *father = &buf

要想讓問題最開始的**編譯通過要將以上**修改為:

import (

"fmt"

type father inte***ce

f(&buf)

func f(out *father){

if out != nil{

fmt.println("surprise!")

go語言的坑

package main import fmt func main mp make map int int fmt.println for range 坑 for index,value range slice 根本原因在於for range是用乙個變數承接mp中的內容的 for key,value...

Go語言的那些坑

golang的source檔案的命名和其他語言本無差別,但是golang自帶unit test,它的unit test有個小規範 所有unit test檔案都要以 test.go為結尾!所以,當你命名乙個非unit test檔案為 test.go,而且執意要編譯時,就會報錯 no buildable...

Go語言入坑

認識並安裝go語言開發環境 go語言簡介 go語言特點 go語言開發的應用 一些見解 go語言環境搭建 go語言基礎知識 第乙個go應用helloword 配置 go語言常用關鍵字 go語言開發工具liteide go語言資料型別 其它基礎 流程控制語句 switch for迴圈 go語言函式 go...