I just list A B C D E F  as  an example.
In real project we will use struct in struct .
when the struct goes deeper, and it may be managed by other people,
 if the deepest struct need a default value. F{x:1} 
The upper struct user "must" known the detail. 
here below I just figure out a way below to do that, but it's not a common 
way, just I know it .
 Other people who use my lib may not .  So he maybe use the zero value F{} 
 not F{x:1}
type F struct {x int32}
var FDefault = F{x:1}
type E struct {f F}
var EDefault = E{f: FDefault}
type D struct {e E}
var DDefault = D{e: EDefault}

在 2017年1月13日星期五 UTC+8下午5:49:46,Egon写道:
>
>
>
> On Friday, 13 January 2017 11:26:29 UTC+2, hui zhang wrote:
>>
>> thank u very much.  I know they all have work around.  and I also write 
>> some util my own.
>> I just wish go to make it more simpler, wish the code could be clean and 
>> short . 
>> Right now go let programer do repeat and Mechanical work
>>
>> the top 3  are bothering me most
>> [1],[2] let me do many type cast all the time.
>> [3]      let me have to do initialize default for each struct.
>> right now I am solving [3] like this.
>> type F struct {x int32}
>> var FDefault = F{x:1}
>> type E struct {f F}
>> var EDefault = E{f: FDefault}
>> type D struct {e E}
>> var DDefault = D{e: EDefault}
>>
>>
> What is the actual code that you are working on? I doubt you have structs 
> named F, E, D.
>
> It's very hard to suggest a better model for "something" without knowing 
> what that "something" is.
>
> + Egon
>  
>
>>
>>
>> 在 2017年1月13日星期五 UTC+8下午4:39:55,Egon写道:
>>>
>>> As Shawn mentioned, most of these were decided against for varying 
>>> reasons. I'll try to give as much info as I can remember.
>>>
>>> On Friday, 13 January 2017 09:44:10 UTC+2, hui zhang wrote:
>>>>
>>>> Disadvantage of Go
>>>> 1  No Generic For Now
>>>>
>>> That make user coding repeat code many times, even for basic type such 
>>>> as int float bool
>>>> It is not easy , even to make a generic min function. 
>>>>
>>> using interface will always check type casting.
>>>> and for []interface{} in generic function, u can't do cast 
>>>>
>>>
>>> You cannot cast []interface{} to []float64 because they have different 
>>> memory layouts.
>>>  
>>>
>>>>
>>>> 2   Incomplete  Type  in Basic Lib
>>>> Take math lib as an example,   math.Max math.Min are only for float64 , 
>>>> you have do stupid conversion for other type. 
>>>>
>>>
>>>> 3  No Default Value for struct.
>>>> Consider multilayer struct.   A {B {C {D {E {F} } } } 
>>>> to init A to a default value will be complicated.
>>>> And how about  A[] slice
>>>> And what if D E F are from third party lib ?  
>>>> You have to dig into 3rd party code just for its default value. 
>>>> For It may have none zero default value. 
>>>>
>>>
>>> All structs are zero initialized.
>>>
>>> If you had default-values for structs the overhead of constructing 
>>> something becomes non-obvious.
>>>  
>>>
>>>>
>>>> 4 Can not Cycle import.
>>>> package A B can not import each other at the same time. 
>>>> While other language can.
>>>> It seems not a big deal just put the the common thing in a new package
>>>> But when the package and project grow bigger, it just easy to say.
>>>> This change will affect all caller.
>>>>
>>>
>>> Structures that have cyclic dependencies have longer compile times, init 
>>> order becomes more confusing and prone for errors, and a program having 
>>> cyclic imports is harder to understand than one without it (usually).
>>>
>>> Break cycles with DI.
>>>
>>>
>>>> 5  Inconsistent type conversion 
>>>> bool type are normal type just like int and float , 
>>>> but u can't do below.  while other type can cast to others
>>>> int(bool) bool(int) 
>>>>
>>>>
>>> https://github.com/golang/go/issues/9367#issuecomment-143128337
>>>  
>>>
>>>> 6  No multi casting expression
>>>> func foo() (int16, int8)    
>>>> var i,j int32 = (int32,int32)(foo())
>>>> Since go can't do this, why go provide multi return value.
>>>>
>>>
>>> Why would you not return int32 immediately from `foo`?
>>> Why would you write `foo` in the first place?
>>>
>>> 7 No Ternary Expression
>>>> hardly find a language without it except go 
>>>>
>>>
>>>> 8 No Negative Index for slice 
>>>> all other script language support a[-1] as a[len(a)-1]
>>>>
>>>
>>> In such situations, indexing that involves computation (e.g. `a[n-5]`) 
>>> can easily hide mistakes.
>>>  
>>>
>>>>
>>>> When programing in go 
>>>> we have to do repeated type casting many times, due to the above.
>>>> write long code for Ternary ,int(bool) a[-1] etc
>>>>
>>>
>>> If you repeatedly need to use it, then:
>>>
>>> func ifthen(v bool, a, b int) { if v { return a; }; return b }
>>> func asint(v bool) int { return ifthen(v, 1, 0) }
>>>
>>> x := ifthen(a < b, a, b)
>>>
>>> init big struct with default value.
>>>> Which make Go not an Elegant and simple language.
>>>> Once I thought go was a simple language, 
>>>> but in fact we write more code.
>>>>
>>>> All above are proposal for many times. 
>>>> And it is 6 years(or more).
>>>> These basic functions are still not added. some of that should be add 
>>>> in version 1.0
>>>> I belive most above could make go simpler, 
>>>> someone know  a little programing could know how to use it.
>>>> however someone still fear it make go complicate like c++ 
>>>>
>>>
>>> But, it seems to me you are trying to use Go as a language that it is 
>>> not. Can you show the code where you are having problems with some/all of 
>>> these points, then we can discuss how to avoid these situations in the 
>>> first place.
>>>
>>> If you try to use any language in a way that it was meant to, you will 
>>> have problems.
>>>
>>> + Egon
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to