<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 寫出以下代碼出現的問題 ~~~go package main import ( "fmt" ) func main() { var x string = nil if x == nil { x = "default" } fmt.Println(x) } ~~~ golang 中字符串是不能賦值`nil`的,也不能跟`nil`比較。 ## 寫出以下打印內容 ~~~go package main import "fmt" const ( a = iota b = iota ) const ( name = "menglu" c = iota d = iota ) func main() { fmt.Println(a) fmt.Println(b) fmt.Println(c) fmt.Println(d) } ~~~ ## 找出下面代碼的問題 ~~~go package main import "fmt" type query func(string) string func exec(name string, vs ...query) string { ch := make(chan string) fn := func(i int) { ch <- vs[i](name) } for i, _ := range vs { go fn(i) } return <-ch } func main() { ret := exec("111", func(n string) string { return n + "func1" }, func(n string) string { return n + "func2" }, func(n string) string { return n + "func3" }, func(n string) string { return n + "func4" }) fmt.Println(ret) } ~~~ 上面的代碼有嚴重的內存泄漏問題,出錯的位置是`go fn(i)`,實際上代碼執行后會啟動 4 個協程,但是因為`ch`是非緩沖的,只可能有一個協程寫入成功。而其他三個協程會一直在后臺等待寫入。 ## 寫出以下打印結果,并解釋下為什么這么打印的。 ~~~go package main import ( "fmt" ) func main() { str1 := []string{"a", "b", "c"} str2 := str1[1:] str2[1] = "new" fmt.Println(str1) str2 = append(str2, "z", "x", "y") fmt.Println(str1) } ~~~ golang 中的切片底層其實使用的是數組。當使用`str1[1:]`使,`str2`和`str1`底層共享一個數組,這回導致`str2[1] = "new"`語句影響`str1`。 而`append`會導致底層數組擴容,生成新的數組,因此追加數據后的`str2`不會影響`str1`。 但是為什么對`str2`復制后影響的確實`str1`的第三個元素呢?這是因為切片`str2`是從數組的第二個元素開始,`str2`索引為 1 的元素對應的是`str1`索引為 2 的元素。 ## 寫出以下打印結果 ~~~go package main import ( "fmt" ) type Student struct { Name string } func main() { fmt.Println(&Student{Name: "menglu"} == &Student{Name: "menglu"}) fmt.Println(Student{Name: "menglu"} == Student{Name: "menglu"}) } ~~~ 個人理解:指針類型比較的是指針地址,非指針類型比較的是每個屬性的值。 ## 寫出以下代碼的問題 ~~~go package main import ( "fmt" ) func main() { fmt.Println([...]string{"1"} == [...]string{"1"}) fmt.Println([]string{"1"} == []string{"1"}) } ~~~ 數組只能與相同緯度長度以及類型的其他數組比較,切片之間不能直接比較。。 ## 下面代碼寫法有什么問題? ~~~go package main import ( "fmt" ) type Student struct { Age int } func main() { kv := map[string]Student{"menglu": {Age: 21}} kv["menglu"].Age = 22 s := []Student{{Age: 21}} s[0].Age = 22 fmt.Println(kv, s) } ~~~ golang 中的`map`通過`key`獲取到的實際上是兩個值,第一個是獲取到的值,第二個是是否存在該`key`。因此不能直接通過`key`來賦值對象。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看