從java轉go,目前覺得難以理解的還是結構體,還有&*取址等符號的用法。希望大佬們能給我一些啟發~ ^ ^
uj5u.com熱心網友回復:
學習和使用go不需要C語言掌握的很好.你只要能區分參考和物體就行了.
結構體的話就理解成一個java bean
只不過沒有java的OOP概念.
話說java不是挺好的么,為啥要轉go,
原來用java很容易搞定的東西現在你會覺得處處不順手的.
uj5u.com熱心網友回復:
我理解 struct 是具有封裝性,具有物件的作用。想自定義一個型別,用struct,模型物體都是用struct定義。對 * 和 & 理解舉個例子:
type Dog struct {
}
*Dog 代表 Dog 型別的指標型別。Dog 是 *Dog 的基本型別。*Dog 的值表示指向它的基本型別 Dog 的值的指標。
使用取址運算子 &,&Dog{} 獲取本型別值 Dog{} 的指標值。使用取值運算子 *, *d 獲取指標 d 指向的基本型別值。
可以參看:https://github.com/stayfoo/stayfoo-hub/blob/master/docs/golang/7、go中的指標.md
uj5u.com熱心網友回復:
哪些java很容易搞定go不順手的 你說說看uj5u.com熱心網友回復:
這不是一個需要抬杠的問題。。。一個只熟悉java而沒有其他語言經驗的人轉到go確實會處處不習慣的。
這個沒啥爭議的。沒必要抬杠。
uj5u.com熱心網友回復:
指標是Go的核心概念,也是主要難點之一。什么時候加”&“,什么時候加”*“,很容易搞混。一個關鍵點是要區分定義時和使用時的區別。
* 什么時候用”*“?
+ 在定義指標型別時用
* 什么時候用”&“?
+ 在需要把物體轉化為指標時 ( 從來不在定義時用”&“)
* 為什么要把物體轉化為指標?
+ 如果函式的引數和回傳值是指標,而你現有的是物體(Dog{}), 那么你要先轉換才能傳遞引數或回傳(&Dog{})
* 在訪問指標和物體的成員時有區別嗎?
+ 沒有,不論Dog{} 是物體還是指標,都可以用"Dog.Leg". 這是Go出眾的設計,省去許多麻煩。
* 為什么要把函式的引數和回傳值定義為指標?
+ 為了能在函式中修改引數的值
+ 當回傳值為空時,指標可以設為nil,很容易。物體要設為空值(結構體的空值),很麻煩。
+ Go規定,當在結構體(struct)中定義方法(method)時, 每個方法有一個接受器(receiver)。對于一個結構的所有方法,要么接受器全是指標型別,要么接受器全是物體型別。所以一般的原則是都定義成指標型別。
* 除了定義時用"*", 還什么時候用它?
+ 當你已有指標型別,但需要回傳物體型別,這時需要把指標轉化為物體,要用”*“,相當于”&“的反操作。
另外一個與之相關的很重要概念”參考型別(reference type)“。在Go語言中,”map, channel, slice,interface“是參考型別,”array,struct“是值型別(value type). 參考型別類似指標,但不是指標,前面不能加”*“把它變成物體。這部分比較復雜,要想完全講透需要寫一篇文章。重點我已點出來了,你先慢慢體會。
另外關于學習Go語言,請看我的文章**”如何快速高效率地學習Go語言“(https://zhuanlan.zhihu.com/p/77999699)**, 或是我對["怎么學習 Golang?"](https://www.zhihu.com/question/23486344/answer/787113240)的回答.
uj5u.com熱心網友回復:
因為公司有要求, 就要開始用go寫平臺了,然后看網上好想也有好多培訓機構的網課,感覺質量參差不齊的,學了一部分,但是感徑訓是比較模糊uj5u.com熱心網友回復:
負責任地說go很好玩...我也是從java轉到go,
準確地說是2個現在都用, 不是徹底轉戰那種,
go這個東西確實好用,越用越順手,
只是不要嘗試用java去比較它, 會很失望的.
go有go的玩法, 不要習慣性的用OOP的思維去使用它.
go到處都是指標, 而且很多地方也要求引數必須是指標, 習慣了就好了.
和C C++的指標比起來, go的指標要簡單和安全許多.
uj5u.com熱心網友回復:
從java轉到go干了半年,代碼寫的是很爽,后來又轉回了java感覺啥都不對勁了uj5u.com熱心網友回復:
我一直不明白指標的作用
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/80691.html
標籤:其他技術討論專區
上一篇:資料分析
