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.